随知学 PWA:离线缓存、入门及不为人知的花絮

Progressive Web App (PWA),又称渐进式Web应用,是一种新型的Web应用程序模式。PWA通过现代Web能力使得Web应用程序功能和用户体验变得更加接近原生应用,因此吸引了越来越多前端工程师的关注。

什么是 PWA?

PWA初衷是为了将 Web 站点变成模拟原生应用的桌面应用,包括离线缓存、桌面应用图标等,但本质上还是 Web 应用。

PWA 的特点

  • 即时、可靠、快速的加载速度;
  • 具有类似原生应用的体验;
  • 离线缓存、后台通知和其他Web能力,让网页具有类似原生应用的功能。

PWA 的兼容性

  • 强兼容: Chrome 55+,Firefox 46+,Opera 42+以及 Edge 17+
  • 一般兼容:与内置浏览器运行的 Android Browser和 IOS Safari
  • 不兼容: IE, UC, QQ 等浏览器

PWA 离线缓存原理

PWA 离线缓存是该技术最重要的部分。我们都知道,Web 应用离线状态下无法加载资源,会导致页面空白,所以离线缓存应运而生。

离线缓存包括两个部分:App Shell 和 Content。

App Shell

App Shell 是应用的基本结构,是一部分被缓存,并在离线状态下提供必要UI的 HTML、CSS 和 JavaScript 文件。它们以及相应的资源被下载并缓存在用户设备上,而不像常规的 Web 应用程序那样需要从网络中进行加载。

Content

Content 是特定应用程序所需的其他页面和数据,例如文章、图片、视频等。在离线状态下,用户可以浏览之前与网络进行交互并缓存的内容。

PWA手动实现离线缓存

为了加深对 PWA 离线缓存的理解,我们可以手动实现。

1. 创建manifest.json

在项目根目录下创建manifest.json。该文件是PWA必不可少的文件之一,用于定义Web应用程序到主页、图标和其他元数据等的映射。

示例代码如下:

-
  ------- --- ----------- --- -----
  ------------- --------
  -------- -
    -
      ------ -------------------------------
      -------- --------
      ------- -----------
    --
    -
      ------ -------------------------------
      -------- --------
      ------- -----------
    --
    -
      ------ ---------------------------------
      -------- ----------
      ------- -----------
    --
    -
      ------ ---------------------------------
      -------- ----------
      ------- -----------
    --
    -
      ------ ---------------------------------
      -------- ----------
      ------- -----------
    --
    -
      ------ ---------------------------------
      -------- ----------
      ------- -----------
    --
    -
      ------ ---------------------------------
      -------- ----------
      ------- -----------
    --
    -
      ------ ---------------------------------
      -------- ----------
      ------- -----------
    -
  --
  -------------- ----------
  ------------------- ----------
  ------------ ---------------
  ---------- -------------
  -------- ----
  -------------- ----------
-

2. 编写Service Worker

Service Worker 是一个在后台运行的 JavaScript文件,用于管理 PWA 离线缓存。它充当了首次访问站点的中介,同时它方法里的所有事件能够触发缓存和网络调用。

-- --------- --------
-- ---------------- -- ---------- -
  ------------------------------- ---------- -
    ---------------------------------------------------------------------- -
      -------------------------- ------------ ---------- ---- ------ -- --------------------
    -- ------------- -
      -------------------------- ------------ ------- -- -----
    ---
  ---
-

-- ---------
------------------------------ -------- ------- -
  -- ------------------- --- ----------- -
    ------------------
      ----------------------------- --
        ----------------------------------------- -- -------- -- -----------------------------
      --
    --
  - ---- -
    ------------------
      ----------------------------------------- -- -------- -- ----------------------
    --
  -
---

-- -----------
-------------------------------- -------- ------- -
  ----- ----------- - -
    ----
    --------------
    -------------------
    ---------------------
    ----------------------------
  --

  ----------------
    -------------------------------------- ------- -
      ------ --------------------------
    ---
  --
---

