PWA 渐进式 Web 应用开发(离线缓存、桌面安装等)


🧠 一、什么是 PWA?

PWA(Progressive Web App)是一种让 Web 应用具有类似原生 App 用户体验的技术体系。

PWA 不是一个框架,而是由一组浏览器 API 组成的技术集合,包括:

  • 离线访问能力
  • Web App 安装到桌面
  • 推送通知
  • 后台同步
  • 原生风格 UI

🌟 PWA 的三大核心能力

能力描述
可安装性支持添加到桌面启动器,像原生 App 打开
离线能力使用 Service Worker 缓存页面资源
响应式设计跨设备自适应布局(桌面、平板、手机)

📦 二、PWA 的核心组成结构

  1. Manifest 文件(Web App Manifest)
  2. Service Worker(离线缓存 & 网络代理)
  3. HTTPS 环境支持(必须)

🧩 三、Manifest 文件详解(定义 App 元信息)

这是让浏览器识别并提供“安装到桌面”入口的关键配置文件。

✅ 示例:manifest.json

{"name": "My PWA App","short_name": "PWA","start_url": "/index.html","display": "standalone","background_color": "#ffffff","theme_color": "#3367D6","icons": [{"src": "/icons/icon-192.png","sizes": "192x192","type": "image/png"},{"src": "/icons/icon-512.png","sizes": "512x512","type": "image/png"}]
}

✅ 页面引入 Manifest

<link rel="manifest" href="/manifest.json" />

🛠 四、Service Worker 基本原理

Service Worker 是运行在浏览器主线程之外的一个 JS 文件,能拦截网络请求、缓存资源,实现离线体验和资源更新控制。

✅ 注册 Service Worker

if ('serviceWorker' in navigator) {navigator.serviceWorker.register('/sw.js').then(reg => {console.log('Service Worker 注册成功');});
}

✅ 示例:简单的离线缓存 sw.js

const CACHE_NAME = 'my-pwa-cache-v1';
const urlsToCache = ['/', '/index.html', '/style.css', '/main.js'];self.addEventListener('install', event => {event.waitUntil(caches.open(CACHE_NAME).then(cache => cache.addAll(urlsToCache)));
});self.addEventListener('fetch', event => {event.respondWith(caches.match(event.request).then(res => res || fetch(event.request)));
});

🧪 五、开发调试与测试

✅ Chrome DevTools > Application 面板

  • Manifest:查看配置是否生效
  • Service Workers:查看是否成功注册、缓存策略生效
  • Lighthouse:一键生成 PWA 可安装性、离线体验评分报告

💡 六、如何实现“安装到桌面”?

浏览器在检测到符合条件的 manifest + service worker 后,会自动触发 “安装提示事件”:

let deferredPrompt;
window.addEventListener('beforeinstallprompt', (e) => {e.preventDefault();deferredPrompt = e;// 触发 UI 提示showInstallButton();
});installBtn.onclick = () => {deferredPrompt.prompt();
};

✅ PWA 安装条件:

条件是否必需
HTTPS 环境
Manifest 配置完整
Service Worker 注册成功
页面被访问两次以上

🧠 七、PWA 与原生 App 的对比

功能项原生 AppPWA
离线访问
安装桌面图标✅(支持设备)
推送通知✅(需授权)
原生 API 支持程度✅ 完全部分限制
多平台发布需打包 & 审核一套代码,多端访问

📈 八、前端框架中的 PWA 实践

✅ Vue 项目启用 PWA(使用 @vue/pwa 插件)

vue add pwa

会自动生成 manifest.json 和注册逻辑。

