PWA 应用如何处理应用更新

前言

PWA(Progressive Web Apps),是一种基于 Web 技术构建的应用,它结合了 Web 和 Native 应用的优点,让用户可以在网页浏览器中获得类似于原生 app 的体验。因为 PWA 是一种基于 Web 技术,所以在开发中具有很高的跨平台性,但同时也存在着一些局限性,那就是怎么处理应用更新的问题。本文将会讲解 PWA 应用如何处理应用更新。

在 PWA 应用中,由于其是基于 Web 技术构建的,所以浏览器具有离线缓存的功能,而且离线缓存可以帮助 PWA 对上游服务进行响应速度和可用性优化,以此来提升用户的使用体验和应用的性能。但是,由于 PWA 应用需要手动实现应用更新的功能,所以当开发者更新应用或推出新的版本时,如果用户不刷新页面或者访问过去的缓存,就无法体验到更新后的应用。

第一种更新方式:手动刷新

当你更新了你的 PWA 应用并且想要让用户使用新版本的应用,正确的做法是通过 manifest 文件来告诉浏览器,有一个新版本可用,并提示用户即可。

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

当你更新了你的 PWA 应用程序并更新了 manifest 文件时,可以在新版本的 SW(service worker)中嵌入以下代码,以告知新版本可用:

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

在新的 Service Worker 的 activate 事件处理程序中,你需要调用 clients.claim() 方法来激活新的 Service Worker。

上述代码片段告诉浏览器有一个新版本可用。但如果用户没有立即访问应用程序或者关闭了该应用程序,则浏览器不会立即加载并使用新的 Service Worker。

在这种情况下,你可以通过使用 “更新” 通知和启发式缓存来通知用户更新可用。

你可以在 Service Worker 中,编写以下代码,向用户展示更新通知:

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

在 Service Worker 中加入这些代码后,当应用更新时,这些代码将向用户发出更新通知。如果用户选择更新应用,应用将从服务器上直接下载新版本。

第二种更新方式:启发式缓存

使用启发式缓存可以让你的 PWA 应用程序在更快地更新的同时也能保持较优的性能。为了保持 Web 应用程序的性能,用户可以启用启发式缓存来缓存应用程序的静态 Web 资源。启发式缓存使用版本号,并将新版本缓存到新的缓存中。

下面是启发式缓存的代码片段:

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

上述代码片段使用了 Cache API,首先在 Service Worker 中开启启发式缓存,然后缓存应用所需要的 Web 资源,并且在缓存已存在时,请求的 Web 资源可以从缓存中获取。

当你想更新你的 PWA 应用程序时,如果一个新版本可用,你可以为该新版本分配一个新的版本号。

你可以打开新版本的 Service Worker 并添加以下代码:

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

你可以通过递增缓存名称的方式来启用不同的缓存版本。在新版本的 Service Worker 中,你将有机会删除旧的缓存。

以上就是 PWA 应用程序如何处理应用更新的方式,开发者可以选择手动刷新或启发式缓存更新,然后再联系用户更新应用程序。这些方法是从不同角度为 PWA 应用程序提供更好的用户体验的措施。

总结

在本文中,我们介绍了 PWA 应用程序如何处理应用更新的过程。在 PWA 应用程序中,应用程序更新需要经过手动刷新或者启发式缓存的方式来完成。手动刷新将会更好的提醒用户进行应用程序的更新,而且可以在更新过程中很好地保留应用程序性能;启发式缓存能够在更快地更新应用程序的同时保证良好的性能。

参考资料

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


