news 2026/5/3 20:11:48

前端 PWA:别再开发原生应用了,Web 应用也能做到

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
前端 PWA:别再开发原生应用了,Web 应用也能做到

前端 PWA:别再开发原生应用了,Web 应用也能做到

什么是前端 PWA?

PWA(Progressive Web App)是一种结合了 Web 应用和原生应用优点的应用形式。别以为 PWA 只是一个网页,它可以像原生应用一样安装到设备上,提供离线访问、推送通知等功能。

为什么需要前端 PWA?

  • 无需安装:用户可以直接访问,无需从应用商店下载
  • 离线访问:即使在没有网络的情况下也能访问应用
  • 推送通知:可以像原生应用一样发送推送通知
  • 安装到主屏幕:可以添加到设备主屏幕,提供类似原生应用的体验
  • 响应式设计:在不同设备上都能提供良好的用户体验
  • 性能优化:加载速度快,使用流畅
  • 安全可靠:通过 HTTPS 提供安全的访问

前端 PWA 核心技术

1. Service Worker

Service Worker 是 PWA 的核心技术,负责缓存资源、处理离线请求、推送通知等。

// service-worker.js const CACHE_NAME = 'my-pwa-cache-v1'; const urlsToCache = [ '/', '/index.html', '/styles.css', '/script.js', '/images/logo.png' ]; // 安装 Service Worker self.addEventListener('install', (event) => { event.waitUntil( caches.open(CACHE_NAME) .then((cache) => { console.log('Opened cache'); return cache.addAll(urlsToCache); }) ); }); // 激活 Service Worker self.addEventListener('activate', (event) => { const cacheWhitelist = [CACHE_NAME]; event.waitUntil( caches.keys().then((cacheNames) => { return Promise.all( cacheNames.map((cacheName) => { if (cacheWhitelist.indexOf(cacheName) === -1) { return caches.delete(cacheName); } }) ); }) ); }); // 处理网络请求 self.addEventListener('fetch', (event) => { event.respondWith( caches.match(event.request) .then((response) => { if (response) { return response; } return fetch(event.request) .then((response) => { if (!response || response.status !== 200 || response.type !== 'basic') { return response; } const responseToCache = response.clone(); caches.open(CACHE_NAME) .then((cache) => { cache.put(event.request, responseToCache); }); return response; }); }) ); }); // 处理推送通知 self.addEventListener('push', (event) => { const data = event.data.json(); const options = { body: data.body, icon: '/images/icon.png', badge: '/images/badge.png', vibrate: [100, 50, 100], data: { url: data.url } }; event.waitUntil( self.registration.showNotification(data.title, options) ); }); // 处理通知点击 self.addEventListener('notificationclick', (event) => { event.notification.close(); event.waitUntil( clients.openWindow(event.notification.data.url) ); });

2. Web App Manifest

Web App Manifest 是一个 JSON 文件,用于定义应用的名称、图标、主题色等信息,使应用可以被安装到设备主屏幕。

{ "name": "My PWA App", "short_name": "My PWA", "description": "A progressive web app example", "start_url": "/", "display": "standalone", "background_color": "#ffffff", "theme_color": "#007bff", "icons": [ { "src": "/images/icons/icon-72x72.png", "sizes": "72x72", "type": "image/png", "purpose": "any maskable" }, { "src": "/images/icons/icon-96x96.png", "sizes": "96x96", "type": "image/png", "purpose": "any maskable" }, { "src": "/images/icons/icon-128x128.png", "sizes": "128x128", "type": "image/png", "purpose": "any maskable" }, { "src": "/images/icons/icon-144x144.png", "sizes": "144x144", "type": "image/png", "purpose": "any maskable" }, { "src": "/images/icons/icon-152x152.png", "sizes": "152x152", "type": "image/png", "purpose": "any maskable" }, { "src": "/images/icons/icon-192x192.png", "
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 16:57:13

终极原神自动化助手完整指南:如何让游戏任务变得轻松高效

终极原神自动化助手完整指南:如何让游戏任务变得轻松高效 【免费下载链接】better-genshin-impact 📦BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条龙 | 全连音游 …

作者头像 李华
网站建设 2026/4/16 5:42:20

Godot游戏资源解包终极指南:一键提取PCK文件所有资产

Godot游戏资源解包终极指南:一键提取PCK文件所有资产 【免费下载链接】godot-unpacker godot .pck unpacker 项目地址: https://gitcode.com/gh_mirrors/go/godot-unpacker 想要探索Godot游戏中的精美资源却无从下手?面对神秘的PCK文件格式感到困…

作者头像 李华
网站建设 2026/4/15 23:15:41

终极指南:如何用qmc-decoder快速解锁QQ音乐加密音频文件

终极指南:如何用qmc-decoder快速解锁QQ音乐加密音频文件 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 你是否曾经从QQ音乐下载了喜欢的歌曲,却发现…

作者头像 李华
网站建设 2026/4/15 21:58:20

LinkSwift网盘直链下载助手:告别龟速下载的终极解决方案

LinkSwift网盘直链下载助手:告别龟速下载的终极解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天…

作者头像 李华
网站建设 2026/5/1 2:32:18

5个关键步骤:掌握全球首个Unity游戏通用模组加载器MelonLoader

5个关键步骤:掌握全球首个Unity游戏通用模组加载器MelonLoader 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader 你是…

作者头像 李华