styles.css:

/* styles.css */body {  font-family: Arial, sans-serif;  text-align: center;  background-color: #f0f0f0;  color: #333;}

app.js:

// app.jsif (\\'serviceWorker\\' in navigator) {  window.addEventListener(\\'load\\', () => {    navigator.serviceWorker.register(\\'/service-worker.js\\')      .then(registration => {        console.log(\\'ServiceWorker registered: \\', registration);      })      .catch(error => {        console.log(\\'ServiceWorker registration failed: \\', error);      });  });}

6. 设置 Service Worker

Service Worker 是浏​​览器在后台运行的脚本,与网页分开。它拦截网络请求并可以缓存资源以提高性能和离线能力。

service-worker.js:

// service-worker.jsconst CACHE_NAME = \\'my-pwa-cache-v1\\';const urlsToCache = [  \\'/\\',  \\'/styles.css\\',  \\'/app.js\\',  \\'/manifest.json\\',  \\'/icon-192x192.png\\',  \\'/icon-512x512.png\\'];self.addEventListener(\\'install\\', event => {  event.waitUntil(    caches.open(CACHE_NAME)      .then(cache => {        return cache.addAll(urlsToCache);      })  );});self.addEventListener(\\'fetch\\', event => {  event.respondWith(    caches.match(event.request)      .then(response => {        return response || fetch(event.request);      })  );});

7. 设置服务器

server.js:

const express = require(\\'express\\');const path = require(\\'path\\');const app = express();const PORT = process.env.PORT || 3000;app.use(express.static(path.join(__dirname, \\'public\\')));app.listen(PORT, () => {  console.log(`Server is running on http://localhost:${PORT}`);});

运行服务器:

node server.js

8. 测试你的 PWA

  1. 打开应用程序:

  2. 服务人员注册:

  3. 添加到主屏幕:

9. PWA 的最佳实践

最佳实践:

10. 结论

总结涵盖的要点:

11. 其他资源

","image":"http://www.luping.net/uploads/20240819/172406232366c31a735dfeb.jpg","datePublished":"2024-08-19T18:12:03+08:00","dateModified":"2024-08-19T18:12:03+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 漸進式 Web 應用程式 (PWA)

漸進式 Web 應用程式 (PWA)

發佈於2024-08-19
瀏覽:614

Progressive Web Apps (PWAs)

构建渐进式 Web 应用程序 (PWA)

在这篇文章中,我们将探讨渐进式 Web 应用程序 (PWA),这是一种构建 Web 应用程序的现代方法,可提供类似本机应用程序的体验。我将介绍 PWA 的基础知识、它们的优点以及从头开始创建 PWA 的步骤。

1. 渐进式 Web 应用程序 (PWA) 简介

什么是渐进式 Web 应用程序 (PWA)?

渐进式 Web 应用程序是一种通过 Web 交付的应用程序软件,使用常见的 Web 技术(包括 HTML、CSS 和 JavaScript)构建。 PWA 旨在在使用符合标准的浏览器的任何平台上工作。

PWA 的主要特点:

  • 响应式:适用于任何设备和屏幕尺寸。
  • 离线功能:使用 Service Worker 离线或网络条件较差的情况下运行。
  • 类应用程序体验:提供类似应用程序的用户体验,具有主屏幕安装等功能。
  • 安全:通过 HTTPS 提供服务,以防止窥探并确保内容完整性。
  • 可重新参与:启用推送通知以保持用户参与。

2. PWA 的优点

为什么要构建 PWA?

  • 改进的性能:加载时间更快,交互更流畅。
  • 增强用户参与度:推送通知和主屏幕访问。
  • 降低开发成本:适用于网络和移动体验的单一代码库。
  • SEO 优势:PWA 可以被搜索引擎发现。

3. 设置 PWA

先决条件:

  • HTML、CSS 和 JavaScript 的基础知识。
  • 已安装 Node.js 和 npm/yarn。

创建一个简单的 PWA:

  1. 项目设置:

    mkdir my-pwa
    cd my-pwa
    npm init -y
    npm install express
    
  2. 项目结构:

    my-pwa/
    ├── public/
    │   ├── index.html
    │   ├── styles.css
    │   └── app.js
    ├── server.js
    ├── package.json
    └── manifest.json
    

4. 创建清单文件

manifest.json:

清单文件提供有关 PWA 的元数据,并且是在主屏幕上安装应用程序所必需的。

// manifest.json
{
  "name": "My PWA",
  "short_name": "PWA",
  "start_url": "/",
  "display": "standalone",
  "background_color": "#ffffff",
  "theme_color": "#007bff",
  "icons": [
    {
      "src": "icon-192x192.png",
      "sizes": "192x192",
      "type": "image/png"
    },
    {
      "src": "icon-512x512.png",
      "sizes": "512x512",
      "type": "image/png"
    }
  ]
}

5. 创建 HTML、CSS 和 JavaScript 文件

index.html:



  My PWA

Welcome to My Progressive Web App!

styles.css:

/* styles.css */
body {
  font-family: Arial, sans-serif;
  text-align: center;
  background-color: #f0f0f0;
  color: #333;
}

app.js:

// app.js
if ('serviceWorker' in navigator) {
  window.addEventListener('load', () => {
    navigator.serviceWorker.register('/service-worker.js')
      .then(registration => {
        console.log('ServiceWorker registered: ', registration);
      })
      .catch(error => {
        console.log('ServiceWorker registration failed: ', error);
      });
  });
}

6. 设置 Service Worker

Service Worker 是浏​​览器在后台运行的脚本,与网页分开。它拦截网络请求并可以缓存资源以提高性能和离线能力。

service-worker.js:

// service-worker.js
const CACHE_NAME = 'my-pwa-cache-v1';
const urlsToCache = [
  '/',
  '/styles.css',
  '/app.js',
  '/manifest.json',
  '/icon-192x192.png',
  '/icon-512x512.png'
];

self.addEventListener('install', event => {
  event.waitUntil(
    caches.open(CACHE_NAME)
      .then(cache => {
        return cache.addAll(urlsToCache);
      })
  );
});

self.addEventListener('fetch', event => {
  event.respondWith(
    caches.match(event.request)
      .then(response => {
        return response || fetch(event.request);
      })
  );
});

7. 设置服务器

server.js:

const express = require('express');
const path = require('path');

const app = express();
const PORT = process.env.PORT || 3000;

app.use(express.static(path.join(__dirname, 'public')));

app.listen(PORT, () => {
  console.log(`Server is running on http://localhost:${PORT}`);
});

运行服务器:

node server.js

8. 测试你的 PWA

  1. 打开应用程序:

    • 在浏览器中导航至 http://localhost:3000。
  2. 服务人员注册:

    • 打开开发者工具(F12 或右键单击并选择“检查”)。
    • 转到“应用程序”选项卡。
    • 在“Service Workers”下,您应该会看到已注册的 Service Worker。
  3. 添加到主屏幕:

    • 在移动设备上,在浏览器中打开 PWA。
    • 您应该会看到“添加到主屏幕”的提示。

9. PWA 的最佳实践

最佳实践:

  • 使用 HTTPS:PWA 需要安全上下文。
  • 优化图像:使用响应式图像和延迟加载。
  • 最小化网络请求:有效缓存资源。
  • 确保离线功能:提供有意义的离线体验。

10. 结论

总结涵盖的要点:

  • PWA 简介及其优点。
  • 使用清单、Service Worker 和缓存设置简单的 PWA。
  • 构建强大的 PWA 的最佳实践。

11. 其他资源

  • PWA 文档
  • 有关高级 PWA 主题的教程和指南。
  • 社区论坛和支持。
版本聲明 本文轉載於:https://dev.to/suhaspalani/progressive-web-apps-pwas-3n8?1如有侵犯,請洽[email protected]刪除
最新教學 更多>
  • Hexabot 設定與視覺化編輯教學:建立您的第一個 AI 聊天機器人
    Hexabot 設定與視覺化編輯教學:建立您的第一個 AI 聊天機器人
    聊天機器人愛好者大家好!在本教程中,我們將引導您完成設定和使用開源 AI 聊天機器人建構器 Hexabot 的過程。我們將首先克隆 GitHub 儲存庫、安裝依賴項並為 Hexabot 配置環境變數。您還將學習如何使用 Docker 啟動專案、存取管理面板以及使用視覺化編輯器建立聊天機器人流程。 ...
    程式設計 發佈於2024-11-02
  • mysql_fetch_row()、mysql_fetch_assoc() 和 mysql_fetch_array():您應該選擇哪一個?
    mysql_fetch_row()、mysql_fetch_assoc() 和 mysql_fetch_array():您應該選擇哪一個?
    mysql_fetch_row()、mysql_fetch_assoc() 和mysql_fetch_array() 解釋背景:[&SQL&]如果您正在使用已棄用的MyMy擴充功能中,在從結果集中檢索資料的mysql_fetch_row()、mysql_fetch_assoc() 和mysql_fe...
    程式設計 發佈於2024-11-02
  • Next.js - 概述
    Next.js - 概述
    本文作為初學者友好的指南和使用 Next.js 的步驟。 Next.js 是一個用於建立 Web 應用程式的靈活框架。相反,它是一個建立在 Node.js 之上的 React 框架。 設定您的 Next.js 專案 要啟動新的 Next.js 項目,您需要在電腦上安裝 Node.js。 安裝 ...
    程式設計 發佈於2024-11-02
  • 如何在程式碼中使用 Unsplash 圖片
    如何在程式碼中使用 Unsplash 圖片
    身為從事新 SaaS 專案的開發人員,我需要直接透過 URL 連結一些 Unsplash 圖片。 最初,我看到一篇推薦使用 https://source.unsplash.com/ API 的文章(連結)。但是,此方法不再有效,僅從 URL 欄位複製連結並不能提供嵌入所需的直接圖像 URL。 h...
    程式設計 發佈於2024-11-02
  • 如何合併關聯數組、處理缺失鍵、填滿預設值?
    如何合併關聯數組、處理缺失鍵、填滿預設值?
    合併多個關聯數組並添加具有預設值的缺失列將關聯數組與不同的鍵集組合起來創建統一的數組可能具有挑戰性。這個問題探索了一種實現此目的的方法,所需的輸出是一個數組,其中鍵被合併,缺失的列用預設值填充。 為了實現這一點,建議結合使用 array_merge 函數精心設計的鍵數組:$keys = array(...
    程式設計 發佈於2024-11-02
  • 透過 testcontainers-go 和 docker-compose 來利用您的測試套件
    透過 testcontainers-go 和 docker-compose 來利用您的測試套件
    Welcome back, folks! Today, we will cover the end-to-end tests in an intriguing blog post. If you've never written these kinds of tests or if you stri...
    程式設計 發佈於2024-11-02
  • 以下是一些適合您文章的基於問題的標題:

**直接簡潔:**

* **如何在Windows控制台中正確顯示UTF-8字元? ** **
* **為什麼傳統方法無法顯示
    以下是一些適合您文章的基於問題的標題: **直接簡潔:** * **如何在Windows控制台中正確顯示UTF-8字元? ** ** * **為什麼傳統方法無法顯示
    在Windows 控制台中正確顯示UTF-8 字元使用傳統方法在Windows 控制台中顯示UTF-8 字元的許多嘗試均失敗正確渲染擴充字元。 失敗嘗試:一個使用 MultiByteToWideChar() 和 wprintf() 的常見方法被證明是無效的,只留下 ASCII 字元可見。此外,使用 ...
    程式設計 發佈於2024-11-02
  • ReactJS 的模擬介紹
    ReactJS 的模擬介紹
    ReactJS 19:重要部份 並發模式增強: ReactJS 19 中最大的改進是並發模式,它不僅在應用程式自身更新時保持UI 平滑和響應靈敏,而且還確保了無縫界面,尤其是在復雜的過渡(例如動畫)時。 改進的伺服器元件: 在 Python 的引領下,ReactJ...
    程式設計 發佈於2024-11-02
  • 首屆DEV網頁遊戲挑戰賽評審
    首屆DEV網頁遊戲挑戰賽評審
    我被要求對DEV團隊9月份組織的第一屆網頁遊戲挑戰賽提交的參賽作品進行評判,結果在10月初發布。 我們幾個月來一直在 DEV 上組織挑戰(迷你黑客馬拉松),併計劃宣布我們的第一個網頁遊戲挑戰。鑑於您在遊戲社群 和 dev.to 的專業知識和參與度,我們想知道您是否有興趣成為客座評審。 誰能對此說...
    程式設計 發佈於2024-11-02
  • 購買經過驗證的現金應用程式帳戶:安全可靠的交易
    購買經過驗證的現金應用程式帳戶:安全可靠的交易
    Buying verified Cash App accounts is not recommended. It can lead to security risks and potential account bans. If you want to more information just k...
    程式設計 發佈於2024-11-02
  • 為什麼 `std::function` 缺乏相等比較?
    為什麼 `std::function` 缺乏相等比較?
    揭開std::function 的等式可比性之謎難題:為什麼是std::&&]難題:為什麼是std:: function,現代C 程式碼庫的一個組成部分,不具備相等比較功能?這個問題從一開始就困擾著程式設計師,導致管理可呼叫物件集合的混亂和困難。 早期的歧義:在C 語言的早期草案中11 標準中,op...
    程式設計 發佈於2024-11-02
  • JavaScript 類型檢查 |程式設計教學
    JavaScript 類型檢查 |程式設計教學
    介紹 本文涵蓋以下技術技能: 在本實驗中,我們將探索一個 JavaScript 函數,該函數檢查提供的值是否屬於指定類型。我們將使用 is() 函數,它利用建構子屬性和 Array.prototype.includes() 方法來確定值是否屬於指定類型。本實驗將幫助您更了解 Jav...
    程式設計 發佈於2024-11-02
  • 使用 Streamlit 將機器學習模型部署為 Web 應用程式
    使用 Streamlit 將機器學習模型部署為 Web 應用程式
    介绍 机器学习模型本质上是一组用于进行预测或查找数据模式的规则或机制。简单地说(不用担心过于简单化),在 Excel 中使用最小二乘法计算的趋势线也是一个模型。然而,实际应用中使用的模型并不那么简单——它们通常涉及更复杂的方程和算法,而不仅仅是简单的方程。 在这篇文章中,我将首先构...
    程式設計 發佈於2024-11-02
  • ## utf8_unicode_ci 與 utf8_bin:哪一種 MySQL 排序規則最適合德國網站?
    ## utf8_unicode_ci 與 utf8_bin:哪一種 MySQL 排序規則最適合德國網站?
    為德語選擇最佳MySQL 排序規則為德語選擇最佳MySQL 排序規則在設計為德語受眾量身定制的網站時,支持像ä、 ü 和ß。當涉及特定於語言的要求時,排序規則的選擇起著重要作用。 字元集和排序規則對於字元處理,UTF-8 仍然是首選選項,提供廣泛的字元支援。至於排序規則,則需要考慮德語特定字元。 排...
    程式設計 發佈於2024-11-02
  • 異常處理基礎知識
    異常處理基礎知識
    Java中的例外處理由五個關鍵字管理:try、catch、 throw、throws和finally。 這些關鍵字構成了一個相互關聯的子系統。 要監視的指令位於 try 區塊內。 如果try區塊中發生異常,則會拋出異常。 程式碼可以使用catch捕獲並處理異常。 系統異常由Java執行時...
    程式設計 發佈於2024-11-02

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3