每天一個前端小知識 Day 23 - PWA 漸進式 Web 應用開發

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;學習如何在不同情境下采取行動以獲得最大化累積獎勵的機器學習方法。 強…