猜你喜欢

  • Fastify 中如何使用 Sequelize 操作数据库

    在前端开发中,操作数据库是不可避免的。在 Node.js 中,可以使用 Sequelize 这个 ORM(Object-relational mapping)框架来方便地操作数据库。

    1 年前
  • Chai 的 BDD 和 TDD 两种测试风格对比

    Chai 是一个用于 JavaScript 应用程序的断言库。它是一个流行的测试工具,用于编写可靠的单元测试。Chai 支持两种测试风格,即行为驱动开发(BDD)和测试驱动开发(TDD)。

    1 年前
  • Socket.io 连接断开时的重连机制及实现方法

    在现代的 Web 应用中,实时通讯是不可或缺的一部分。Socket.io 是一种流行的实时通讯库,它基于 WebSocket 和其他网络协议,能够简化实时通讯的开发,并具备自动重连的机制。

    1 年前
  • Custom Elements 中实现自定义图表组件的方法

    在前端开发中,图表是非常重要的一部分。但是现有的图表库并不能完全满足开发者的需求,特别是在定制化上面。因此,自定义图表组件变得越来越重要。本文将介绍在 Custom Elements 中实现自定义图表...

    1 年前
  • 在 ES7 中使用 includes() 方法实现数组元素查找

    在 ES7 中使用 includes() 方法实现数组元素查找 在前端开发中,我们经常需要对数组进行操作,其中包括查找。在 ES7 中,新增了 includes() 方法,可以用来实现数组元素的查找。

    1 年前
  • 基于 Headless CMS 的定制化工作流设计与实现

    前言 Headless CMS 是一个新型的内容管理系统,它通过将前端和后端分离,使内容管理变得更加灵活。实际上,它只关注数据管理,而在前端界面方面则完全由使用它的开发者自主定制开发。

    1 年前
  • 在 ES10 中解决 JavaScript 被污染的 Object 原型问题

    在 ES10 中解决 JavaScript 被污染的 Object 原型问题 JavaScript 中的 Object 原型是一个非常重要的概念,其决定了 JavaScript 中所有对象的基本属性和...

    1 年前
  • LESS 实例教程:如何有效维护 CSS 样式

    在前端开发中,CSS 样式表的管理是一个重要的问题。对于大型的项目,样式表的规模往往非常庞大,维护成本也相应增加。LESS 是一种 CSS 预处理器,可以帮助我们更加高效地维护 CSS 样式表,本文将...

    1 年前
  • 为什么 Serverless 架构能使你的工程师更快乐

    Serverless 架构是一种新兴的云计算架构,它彻底颠覆了传统的服务器架构。Serverless 架构通过将底层硬件和操作系统抽象化,实现了无服务器的部署和运行。

    1 年前
  • 学习 GraphQL 的好处和资源

    #学习 GraphQL 的好处和资源 ##GraphQL是什么 GraphQL是一种API查询语言,它已经成为了现代Web应用程序中的流行技术。GraphQL 是一个强类型的查询语言,使客户端能够精确...

    1 年前
  • Docker 部署 Web 程序网站跨域 Access-Control-Allow-Origin 问题解决方法

    Web 程序的跨域问题是前端开发中经常会遇到的问题,特别是在开发大型应用时,多个微服务之间的通信更加需要注意跨域问题。本文将重点探讨如何通过 Docker 部署 Web 程序来解决跨域问题,希望可以为...

    1 年前
  • Angular 中 UI 库的使用方法

    在 Angular 中,使用 UI 库可以快速开发出漂亮、高效的 Web 应用程序。本文将介绍 Angular 中常用的几个 UI 库,以及如何使用它们来构建 Web 应用程序。

    1 年前
  • 使用 Server-Sent Events 构建实时在线教育应用

    前言 在互联网时代,教育向着线上化的方向发展,越来越多的学习者选择了网络课堂作为自己学习的途径。在这样的背景下,实时在线教育应用就成为了必不可少的一部分。 但是,在实时在线教育应用中,如何让学习者与讲...

    1 年前
  • 如何使用 ES12 中新增的 Function.prototype.toString() 方法

    介绍 ES12 中新增了 Function.prototype.toString() 方法,它可以让我们获取函数的源代码字符串。这个方法在前端开发中非常有用,可以用来调试、动态生成函数等。

    1 年前
  • SPA 应用中如何利用 Nginx 实现负载均衡?

    一、背景介绍 随着 SPA(Single Page Application)技术的不断发展,Web 应用的前后端分离已经成为了一种趋势。但是,前端客户端的应用程序对服务器的性能要求也越来越高,这就要求...

    1 年前
  • PWA 应用如何实现 On-device Natural Language Processing?

    PWA(Progressive Web Applications)应用已经成为前端开发的重要领域。随着移动设备和 IoT 市场的增长,开发者们需要的不仅是一个能够在移动设备上运行的应用程序,还需要一种...

    1 年前
  • Next.js 中如何使用 sass 预处理器

    在前端开发中,预处理器可以帮助我们更高效地编写 CSS 代码。使用 Sass 预处理器不仅可以帮助我们编写更加结构化和易于维护的 CSS,还可以提供变量、函数、混合等高级特性。

    1 年前
  • 如何在 Deno 中读取 Excel 文件

    在这个数字化时代,Excel 文件已经成为了我们日常工作中不可或缺的一部分。为了方便地处理这些文件,我们需要使用一些工具和技术,比如 Deno。在本文中,我们将详细探讨如何使用 Deno 来读取 Ex...

    1 年前
  • 在 ES6/ES2015 中使用 Symbol

    ES6/ES2015 引入了一种新的基本数据类型 Symbol。Symbol 是表示唯一标识符的数据类型,用于标识对象的属性名,避免命名冲突,也可以用作私有属性。 创建 Symbol 创建一个 Sym...

    1 年前
  • 使用 TypeScript 生成类型安全的 GraphQL 客户端

    GraphQL 是一种现代的 API 查询语言,它使得开发者可以在一个请求中获取到所需的所有数据,并且可以避免过度获取数据,减轻传输压力。使用 GraphQL 也可以使得前后端的协同变得更加简便。

    1 年前

相关推荐

    暂无文章