基于 PWA 技术的进阶 Web 开发

随着移动设备的普及以及用户对 Web 应用的要求越来越高,PWA 成为了广受欢迎的新技术。PWA(Progressive Web App)是一种结合了 Web 技术和 Native 应用优秀体验的解决方案,其所具有的离线缓存、消息推送等重要功能可以极大地提高 Web 应用的用户体验,让 Web 应用可以像 Native 应用一样流畅、响应迅速、体验优秀。

什么是 PWA?

PWA 是一种使用 Web 技术创建的应用,能够以可靠、快速和渐进式的方式为用户提供应用体验。它充分利用了现代浏览器的功能,为用户提供与 Native 应用相似的用户体验。

PWA 应用需要满足以下几个标准:

  1. 响应式。PWA 应用需要能够在任何设备上以相同的 UI 来呈现。PWA 应用可以在手机、平板以及桌面电脑上运行。
  2. 独立。PWA 应用不需要经过应用商店的审核,可以直接从 Web 浏览器中访问。
  3. 链接性。PWA 应用可以通过 URL 进行访问,并且可以在不同页面之间进行导航,就像传统的 Web 应用一样。
  4. 安全。PWA 应用必须使用 HTTPS 协议来保证用户数据的安全性。
  5. 可发现性。PWA 应用可以被搜索引擎发现并收录。
  6. 可安装性。用户可以通过添加到主屏幕或者其他方式来安装 PWA 应用到本地设备中。
  7. 离线能力。PWA 应用需要支持离线访问。

使用 PWA 技术开发 Web 应用

接下来,我们将通过一个实例来了解如何使用 PWA 技术开发 Web 应用。

实例介绍

我们将开发一个可以离线访问的计数器应用。用户可以通过应用来对一个数字进行加减,应用将会实时存储其状态,使得用户下次再访问时可以恢复之前的状态。

环境配置

使用 PWA 技术开发需要我们安装以下工具:

  1. create-react-app:用于基于 React 创建 Web 应用;
  2. http-server:用于创建一个 HTTP 服务器,以保证该应用可以离线访问。
- -- ----- --
--- ---------------- -------
-- -------

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

配置 Service Worker

Service Worker 是 PWA 实现离线访问的关键技术。我们需要为 React 应用添加 Service Worker。

在 public 目录中添加一个 sw.js 的文件,并添加以下代码:

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

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

这里,我们在 Service Worker 的 install 事件中缓存了应用的基本文件(包括主页、manifest.json 等),在 fetch 事件中如果发现当前的请求已经被缓存,则直接返回缓存中的内容。这样我们就可以实现离线访问的能力。

我们需要在 index.js 中注册 Service Worker:

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

这里,我们在 windowload 事件中注册了 Service Worker。

配置 Manifest

为了能够让应用以应用程序的方式运行,我们还需要为该应用添加一个 Manifest 文件。

在 public 目录中添加一个 manifest.json 文件,并添加以下内容:

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

这里,我们定义了应用的名称、图标列表、启动 URL、显示方式,以及主题色和背景色。

开发应用

接下来,我们可以开始开发我们的计数器应用了。可以在 src 目录下创建一个名为 Counter.js 的文件。

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

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

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

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

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

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

这个组件中,我们使用了 React 的 useStateuseEffect hook 来维护一个计数器。每次计数器更新时,我们会将其保存到本地存储中。

App.js 文件中,我们将我们的计数器组件引入进来:

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

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

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

运行应用

运行 npm start 命令可以启动应用。我们还需要在另一个终端中运行 http-server ./build 命令来创建一个 HTTP Server 将该应用部署到本地。

现在,我们可以在浏览器中访问 http://localhost:8080/ 来查看我们的计数器应用了。

运行效果

当我们通过应用来对计数器进行加减操作时,应用将实时将其状态保存到本地存储中。即使我们断开了网络,我们仍然可以访问之前的状态:

总结

PWA 技术为 Web 开发带来了更高的质量要求,让 Web 应用有了更多的 Native 应用的体验,实现了 Web 应用与 Native 应用的“无缝对接”。

该文介绍了如何基于 PWA 技术实现一个离线应用。通过 Service Worker 技术实现了离线访问的能力,通过 Manifest 文件将应用添加到主屏幕,提供了更高的用户体验。

希望该文能对想学习 PWA 技术的前端开发者提供一定的参考和帮助。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6653167dd3423812e47988b5