PWA 简介
PWA (Progressive Web App)是一种采用现代化 Web 技术(如 Service Worker、Web App Manifest、HTTPS 等)来构建 Web App 的方法,它可以提供跟 Native App 一样的用户体验。PWA 在性能、离线、推送等方面都有很好的表现,并且可以运行在各种设备和平台上,免去了用户下载安装及开发者发布的成本。
旅游产业中 PWA 的应用
旅游产业中的 Web App 往往需要提供地图、导航、餐饮住宿、活动票务等功能,这些需要用户随时随地都能够方便地访问并使用。如果可以把 Web App 变成 PWA,那就可以满足用户的需求,同时还能提升用户体验和留存率。
下面以一个旅游产业中常见的导览应用为例,分享如何把它变成 PWA。
1. 添加 Web App Manifest
Web App Manifest 是一个 JSON 格式的文件,它描述了应用的各种元数据,如名称、图标、主题色、启动方式等。通过添加 Web App Manifest,可以让用户在手机桌面上保存 Web App 的图标,并像启动 Native App 一样启动 Web App。
// www.javascriptcn.com code example
{
"name": "旅游导览应用",
"short_name": "导览",
"description": "提供景点、餐饮住宿、活动票务等信息的旅游导览应用。",
"icons": [
{
"src": "icon-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "icon-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#ffffff",
"background_color": "#ffffff"
}2. 添加 Service Worker
Service Worker 是一种独立于 Web 页面的脚本,它可以拦截对网络资源的请求,并缓存资源以实现离线访问。通过添加 Service Worker,可以让 Web App 在离线时依然可用,并且可以缓存数据和 API 响应,提高应用的访问速度和性能。
// www.javascriptcn.com code example
// service-worker.js
// 安装 Service Worker
self.addEventListener('install', event => {
event.waitUntil(
caches.open('v1')
.then(cache => cache.addAll([
'/',
'/index.html',
'/style.css',
'/script.js',
'/icon-192x192.png',
'/icon-512x512.png'
]))
);
});
// 拦截请求,并从缓存中返回响应
self.addEventListener('fetch', event => {
event.respondWith(
caches.match(event.request)
.then(response => response || fetch(event.request))
);
});3. 添加推送功能
推送是 PWA 的另一个重要特性,通过推送可以向用户推送相关内容、消息或通知。在旅游应用中,可以根据用户的位置、喜好、历史记录等信息向用户推荐相关活动、景点等内容,提高用户的体验和参与度。
// www.javascriptcn.com code example
// index.html
<button onclick="subscribe()">订阅推送</button>
<script>
navigator.serviceWorker.ready
.then(registration => {
registration.pushManager.getSubscription()
.then(subscription => {
if (subscription) {
console.log('已订阅:', subscription.endpoint);
return;
}
const applicationServerKey = '<publicKey>';
registration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: applicationServerKey
})
.then(subscription => {
console.log('订阅成功:', subscription.endpoint);
})
.catch(error => {
console.error('订阅失败:', error);
});
})
.catch(error => {
console.error('获取订阅信息失败:', error);
});
})
.catch(error => {
console.error('获取 Service Worker 失败:', error);
});
function subscribe() {
navigator.serviceWorker.ready
.then(registration => {
registration.showNotification('这是一条推送消息', {
body: '点击此消息可以打开应用',
tag: 'pwa',
vibrate: [200, 100, 200],
icon: 'icon-192x192.png'
});
})
.catch(error => {
console.error('显示推送消息失败:', error);
});
}
</script>结语
通过添加 Web App Manifest、Service Worker 和推送功能,我们可以把旅游导览应用变成 PWA,提高应用的访问速度和性能,并且可以在用户离线时依然可以访问和使用。在实际开发中,我们还可以结合其他技术和工具,如 IndexedDB、Lighthouse、Workbox 等,来进一步完善 PWA 的体验和功能。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67cff63ae46428fe9ec54d92