-- ----
--------------------------------- -------- ------- -
  -------------------- ------ ----------------
  ----------------
    --------------------------- --------- -
      ------ ------------
        -------------------- ----- -
          -- ---- --- ------------ -
            ------ -------------------
          -
        ---
      --
    ---
  --
---

3. 将Service Worker 注册到应用

在 HTML 中,注册 Service Worker 加载指向我们新 Service Worker 的文件路径。

------
  ------- ------------------------------ ----------------------------------
  ---- ---- ------- ------ ---
  --------
    -- ---------------- -- ---------- -
      -------------------------------------------
    -
  ---------
-------

PWA 不为人知的花絮

虽然PWA有很多显著的好处,但这项新技术也有它的缺点和限制。

存储限制

由于离线缓存数据实际上保存在用户设备中,因此存储限制也是一大问题。您可能会发现,离线可用的内容几乎不可能达到50MB以上。

缓存过期时间限制

在许多情况下,您可能需要强制浏览器重新从服务器获取资源。PWA 允许您设置资源的缓存过期时间,但在某些情况下浏览器必须忽略缓存并重新请求资源。

不支持文件上传

PWA 目前不支持通过文件上传向服务器上传任何数据。这使得开发与具有类似于在线办公套件的应用程序更加困难。

安全

由于 PWA 可以滥用监视用户的信息,例如以恶意方式监视用户的网络行为,因此所有PWA都需要使用SSL。

总结

随着 Chrome 浏览器和其他先进浏览器对 PWA 的支持,PWA 变得越来越流行。它通过最佳实践为 Web 应用提供了新的标准,提供了更好的用户体验,更快的响应速度和离线支持。学习和实践 PWA,将为你未来的开发工作奠定基础。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64e18207f6b2d6eab3cada01