✅ React/Vite 项目启用 PWA(使用 vite-plugin-pwa

npm install vite-plugin-pwa --save-dev
// vite.config.ts
import { VitePWA } from 'vite-plugin-pwa'export default defineConfig({plugins: [VitePWA({registerType: 'autoUpdate',manifest: {name: 'My PWA App',short_name: 'PWA',icons: [...]}})]
})

💬 面试高频问题拆解

📌 Q1:什么是 PWA?核心组成有哪些?

答:

PWA 是渐进式 Web 应用,提升 Web 体验接近原生 App。核心组成:

  • Manifest 文件(元信息定义)
  • Service Worker(拦截请求,离线支持)
  • HTTPS 环境(安全前提)

📌 Q2:PWA 离线缓存的原理是什么?

答:

通过注册 Service Worker 拦截浏览器发起的请求,并返回缓存的资源,实现离线访问。常用策略有:

  • Cache First
  • Network First
  • Stale While Revalidate

📌 Q3:有哪些适合使用 PWA 的项目类型?

答:

  • 资讯类、电商类(SEO + 离线体验)
  • 社区/工具类应用(提升复访率)
  • 内部系统(低频使用但需快速加载)
  • 中台管理系统(减少发布负担)

✅ 总结

PWA 让 Web 应用拥有媲美原生的体验,特别适用于提升首次加载速度、增加用户粘性、提供离线支持和安装入口,是现代前端项目值得配置和掌握的重要技术。它既是技术提升,也是体验设计的加分项

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/913333.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/913333.shtml
英文地址,请注明出处:http://en.pswp.cn/news/913333.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音视频会议服务搭建(设计方案-两种集成方案对比)-03

前言在开始计划之前&#xff0c;查阅了不少资料。一种方案是 Go层做信令业务&#xff0c;nodejs层来管理和mediasoup的底层交互&#xff0c;通过客户端去调用Go层&#xff1b;第二种方案是 客户端直接调用nodejs层来跟mediasoup去交互&#xff1b; 最终&#xff0c;当然不出意料…

【小白】linux安装ffmpeg | java转码 【超详细】

前言 最近在开发过程中&#xff0c;发现当我们上传除了mp4以外的其他少见的格式&#xff0c;如 .flv .rmvb 格式的视频时&#xff0c;在前端在线播放的时候会播放不出来画面&#xff0c;所以 接下来&#xff0c;将要进行一个非常完美的工程&#xff0c;将视频格式转为.mp4 1.安…

一个简单的脚本,让pdf开启夜间模式

因为平常我比较喜欢晚上看面试题。 市面上很多的面试题pdf都是白色的晚上看的话非常的刺眼。 所以我本能的去互联网搜索看看有没有pdf转换为夜间模式的。 搜索了一段时间后发现并没有这种东西。于是我自己做了一个转换的python脚本。 import os import fitz # PyMuPDF from P…

Flink OceanBase CDC 环境配置与验证

一、OceanBase 数据库核心配置 1. 环境准备与版本要求 版本要求&#xff1a;OceanBase CE 4.0 或 OceanBase EE 2.2组件依赖&#xff1a;需部署 LogProxy 服务&#xff08;社区版/企业版部署方式不同&#xff09;兼容模式&#xff1a;支持 MySQL 模式&#xff08;默认&#x…

c++对象池

【设计模式】其它经典模式-对象池模式&#xff08;Object Pool Pattern&#xff09;-CSDN博客 在C中&#xff0c;对象池&#xff08;Object Pool&#xff09;是一种管理对象生命周期的技术&#xff0c;旨在减少对象创建和销毁的开销&#xff0c;提高性能。对象池预先分配一定数…

JavaFX:Scene(场景)

简介 Scene对象是JavaFX场景图的根(root)。JavaFX 场景中包含所有可视的 JavaFX GUI 组件。JavaFX 场景由javafx.scene.Scene类表示。必须在 Stage(舞台)上设置 Scene 对象才能使其可见。在本 JavaFX Scene 教程中,将向您展示如何创建 Scene 对象并向其添加 GUI 组件。 创…

vue3.4中的v-model的用法~

1.首先以前我们针对父子组件传参是不是通过defineProps与defineEmits来实现的&#xff0c;但是这么比较繁琐&#xff0c;因为他是单向传参&#xff0c;而不是双向的&#xff0c;这里我们要介绍的是vue3.4的v-model来实现双向数据传递。 2、代码示例&#xff1a; //父组件 <…

nvm常用指令汇总

nvm是用来管理nodejs的&#xff0c;可以方便安装、切换、卸载当前环境的node版本。 以下是常用指令汇总&#xff1a;nvm list 查看本机已经安装的node版本。*表示当前系统正在使用的node版本nvm install xx.xx.x 后边加版本号&#xff0c;表示安装指定的版本nvm use xx.xx.x当前…

洛谷P5021 [NOIP 2018 提高组] 赛道修建【题解】【二分答案+树上贪心】

P5021 [NOIP 2018 提高组] 赛道修建 题意简述 给定一棵含 n n n 个点的无向带权树&#xff0c;求将其分裂为 m m m 条链后&#xff0c;最短的一条链的最大长度是多少&#xff1f; 点可以重复使用&#xff0c;边不可以重复使用。 思路 二分答案贪心判定貌似可以&#xff…

Portal认证过程杂谈

Portal认证模型简介 Portal认证模型通常由这四个设备组成 认证服务器即3A服务器&#xff0c;通常用radius服务器 接入设备通常就是NAC设备&#xff08;网络接入控制&#xff09; Portal服务器就是Portal认证的认证网站&#xff08;通常叫门户网站&#xff09; 认证过程简述…

ZSGuardian ---AI赋能,新一代研发管理守护平台 -即将上线

一场研发管理的革命 在数字化浪潮奔涌向前的今天&#xff0c;软件开发与产品研发的节奏不断加快&#xff0c;市场需求瞬息万变&#xff0c;技术迭代日新月异。对于研发团队而言&#xff0c;如何在复杂多变的环境中&#xff0c;高效地管理项目、保障产品质量、确保按时上线&…

小菜狗的云计算之旅,学习了解rsync+sersync实现数据实时同步(详细操作步骤)

Rsyncsersync实现数据实时同步 目录 Rsyncsersync实现数据实时同步 一、rsync概述 二、rsync运行原理 三、rsync部署 四、备份测试 五、使用非系统用户备份数据 5.1 rsync的配置文件介绍 5.2 配置备份目录 5.3 使用rsync用户备份测试 5.4 pull拉取数据 六、rsyncse…

牛客周赛Round 99(Go语言)

A题 (A.go) 思路总结: 这道题要求判断一个整数中是否包含连续的两个9。 核心思路是将输入的整数转换为字符串&#xff0c;然后遍历这个字符串&#xff0c;检查是否存在相邻的两个字符都是9。如果找到了&#xff0c;就立即停止遍历并输出"YES"&#xff1b;如果遍历完…

红外图像小目标检测热力图可视化系统

原创代码&#xff0c;可以工程修改含界面。

供应链管理:指标评估方式分类与详解

一、指标评估方式分类与详解 评估维度评估方式核心方法适用场景示例数据来源内部数据评估从企业ERP、MES、CRM等系统提取生产、财务、客户等数据。成本、效率、质量等内部管理指标评估。生产成本数据&#xff08;MES系统&#xff09;、客户满意度&#xff08;CRM系统&#xff…

基于 Rust 的前端工具基本实现

1. Rust 环境安装 1.1. 安装 Rust Rust 提供了一个非常方便的安装工具 rustup,可以通过以下命令安装 Rust: curl --proto =https --tlsv1.2 -sSf https://sh.rustup.rs | sh 这个命令会安装 Rust 编译器 rustc、包管理工具 cargo 以及其他相关工具。 1.2. 配置环境变量 …

大模型关键字解释

&#x1f4a1; 一、模型结构关键词 1. Transformer Transformer 是一种专门用来“理解文字”的神经网络结构。就像一个聪明的秘书&#xff0c;能同时看懂整段话的所有词之间的关系&#xff0c;而不是像老式模型那样一句一句读。 &#x1f449; 举例&#xff1a;以前的模型像…

空调和烘干机的使用

开关 制冷 选择上下扫风 那个就下来了 烘干机 电源键 长按3s以上直到菜单显示 选择小件 不要快烘 至少1个半小时 才可以烘干

极简的神经网络反向传播例子

我之前一直没搞清楚&#xff0c;神经网络为什么要求导&#xff1f;反向传播又是什么&#xff1f;于是到现在深究回来…… 本质就是拟合一个未知函数。 高中的数理统计就学过最小二乘法这种回归方法&#xff08;ŷ 代表自己的预测y&#xff0c;这个表达要记住&#xff09;&…

01-什么是强化学习

什么是强化学习 1. 定义 强化学习&#xff08;Reinforcement Learning, RL&#xff09;是一种使智能体&#xff08;Agent&#xff09;通过与环境&#xff08;Environment&#xff09;不断交互&#xff0c;学习如何在不同情境下采取行动以获得最大化累积奖励的机器学习方法。 强…