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
瀏覽:295

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]刪除
最新教學 更多>
  • Go語言垃圾回收如何處理切片內存?
    Go語言垃圾回收如何處理切片內存?
    Garbage Collection in Go Slices: A Detailed AnalysisIn Go, a slice is a dynamic array that references an underlying array.使用切片時,了解垃圾收集行為至關重要,以避免潛在的內存洩...
    程式設計 發佈於2025-06-10
  • 如何使用Python理解有效地創建字典?
    如何使用Python理解有效地創建字典?
    在python中,詞典綜合提供了一種生成新詞典的簡潔方法。儘管它們與列表綜合相似,但存在一些顯著差異。 與問題所暗示的不同,您無法為鑰匙創建字典理解。您必須明確指定鍵和值。 For example:d = {n: n**2 for n in range(5)}This creates a dict...
    程式設計 發佈於2025-06-10
  • 圖片在Chrome中為何仍有邊框? `border: none;`無效解決方案
    圖片在Chrome中為何仍有邊框? `border: none;`無效解決方案
    在chrome 在使用Chrome and IE9中的圖像時遇到的一個頻繁的問題是圍繞圖像的持續薄薄邊框,儘管指定了圖像,儘管指定了;和“邊境:無;”在CSS中。要解決此問題,請考慮以下方法: Chrome具有忽略“ border:none; none;”的已知錯誤,風格。要解決此問題,請使用以下...
    程式設計 發佈於2025-06-10
  • PHP未來:適應與創新
    PHP未來:適應與創新
    PHP的未來將通過適應新技術趨勢和引入創新特性來實現:1)適應云計算、容器化和微服務架構,支持Docker和Kubernetes;2)引入JIT編譯器和枚舉類型,提升性能和數據處理效率;3)持續優化性能和推廣最佳實踐。 引言在編程世界中,PHP一直是網頁開發的中流砥柱。作為一個從1994年就開始發展...
    程式設計 發佈於2025-06-10
  • 如何使用不同數量列的聯合數據庫表?
    如何使用不同數量列的聯合數據庫表?
    合併列數不同的表 當嘗試合併列數不同的數據庫表時,可能會遇到挑戰。一種直接的方法是在列數較少的表中,為缺失的列追加空值。 例如,考慮兩個表,表 A 和表 B,其中表 A 的列數多於表 B。為了合併這些表,同時處理表 B 中缺失的列,請按照以下步驟操作: 確定表 B 中缺失的列,並將它們添加到表的...
    程式設計 發佈於2025-06-10
  • 解決Spring Security 4.1及以上版本CORS問題指南
    解決Spring Security 4.1及以上版本CORS問題指南
    彈簧安全性cors filter:故障排除常見問題 在將Spring Security集成到現有項目中時,您可能會遇到與CORS相關的錯誤,如果像“訪問Control-allo-allow-Origin”之類的標頭,則無法設置在響應中。為了解決此問題,您可以實現自定義過濾器,例如代碼段中的MyFi...
    程式設計 發佈於2025-06-10
  • 如何在Java的全屏獨家模式下處理用戶輸入?
    如何在Java的全屏獨家模式下處理用戶輸入?
    Handling User Input in Full Screen Exclusive Mode in JavaIntroductionWhen running a Java application in full screen exclusive mode, the usual event ha...
    程式設計 發佈於2025-06-10
  • 在C#中如何高效重複字符串字符用於縮進?
    在C#中如何高效重複字符串字符用於縮進?
    在基於項目的深度下固定字符串時,重複一個字符串以進行凹痕,很方便有效地有一種有效的方法來返回字符串重複指定的次數的字符串。使用指定的次數。 constructor 這將返回字符串“ -----”。 字符串凹痕= new String(' - ',depth); console.W...
    程式設計 發佈於2025-06-10
  • 大批
    大批
    [2 數組是對象,因此它們在JS中也具有方法。 切片(開始):在新數組中提取部分數組,而無需突變原始數組。 令ARR = ['a','b','c','d','e']; // USECASE:提取直到索引作...
    程式設計 發佈於2025-06-10
  • 在Ubuntu/linux上安裝mysql-python時,如何修復\“ mysql_config \”錯誤?
    在Ubuntu/linux上安裝mysql-python時,如何修復\“ mysql_config \”錯誤?
    mysql-python安裝錯誤:“ mysql_config找不到”“ 由於缺少MySQL開發庫而出現此錯誤。解決此問題,建議在Ubuntu上使用該分發的存儲庫。使用以下命令安裝Python-MysqldB: sudo apt-get安裝python-mysqldb sudo pip in...
    程式設計 發佈於2025-06-10
  • 為什麼PYTZ最初顯示出意外的時區偏移?
    為什麼PYTZ最初顯示出意外的時區偏移?
    與pytz 最初從pytz獲得特定的偏移。例如,亞洲/hong_kong最初顯示一個七個小時37分鐘的偏移: 差異源利用本地化將時區分配給日期,使用了適當的時區名稱和偏移量。但是,直接使用DateTime構造器分配時區不允許進行正確的調整。 example pytz.timezone(&#...
    程式設計 發佈於2025-06-10
  • 如何在其容器中為DIV創建平滑的左右CSS動畫?
    如何在其容器中為DIV創建平滑的左右CSS動畫?
    通用CSS動畫,用於左右運動 ,我們將探索創建一個通用的CSS動畫,以向左和右移動DIV,從而到達其容器的邊緣。該動畫可以應用於具有絕對定位的任何div,無論其未知長度如何。 問題:使用左直接導致瞬時消失 更加流暢的解決方案:混合轉換和左 [並實現平穩的,線性的運動,我們介紹了線性的轉換。...
    程式設計 發佈於2025-06-10
  • 如何從Google API中檢索最新的jQuery庫?
    如何從Google API中檢索最新的jQuery庫?
    從Google APIS 問題中提供的jQuery URL是版本1.2.6。對於檢索最新版本,以前有一種使用特定版本編號的替代方法,它是使用以下語法:獲取最新版本:未壓縮)While these legacy URLs still remain in use, it is recommended ...
    程式設計 發佈於2025-06-10
  • 如何在Java中正確顯示“ DD/MM/YYYY HH:MM:SS.SS”格式的當前日期和時間?
    如何在Java中正確顯示“ DD/MM/YYYY HH:MM:SS.SS”格式的當前日期和時間?
    如何在“ dd/mm/yyyy hh:mm:mm:ss.ss”格式“ gormat 解決方案: args)拋出異常{ 日曆cal = calendar.getInstance(); SimpleDateFormat SDF =新的SimpleDateFormat(“...
    程式設計 發佈於2025-06-10
  • 為什麼儘管有效代碼,為什麼在PHP中捕獲輸入?
    為什麼儘管有效代碼,為什麼在PHP中捕獲輸入?
    在php ;?>" method="post">The intention is to capture the input from the text box and display it when the submit button is clicked.但是,輸出...
    程式設計 發佈於2025-06-10

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

Copyright© 2022 湘ICP备2022001581号-3