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

阅读时长 8 分钟读完

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

纠错
反馈