猜你喜欢

  • Kubernetes 持久化存储解决方案——使用 NFS

    在 Kubernetes 应用程序的部署过程中,持久化存储一直是一个困扰我们的问题。Kubernetes 提供了多种存储类的方式,例如 NFS 存储类,提供了大规模和高可用性的持久性存储解决方案。

    1 年前
  • Mongoose 常见的 11 个错误及解决方法

    Mongoose 是 Node.js 中最常用的 MongoDB 驱动程序。它具有优秀的 ORM 特性, 实现了基本的 CRUD 操作,极大地简化了数据库操作。但是, 在使用 Mongoose 过程中...

    1 年前
  • ES6 中使用变量解构的最佳实践

    在 ES6 中新加入了许多语言特性,其中变量解构是一个非常实用且常用的特性。通过变量解构,我们可以轻松便捷地从对象中提取需要的值,而不用再一个一个地进行赋值。本文将详细介绍 ES6 中变量解构的使用方...

    1 年前
  • 深度解析 Docker Compose 实现前后端分离构建

    在现代应用程序中,前后端分离是一种常见的体系结构模式,这使得开发和部署变得更加容易和灵活。Docker Compose 是一种非常强大的工具,可以实现快速构建多个镜像、快速启动多个容器、连接不同的服务...

    1 年前
  • CSS Grid 布局实现绝对定位的正确方式

    在前端开发过程中,绝对定位是一种常见的布局方式。但是在使用CSS Grid布局时,可能会出现一些问题。本文将介绍如何正确地使用CSS Grid布局实现绝对定位,以及注意事项和示例代码。

    1 年前
  • 利用 CSS Reset 实现简洁的响应式设计

    本文将基于 CSS Reset 的概念,讲解如何实现一个简洁的响应式设计,并分享一些实用的代码技巧和指导意义。 CSS Reset 是什么? 在开始正文之前,先介绍一下 CSS Reset 是什么...

    1 年前
  • RxJS 与 React 组件间数据流的控制技巧

    在前端开发中,数据流的控制是一个常见且非常关键的问题。RxJS 作为一个响应式编程的库,可以很好的帮助我们控制数据流。在结合 React 组件使用 RxJS,可以更加灵活,减少组件间的耦合度,提高代码...

    1 年前
  • Serverless 架构实现 WebSocket 广播

    前言 本文介绍如何使用 Serverless 架构实现 WebSocket 广播。WebSocket 是一种全双工通信协议,适用于服务端主动向客户端推送数据的场景。

    1 年前
  • 如何在 Flexbox 布局中实现元素的等间距排列

    随着页面布局的复杂性和可变性的提高,前端开发人员旨在找到优秀的布局解决方案。CSS Flexbox 是一种强大的布局模型,可以让开发人员实现弹性和适应性更强的页面布局。

    1 年前
  • Custom Elements:如何为自定义元素添加事件?

    前言 在 Web 开发中,我们经常需要使用自定义元素,以便实现对页面进行更加细致的控制。而为自定义元素添加事件也是必不可少的一项功能。本文将介绍如何使用 JavaScript 脚本为自定义元素添加事件...

    1 年前
  • 在 Express.js 上使用 WebSocket 实现实时通信

    使用 WebSocket 实现实时通信是现代 Web 应用程序中非常流行的实践,它使得服务器和客户端之间的双向通信成为可能。在本文中,我们将学习如何在 Express.js 上使用 WebSocket...

    1 年前
  • 使用 React Native 实现串口通信协议

    引言 在当今的互联网时代,串口通信虽早已不再流行,但在一些嵌入式设备、科学研究和工业控制等领域中却有着广泛的应用。在前端开发者需要和这些领域有所连接时,便需要使用一些工具和技术。

    1 年前
  • PM2+node.js 进程管理 - 持久化日志输出

    介绍 PM2是一个现代化的进程管理器,它使用Node.js编写,可以帮助您轻松地管理应用程序的生命周期,包括启动、停止、重新启动和监视进程状态等。PM2可以使您的应用程序保持稳定和可靠,并且可以让您轻...

    1 年前
  • 详解 Android 无障碍服务开发 - 通过网络取消耳机模式

    前言 随着移动设备的普及,无障碍服务在 Android 开发中越来越受到重视。无障碍服务可以帮助用户解决使用设备时遇到的视力、听力、语言等方面的障碍问题。本文主要讲解如何使用无障碍服务在 Androi...

    1 年前
  • 如何使用 ESLint 校验代码中的 JSDoc 注释

    在前端开发中,如何写好注释是一个重要的话题,而 JSDoc 是一种常用的写注释的方式。但是随着项目越来越大,代码行数越来越多,我们难免会出现疏漏或者错误的情况。这时候,ESLint 就可以派上用场了,...

    1 年前
  • 如何给 RESTful API 添加 Throttling 限流功能

    在开发 RESTful API 的过程中,限流是一个重要的问题。限流可以有效地保护 API 服务资源,避免由于恶意使用或突发流量造成系统瘫痪的情况。这篇文章将为大家介绍如何在前端中给 RESTful ...

    1 年前
  • 使用 Sequelize 操作 Oracle 数据库遇到的问题及解决方式

    前言 Sequelize 是一个基于 Node.js 的 ORM 框架,可用于连接和操作多种关系型数据库,包括 MySQL、PostgreSQL、SQLite 和 Oracle 等。

    1 年前
  • 使用 Hapi 框架编写 RESTful API 接口

    前言 对于前端开发人员,编写 RESTful API 接口是一项必备的技能。而 Hapi 框架则是现今最流行的 Node.js 框架之一,它提供了一系列优秀的工具与插件,可以让我们更加高效、便捷地实现...

    1 年前
  • Redux 状态同步问题解决方案及优化策略分享

    前言 Redux 是一个非常流行的 JavaScript 应用状态管理库,它可以帮助开发者轻松地管理应用的状态,在 Web 开发中使用广泛。但是,在实际开发过程中,由于各种原因,Redux 的状态可能...

    1 年前
  • Babel 对于 ES6 的 let 和 const 变量转化问题解析

    随着 ES6 的普及和日益成熟,我们可以看到更多的优秀的项目都在采用 ES6 的新特性和语法,其中 let 和 const 关键字无疑是最令人兴奋的特性之一。但事实上,ES6 并不能够直接被所有浏览器...

    1 年前

相关推荐

    暂无文章