PWA 实现中如何处理离线状态下的数据展示?

阅读时长 5 分钟读完

什么是 PWA?

PWA(Progressive Web App)指一种新兴的 Web 应用形式,它允许我们将 Web 应用快速、充分地利用出色的 Web 技术打造成类似于原生应用的、离线可用的应用程序。PWA 通过 Service Worker、Manifest 和 CacheStorage 等 Web API 来达到更快、更可靠和更令人赏心悦目的应用体验,同时与常规 Web 应用和原生应用相比还具备更低的开发和维护成本。

PWA 离线状态下的数据展示

由于 PWA 应用允许离线使用,因此我们需要考虑离线状态下用户如何浏览数据。对于 PWA 应用而言,我们有两种核心方案——预缓存和网络优先。

预缓存

预缓存指的是 PWA 应用在在线状态下预先下载并缓存一定量的静态资源(包括样式、脚本、页面、图片、字体等),这些资源将会用于离线时展示,以此来加速页面加载。如果用户在离线状态下访问页面,PWA 应用会首先尝试从 Service Worker 缓存里查找相应的资源,如果存在的话,直接将缓存的内容返回给用户。

下面是一个简单的 PWA 应用的 Service Worker 脚本,用于启用页面预缓存:

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

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

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

在上面的代码片段中,我们在 Service Worker 安装后,将 urlsToCache 数组中的资源加入到 CACHE_NAME 缓存中,并且每次触发 fetch 事件时,如果 Service Worker 缓存中存在相应资源,就返回缓存的内容。

网络优先

如果预缓存不可用或者 Service Worker 缓存中不存在必要的资源时,我们需要一种优先请求网络资源的机制。在这种情况下,PWA 应用会尝试与服务器建立连接,如果连接成功,就将网络请求的响应内容缓存到本地,下次用户再次访问离线页面时,就直接使用缓存内容。

下面是一个简单的实现网络优先的示例代码:

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

在上面的代码片段中,我们使用 getOfflineData 函数对指定的 URL 发送网络请求。如果在线状态下,我们直接发送网络请求,将服务端返回的数据缓存到 my-pwa-cache-v1 缓存中;如果离线状态下,我们则从缓存中读取相应的数据。

总结

在 PWA 应用中实现数据离线展示,对于提升应用体验具有非常重要的作用。通过 Service Worker 的缓存机制,我们能够在离线状态下加载已经预先缓存的静态资源,从而使得 PWA 应用更快、更可靠。同时,合理地实现网络优先机制,也可以保证即使离线状态下,用户也能够正常访问要求网络请求的数据。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6492afc148841e989407c19b

纠错
反馈