PWA 应用开发中的坑点总结及解决方案详解,让你少走弯路

随着移动互联网的快速发展,越来越多的用户使用移动设备访问互联网。传统的网站虽然在 PC 端呈现效果还不错,但在手机终端上打开则会出现各种问题,比如加载慢、内容不清晰、无法离线访问等。解决这些问题的方案之一是 PWA(Progressive Web Apps,渐进式 Web 应用),它结合了 Web 应用和 Native 应用的优点,能够提供更加优秀的用户体验。

然而,开发 PWA 应用也存在很多坑点。本文将总结 PWA 在开发过程中的一些常见问题,并提供解决方案,帮助开发者提高开发效率,减少开发中的困难。

1. Service Worker 的缓存问题

Service Worker 是 PWA 的核心之一,它能够在浏览器背景中运行,拦截网络请求并缓存资源。但是 Service Worker 的缓存机制也存在一些问题。

1.1 缓存策略不当

Service Worker 的缓存策略会影响应用的访问速度。如果缓存过于频繁,可能会导致缓存数据过期,反而增加网络请求的次数。如果缓存过于保守,又会影响应用的访问速度。

解决方案:我们可以使用 sw-precache 和 sw-toolbox 等工具帮助我们管理 Service Worker 的缓存策略。

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

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

1.2 缓存过期和更新

在实际开发中,一些页面和资源是会改动的,这就需要我们及时更新缓存。

解决方案:我们可以设置缓存过期时间,在过期时间达到后,再通过网络请求获取最新数据。或者在页面更新时通知 Service Worker 更新缓存。

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

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

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

2. PWA 应用的性能问题

PWA 应用的在线状态可能不稳定,而且它要求页面渲染速度快、响应速度快,这就对 PWA 应用的性能提出了更高的要求。本节将针对 PWA 应用的性能问题给出解决方案。

2.1 页面级别的性能问题

2.1.1 非关键资产过多

非关键资产的过多也是 PWA 应用的性能问题之一。例如,某些应用使用了多个第三方 JavaScript 库和 CSS 库,这些库在页面加载的过程中会拉取大量 JavaScript 和 CSS 资源,导致页面加载缓慢。

解决方案:通过以下方法来减少非关键资产的数量,提升页面渲染速度。

  • 压缩 JavaScript,CSS 和 HTML 文件,尽量减少文件大小。
  • 分类文件类型,并合并文件,减少网络请求次数。
  • 异步加载资源,不影响主渲染树的加载速度。

2.1.2 用户体验低下

PWA 应用需要提供良好的用户体验,但是部分 PWA 应用的用户体验不佳,例如页面加载缓慢、页面响应时间长、图像和视频不清晰等等。

解决方案:以下是提升用户体验的方法。

  • 在页面加载之前显示 loading。
  • 尽量减少不必要的动画效果。
  • 图像和视频提供不同大小的资源,适应不同设备的显示屏幕,减少资源浪费。
  • 动态加载模块,提升模块加载效率。

2.2 Service Worker 级别的性能问题

2.2.1 服务 Worker 运行时间过长

Service Worker 会维护一个缓存列表,在每次请求时启用缓存,并实时更新缓存,这就需要很高的性能来保证 Service Worker 正常运行。

解决方案:为了提高 Service Worker 的性能,我们可以对缓存列表进行分类,减少缓存列表的开销,同时,也可以在需要的时候清空缓存列表。

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

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

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

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

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

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

2.2.2 同时处理过多请求

在用户频繁地访问应用时,可能会导致 Service Worker 同时处理过多请求,使得 Service Worker 被占满,反而影响应用的性能。

解决方案:为了避免这种情况发生,我们可以限制 Service Worker 处理请求的并发数量。

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

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

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

---

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

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

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

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

3. 安全隐患

PWA 应用作为一种新生的应用形态,在安全方面也存在一些问题。

3.1 Service Worker 的安全问题

Service Worker 是 PWA 应用的一大特色,但也面临着安全威胁。

解决方案:这里提供一些提高 Service Worker 安全性的方法。

  • Service Worker 只能被页签同源的页面加载。可以筛选原始请求的源和 referrer header 来确保只在特定的来源上运行 Service Worker。
  • 加密 HTTPs,服务端强制开启 HTTPs,避免对于数据的窃密。
  • 对于发送来的数据进行内容检查,避免恶意代码的植入。

3.2 页面安全问题

PWA 应用的页面安全问题也比较突出,需要开发者注意。以下是提高 PWA 应用页面安全性的方法。

  • 不开启全局作用域。
  • 不要在全局作用域暴露属性和方法。
  • 使用类,避免代码被外部访问。
  • 谨慎使用 eval() 方法,外部不安全函数。

总结

PWA 应用是一种新的应用形态,相比传统 Web 应用和 Native 应用具有更大的优势,但也存在着许多的问题和挑战。为了开发出更好的 PWA 应用,本文总结了 PWA 应用开发中的一些常见问题,并提供了针对这些问题的解决方案。最后,我们希望这些解决方案能够帮助大家更好地开发 PWA 应用,提高开发效率,减少开发中的困难。

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


猜你喜欢

相关推荐

    暂无文章