Vue 3 30天精进之旅:Day 25 - PWA支持
一、引言
在前面的24天中,我们已经深入探讨了Vue 3的许多核心概念和高级特性。今天,我们将进入一个全新的领域——PWA(Progressive Web App)。PWA是一种现代Web应用程序的开发模式,它结合了Web和原生应用的优点,能够提供更流畅的用户体验。在Vue 3中,我们可以轻松地为我们的应用添加PWA支持。本文将带你一步步实现这一目标。
二、什么是PWA?
PWA(Progressive Web App,渐进式Web应用)是一种通过现代Web技术构建的应用程序,它结合了Web和原生应用的优点,能够提供更流畅、更接近原生应用的用户体验。PWA的核心目标是通过一系列技术手段,让Web应用具备以下特性:
1. 可离线访问
PWA通过Service Worker技术实现了离线访问功能。Service Worker是一种运行在浏览器后台的脚本,它可以拦截网络请求,并将资源缓存到本地。当用户在没有网络连接的情况下访问应用时,Service Worker可以从缓存中提供资源,确保应用仍然可用。
2. 快速加载
PWA利用缓存机制和资源预加载技术,能够显著提升应用的加载速度。通过缓存关键资源(如HTML、CSS、JavaScript文件),PWA可以在用户再次访问时快速加载页面,减少等待时间,提供流畅的用户体验。
3. 可安装
PWA支持添加到主屏幕的功能。用户可以将PWA像原生应用一样安装到设备的主屏幕上,并通过图标直接启动。这种体验让PWA更加接近原生应用,同时也减少了用户对应用商店的依赖。
4. 响应式设计
PWA采用响应式设计,能够适应不同的设备和屏幕尺寸。无论是桌面、平板还是手机,PWA都能提供一致的用户体验。
5. 安全性
PWA必须运行在HTTPS协议下,以确保数据传输的安全性。HTTPS不仅保护用户数据,还能防止恶意攻击。
6. 推送通知
PWA支持推送通知功能,能够像原生应用一样向用户发送通知。这种功能可以提升用户参与度,增加应用的粘性。
7. 跨平台
PWA基于Web技术开发,因此可以在任何支持现代浏览器的平台上运行,包括Windows、macOS、Android和iOS。这种跨平台特性大大降低了开发和维护成本。
三、在Vue 3中添加PWA支持
在Vue 3中,我们可以通过@vue/cli-plugin-pwa插件轻松地为应用添加PWA支持。以下是详细的实现步骤:
1. 安装PWA插件
首先,确保你的项目是基于Vue CLI创建的。如果还没有安装Vue CLI,可以通过以下命令安装:
npm install -g @vue/cli
然后,在项目根目录下运行以下命令,添加PWA插件:
vue add pwa
这个命令会自动安装@vue/cli-plugin-pwa插件,并在项目中生成相关的配置文件。
2. 配置PWA
安装完成后,你会在项目根目录下看到一个vue.config.js文件。这个文件中包含了PWA的配置选项。以下是一个常见的配置示例:
module.exports = {pwa: {name: 'My PWA App', // 应用名称themeColor: '#4DBA87', // 主题颜色msTileColor: '#000000', // Windows磁贴颜色appleMobileWebAppCapable: 'yes', // 是否启用iOS全屏模式appleMobileWebAppStatusBarStyle: 'black', // iOS状态栏样式manifestOptions: {background_color: '#ffffff', // 背景颜色icons: [{src: './img/icons/icon-192x192.png', // 图标路径sizes: '192x192',type: 'image/png'},{src: './img/icons/icon-512x512.png',sizes: '512x512',type: 'image/png'}]},workboxPluginMode: 'GenerateSW', // 使用GenerateSW模式生成Service WorkerworkboxOptions: {skipWaiting: true, // 跳过等待,立即激活新Service WorkerclientsClaim: true, // 控制所有客户端runtimeCaching: [{urlPattern: /^https:\/\/api\.example\.com\/.*/, // 缓存API请求handler: 'NetworkFirst',options: {cacheName: 'api-cache',expiration: {maxEntries: 50,maxAgeSeconds: 60 * 60 * 24 // 缓存1天}}}]}}
}
在这个配置中,我们定义了应用的名称、主题颜色、图标等。workboxPluginMode和workboxOptions用于配置Service Worker的行为。
3. 生成Service Worker
Service Worker是PWA的核心技术之一,它负责缓存资源并处理网络请求。在Vue 3中,我们可以通过workbox-webpack-plugin自动生成Service Worker。
在vue.config.js中,我们已经配置了workboxPluginMode为GenerateSW,这意味着Vue CLI会自动为我们生成Service Worker。你可以在src目录下找到一个registerServiceWorker.js文件,这个文件用于注册Service Worker。registerServiceWorker.js文件的内容如下:
import { register } from 'register-service-worker'if (process.env.NODE_ENV === 'production') {register(`${process.env.BASE_URL}service-worker.js`, {ready() {console.log('App is being served from cache by a service worker.')},registered() {console.log('Service worker has been registered.')},cached() {console.log('Content has been cached for offline use.')},updatefound() {console.log('New content is downloading.')},updated() {console.log('New content is available; please refresh.')},offline() {console.log('No internet connection found. App is running in offline mode.')},error(error) {console.error('Error during service worker registration:', error)}})
}
这个文件会在生产环境中自动注册Service Worker,并监听Service Worker的生命周期事件,如缓存成功、更新可用等。
4. 自定义Service Worker
如果你需要更复杂的Service Worker逻辑,可以将workboxPluginMode设置为InjectManifest,并在src目录下创建一个自定义的Service Worker文件(例如src/service-worker.js)。然后在vue.config.js中配置workboxOptions,指定自定义Service Worker的路径:
module.exports = {pwa: {workboxPluginMode: 'InjectManifest',workboxOptions: {swSrc: './src/service-worker.js' // 自定义Service Worker文件路径}}
}
在自定义的Service Worker文件中,你可以使用Workbox API实现更高级的缓存策略,例如动态缓存、缓存清理等。
5. 测试PWA功能
完成配置后,我们可以通过以下步骤测试PWA功能:
- 构建项目:运行
npm run build命令,构建生产环境的应用。 - 启动本地服务器:使用
serve或其他静态文件服务器,启动一个本地服务器来测试构建后的应用。npm install -g serve serve -s dist - 检查PWA功能:
- 离线访问:在浏览器中打开应用,然后断开网络连接,刷新页面,检查应用是否仍然可以访问。
- 添加到主屏幕:在移动设备或支持PWA的桌面浏览器中,检查是否可以将应用添加到主屏幕。
- 缓存资源:打开开发者工具,查看
Application选项卡中的Cache Storage,确认资源是否被正确缓存。
6. 部署PWA
当你确认PWA功能正常后,可以将应用部署到生产环境。PWA可以在任何支持HTTPS的服务器上运行。确保你的服务器配置正确,并且所有资源都能够被正确缓存。
7. 优化PWA体验
为了进一步提升PWA的用户体验,你可以考虑以下优化措施:
- 预加载关键资源:在
index.html中使用<link rel="preload">标签预加载关键资源,加快页面加载速度。 - 使用Web App Manifest:在
public/manifest.json中配置应用的图标、主题颜色、启动URL等,确保应用在添加到主屏幕时显示正确的信息。 - 实现推送通知:使用Push API和Notification API实现推送通知功能,提升用户参与度。
四、PWA在实际项目中的应用场景与最佳实践
PWA不仅仅是一种技术,更是一种提升用户体验和开发效率的解决方案。在实际项目中,PWA可以应用于多种场景,并带来显著的价值。以下是PWA的一些典型应用场景以及最佳实践:
1. 应用场景
(1)电商平台
电商平台通常需要快速加载和流畅的用户体验,以提升转化率。通过PWA,电商平台可以实现以下功能:
- 离线浏览:用户可以在没有网络连接的情况下浏览商品信息。
- 快速加载:通过缓存商品图片和页面资源,减少加载时间。
- 推送通知:向用户发送促销信息或订单状态更新。
(2)新闻和博客
新闻和博客类应用需要频繁更新内容,同时保证用户能够快速访问。PWA可以帮助实现:
- 离线阅读:用户可以将文章缓存到本地,离线阅读。
- 即时更新:通过Service Worker的更新机制,确保用户始终看到最新的内容。
- 添加到主屏幕:用户可以将新闻应用添加到主屏幕,方便随时访问。
(3)社交媒体
社交媒体应用需要实时性和互动性。PWA可以支持:
- 实时消息推送:通过推送通知功能,及时通知用户新消息或动态。
- 离线发布:用户可以在离线状态下撰写内容,待网络恢复后自动发布。
- 快速加载:通过缓存用户数据和媒体资源,提升加载速度。
(4)企业内部应用
企业内部应用(如CRM、ERP系统)通常需要跨平台和离线支持。PWA可以:
- 跨平台运行:在桌面和移动设备上无缝运行,减少开发成本。
- 离线操作:员工可以在没有网络连接的情况下继续工作,数据会在网络恢复后同步。
2. 最佳实践
(1)优化缓存策略
PWA的核心是缓存,因此需要根据应用的特点设计合理的缓存策略。以下是一些常见的缓存策略:
- 缓存优先:对于静态资源(如CSS、JavaScript文件),使用缓存优先策略,确保快速加载。
- 网络优先:对于动态内容(如API数据),使用网络优先策略,确保用户获取最新数据。
- 缓存清理:定期清理过期的缓存,避免占用过多存储空间。
(2)使用Web App Manifest
manifest.json文件是PWA的重要组成部分,它定义了应用的元数据。以下是一个典型的manifest.json配置示例:
{"name": "My PWA App","short_name": "PWA","start_url": "/","display": "standalone","background_color": "#ffffff","theme_color": "#4DBA87","icons": [{"src": "/img/icons/icon-192x192.png","sizes": "192x192","type": "image/png"},{"src": "/img/icons/icon-512x512.png","sizes": "512x512","type": "image/png"}]
}
(3)实现推送通知
推送通知是PWA的重要功能之一,可以提升用户参与度。以下是一个简单的推送通知实现示例:
// 请求通知权限
Notification.requestPermission().then(permission => {if (permission === 'granted') {// 显示通知new Notification('Hello!', {body: 'This is a push notification from your PWA.',icon: '/img/icons/icon-192x192.png'});}
});
(4)测试与监控
在开发PWA时,测试和监控是必不可少的环节。以下是一些常用的工具和方法:
- Lighthouse:使用Google Chrome的Lighthouse工具测试PWA的性能、可访问性和PWA特性。
- Workbox Debugging:在开发环境中启用Workbox的调试模式,查看缓存和Service Worker的行为。
- 用户反馈:收集用户对PWA功能的反馈,持续优化体验。
(5)渐进增强
PWA的核心思想是渐进增强,即在不影响基础功能的前提下,逐步添加高级特性。在开发过程中,应确保应用在不支持PWA的浏览器中仍然能够正常运行。
3. 案例分享
(1)Twitter Lite
Twitter Lite是Twitter推出的PWA版本,它显著提升了加载速度和用户体验。通过PWA技术,Twitter Lite实现了以下功能:
- 快速加载:页面加载时间减少了30%。
- 离线访问:用户可以在离线状态下浏览已加载的内容。
- 推送通知:及时通知用户新消息和动态。
(2)Pinterest
Pinterest通过PWA技术提升了用户参与度和转化率。以下是Pinterest PWA的主要改进:
- 加载速度提升:Pinterest的PWA版本将页面加载时间从23秒减少到5.6秒,显著提升了用户体验。
- 用户参与度增加:通过推送通知和离线功能,用户活跃度提升了60%。
- 安装率提高:用户将Pinterest PWA添加到主屏幕的比例提高了50%。
(3)Starbucks
Starbucks的PWA版本为用户提供了流畅的点单体验,即使在没有网络连接的情况下也能使用。以下是Starbucks PWA的关键特性:
- 离线点单:用户可以在离线状态下浏览菜单并下单,订单会在网络恢复后自动提交。
- 快速加载:通过缓存资源,PWA版本加载速度比原生应用更快。
- 跨平台支持:PWA版本可以在任何设备上运行,减少了开发和维护成本。
五、PWA的未来发展趋势
随着Web技术的不断发展,PWA的应用场景和功能也在不断扩展。以下是PWA未来的一些发展趋势:
1. 更强大的离线能力
未来的PWA将支持更复杂的离线功能,例如离线数据库同步、离线支付等。这将进一步缩小PWA与原生应用之间的差距。
2. 与原生API的深度集成
随着Web API的不断丰富,PWA将能够访问更多原生设备功能,例如蓝牙、NFC、AR/VR等。这将使PWA在更多领域发挥重要作用。
3. 跨平台开发的主流选择
PWA的跨平台特性使其成为开发者的首选。未来,更多的企业和开发者将选择PWA作为跨平台开发的主要技术栈。
4. 更智能的缓存策略
通过结合AI和机器学习技术,PWA将能够动态调整缓存策略,根据用户行为和网络条件优化资源加载。
5. 更广泛的应用场景
PWA将在更多领域得到应用,例如教育、医疗、金融等。通过PWA,这些领域可以提供更高效、更便捷的服务。
六、结语
通过今天的学习,我们成功地为Vue 3应用添加了PWA支持。PWA不仅能够提升用户体验,还能够让我们的应用更具竞争力。在未来的开发中,PWA将成为Web应用开发的重要趋势之一。希望本文能够帮助你在Vue 3中轻松实现PWA功能。
在接下来的几天中,我们将继续探索Vue 3的其他高级特性和最佳实践。敬请期待!
相关资源:
- Vue CLI PWA Plugin Documentation
- Workbox Documentation
- PWA 官方文档
相关文章:
Vue 3 30天精进之旅:Day 25 - PWA支持
一、引言 在前面的24天中,我们已经深入探讨了Vue 3的许多核心概念和高级特性。今天,我们将进入一个全新的领域——PWA(Progressive Web App)。PWA是一种现代Web应用程序的开发模式,它结合了Web和原生应用的优点&#…...
【Pico】使用Pico进行无线串流搜索不到电脑
使用Pico进行无线串流搜索不到电脑 官串方式:使用Pico互联连接电脑。 故障排查 以下来自官方文档 请按照以下步骡排除故障: 确认电脑和一体机连接了相同的路由器WiFi网络(相同网段) IP地址通常为192.168.XX,若两设备的IP地址前三段相同&…...
Golang Model 字段自动化校验设计
背景 在我们日常开发中,不可避免的总要去进行各种参数校验,但是如果在某个场景中,要校验的字段非常多,并且在其中还有耦合关系,那么我们手写校验逻辑就变得非常的低效且难以维护。本篇文档就基于 DDD 领域模型设计的思…...
移动端测试的挑战与解决方案:兼容性、网络问题及实战策略
引言 移动应用已成为用户触达服务的核心入口,但移动端测试面临设备多样性、网络波动、用户场景复杂等多重挑战。据Statista统计,2023年全球活跃移动设备超180亿台,操作系统(Android/iOS)版本碎片化率超30%,这对测试工程师提出了极高要求。本文深度解析移动端测试的核心痛…...
AI agent 未来好的趋势:AI医疗影像、智能客服、个性化推荐
AI agent 未来好的趋势:AI医疗影像、智能客服、个性化推荐 目录 AI agent 未来好的趋势:AI医疗影像、智能客服、个性化推荐比特币AI Agents稳定币扩容区块链AI基础设施AI驱动的软件应用AI赋能的行业应用AI医疗影像、智能客服、个性化推荐AI药物研发比特币 市场与机构化:2024…...
如何使用Three.js制作3D月球与星空效果
目录 1. 基本设置2. 创建星空效果3. 创建月球模型4. 添加中文3D文字5. 光照与相机配置6. 动画与控制7. 响应式布局8. 结语 在本文中,我们将一起学习如何利用Three.js实现一个3D月球与星空的效果,并添加一些有趣的元素,比如中文3D文字和互动功…...
Spring安装和使用(Eclipse环境)
一、Spring框架概述 1、 什么是Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复…...
网络安全-攻击流程-传输层
传输层攻击主要针对OSI模型的第四层,涉及TCP和UDP协议的安全漏洞。以下是常见攻击类型及其流程,以及防御措施: 1. SYN洪水攻击(TCP半连接攻击) 攻击流程: 目标选择:确定目标服务器的IP地址和开…...
图论- Dijkstra算法
Dijkstra算法 前言概念BFS基础模版DijkstraDijkstra函数签名State类distTo 记录最短路径伪代码模版第一个问题解答第二个问题解答第三个问题解答 前言 学习这个算法之间,必须要对BFS遍历比较熟悉,它的本质就是一个特殊改造过的BFS算法. 概念 Dijkstra算法是一种计算图中单源…...
CAS单点登录(第7版)9.属性
如有疑问,请看视频:CAS单点登录(第7版) 属性 属性定义 概述 属性定义 从身份验证或属性存储库源获取和解析 CAS 中属性的定义时,往往使用其名称进行定义和引用,而无需任何其他元数据或修饰。例如&#…...
一些常用的Yum源
一些常用的Yum源 # CentOS-Stream-AppStream.repo [appstream] nameCentOS Stream $releasever - AppStream baseurlhttps://mirrors4.tuna.tsinghua.edu.cn/centos-vault/8-stream/AppStream/x86_64/os/ gpgcheck0 enabled1# CentOS-Stream-BaseOS.repo [baseos] nameCentOS …...
【电路笔记】-双向计数器
双向计数器 文章目录 双向计数器1、概述2、双向计数器双向计数器能够通过任何给定的计数序列向上或向下方向计数。 1、概述 双向计数器是同步向上/向下二进制计数器,能够在两个方向上向或从某个预设值以及零进行计数。 除了从零开始“向上”计数并增加或递增到某个预设值之外…...
Python PyCharm DeepSeek接入
Python PyCharm DeepSeek接入 创建API key 首先进入DeepSeek官网,https://www.deepseek.com/ 点击左侧“API Keys”,创建API key,输出名称为“AI” 点击“创建",将API key保存,复制在其它地方。 在PyCharm中下…...
LeetCode 232: 用栈实现队列
LeetCode 232: 用栈实现队列 题目描述 使用栈实现队列的操作。支持以下操作: MyQueue():初始化队列。push(x):将元素 x 推入队列。pop():从队列中移除元素。peek():返回队列头部的元素。empty():检查队列…...
P6792 [SNOI2020] 区间和 Solution
Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1,a2,⋯,an),有 m m m 个操作分两种: chmax ( l , r , v ) \operatorname{chmax}(l,r,v) chmax(l,r,v):对每个 i ∈ [ l , r ] i \in [l,r] i∈[l,…...
基于智能体和RWA的分布式商业生态商业模型架构设计
引言 在数字化和智能化的浪潮下,传统商业生态正经历着深刻的变革。如何通过技术的赋能推动商业模式的升级,成为各行各业的共识。**智能体(AI Agents)与现实世界资产(RWA)**的结合,为分布式商业生…...
从ARM官方获取自己想要的gcc交叉编译工具链接(Arm GNU Toolchain),并在Ubuntu系统中进行配置
前言 本文是博文 https://blog.csdn.net/wenhao_ir/article/details/145547974 的分支博文。 在本博文中我们完成gcc交叉编译工具gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz的下载、配置、测试。 下载自己想要的gcc交叉编译工具的源码 目标文件的名字及说…...
Linux上Elasticsearch 集群部署指南
Es 集群部署 Es 集群部署 Es 集群部署 准备好三台服务器。示例使用:110.0.5.141/142/143 1、es用户和用户组创建,使用root账号 groupadd esuseradd -g es es2、将es安装包和ik分词器上传到:/home/es/目录下(任意目录都行&#…...
【系统架构设计师】虚拟机体系结构风格
目录 1. 说明2. 解释器体系结构风格3. 规则系统体系结构风格4. 例题4.1 例题1 1. 说明 1.p263。2.虚拟机体系结构风格的基本思想是人为构建一个运行环境,在这个环境之上,可以解析与运行自定义的一些语言,这样来增加架构的灵活性。3.虚拟机体…...
Python 字典思维导图
在本章中,你将学习能够将相关信息关联起来的Python字典。你将学习如何访问和修改字典中的信息。鉴于字典可存储的信息量几乎不受限制,因此我们会演示如何遍 历字典中的数据。另外,你还将学习存储字典的列表、存储列表的字典和存储字典的字典。…...
前台、后台、守护进程对比,进程组的相关函数
前台进程,后台进程,守护进程的对比 在前面我们已经了解了前台进程,后台进程,守护进程。 直接在终端中输入命令: 这是最常见的启动前台进程的方式。例如,在终端中输入 ./myprogram 就可以启动 myprogram 程…...
openAI最新o1模型 推理能力上表现出色 准确性方面提升 API如何接入?
OpenAI o1模型在回答问题前会进行深入思考,并生成一条内部推理链,使其在尝试解决问题时可以识别并纠正错误,将复杂的步骤分解为更简单的部分,并在当前方法无效时尝试不同的途径。据悉,o1不仅数学水平与美国奥林匹克竞赛…...
跨平台键鼠共享免费方案--Deskflow!流畅体验用MacBook高效控制Windows设备
在混合办公场景中,多设备协同已成为提升效率的关键需求。对于同时使用Mac与Windows设备的用户,如何通过一套键盘和触控板实现无缝切换,避免桌面空间浪费与操作冗余?本文将基于开源工具Deskflow,提供一套专业级解决方案…...
CAS单点登录(第7版)27.开发人员
如有疑问,请看视频:CAS单点登录(第7版) 开发人员 Javadocs文档 group org.apereo.cas has published 42 artifact(s) with total 8210 version(s) org.apereo.cas org apereo.cas 小组已出版 42 件作品,共 8210 个版…...
算法与数据结构(多数元素)
题目 思路 方法一:哈希表 因为要求出现次数最多的元素,所以我们可以使用哈希映射存储每个元素及其出现的次数。每次记录出现的次数若比最大次数大,则替换。 方法二:摩尔算法 摩尔的核心算法就是对抗,因为存在次数多…...
【2.10-2.16学习周报】
文章目录 摘要Abstract一、理论方法介绍1.模糊类增量学习2.Rainbow Memory(RM)2.1多样性感知内存更新2.2通过数据增强增强样本多样性(DA) 二、实验1.实验概况2.RM核心代码3.实验结果 总结 摘要 本博客概述了文章《Rainbow Memory: Continual Learning with a Memory of Divers…...
python包的管理
管理python包 python能跻身最欢迎编程语言前列的一个主要原因是python有着活跃的社区提供丰富的包,诸如numpy,pandas,scikit-learn等等。 python的包都存放PyPI中,PyPI即Python Package Index,是python的软件仓库。所…...
我用 Cursor 开发了一款个人小记系统
https://note.iiter.cn 项目背景 在日常工作和学习中,我们经常需要快速记录一些想法、收藏一些有用的链接或者保存一些重要的文本、图片内容。虽然市面上已经有很多笔记软件,但我想要一个更轻量、更简单的工具,专注于快速记录和智能检索。于是我开发了这款个人小记系统。 系统…...
安全测试中的身份认证与访问控制深度解析
第一部分:基本概念与核心问题 1. 身份认证与访问控制基础 1.1 身份认证三要素 知识因素(密码、PIN码)持有因素(硬件令牌、手机)生物因素(指纹、面部识别)1.2 访问控制模型 DAC(自主访问控制)MAC(强制访问控制)RBAC(基于角色的访问控制)2. 关键安全机制 2.1 会话…...
代码随想录-训练营-day30
今天我们要进入动态规划的背包问题,背包问题也是一类经典问题了。总的来说可以分为: 今天让我们先来复习0-1背包的题目,这也是所有背包问题的基础。所谓的0-1背包问题一般来说就是给一个背包带有最大容量,然后给一个物体对应的需要…...
