PWA 中分离静态资源的优化实践

阅读时长 6 分钟读完

PWA 中分离静态资源的优化实践

在现代 Web 应用中,PWA(Progressive Web Apps)成为了 Web 技术发展的重要方向之一。PWA 借助 Web 技术实现了类似 Native 应用的交互体验,同时保留了 Web 应用的访问性、可搜索性、可分享性等特点,全面提升了 Web 应用的用户体验。

然而,PWA 应用的性能优化一直是前端开发者需要持续关注的领域。拥有一个高效、稳定的 PWA 应用需要多个方面的优化,其中一个重要的方面就是静态资源的分离。

静态资源的分离是指将应用中的不同资源分别打包、加载。这样做的好处在于:

  1. 部署时可以根据不同资源的压缩优化策略进行针对性处理,以减少资源的大小和加载时间。
  2. 不同资源在运行时的加载时机不同,通过分离可以更好地控制资源的加载时机,以提升应用的性能。
  3. 加速开发时的热更新效率。

在 PWA 应用中,通常需要分别打包应用 code (业务代码)、vendor code(如 Vue、React 等框架和工具库)、runtime code(如 webpack runtime)、CSS、image 等静态资源。这里以 Vue CLI 创建的 PWA 应用为例,进行具体的实践。

在 Vue CLI 中分离静态资源

Vue CLI 是一个 Vue.js 开发的标准工具,它帮助开发者搭建、配置、打包 Vue.js 应用。在 Vue CLI 4.x 版本中,通过 vue.config.js 配置文件可以方便地进行静态资源分离。

  1. 安装和配置 CompressionWebpackPlugin(gzip 压缩)

安装 CompressionWebpackPlugin 库:

在 vue.config.js 配置文件中引用该库,并设置相关配置:

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

-------------- - -
  ----------------- -
    -------- -
      --- -------------------
        --------- -------------------
        ---------- -------
        ----- --------------
        ---------- ------
        --------- ---
      --
    -
  -
-
展开代码

这里的配置将对 JS 和 CSS 文件进行 gzip 压缩,仅当文件大小超过 10KB 且压缩后文件大小与原文件大小的比率达到 0.8 时才会进行压缩。压缩后的文件名以 .gz 结尾。CompressonWebpackPlugin 也支持其他压缩方式,例如 Brotli。

  1. 安装和配置 SplitChunks 插件(vendor 和 runtime 代码分离)

SplitChunks 是 Webpack 提供的插件,主要用于代码分离。在 Vue CLI 中,可以通过具体的配置实现 vendor 和 runtime 代码的分离。

在 vue.config.js 配置文件中,添加 optimization 配置:

-- -------------------- ---- -------
-------------- - -
  ----------------- -
    ------------- -
      ------------ -
        ------- ------
        ------------------- ---------
        -------- ------
        ------------ -
          ------- -
            ----- -------------------------
            ------------ -
              ----- ----------- - ---------------------------------------------------------------
              ------ ------------------------------- -----
            -
          --
          -------- -
            ----- ----------------
            ----- -------------------------- -- --- --------- ---- -----
            ---------- -- --  ------- ------ ------
            --------- --
            ------------------- ----
          -
        -
      -
    -
  -
-
展开代码

在这里,我们主要关注了 cacheGroups 里应用的规则设置。其中,通过 test: /[\/]node_modules[\/]/ 来制定 vendor 的代码文件。同时,为了将 vendor 分成不同模块,使用 name 指定了生成的文件名。

可以通过运行 yarn build 后查看控制台输出,确认相应的代码文件已经被拆分出来。

  1. 安装和配置 CopyWebpackPlugin(资源文件复制)

CopyWebpackPlugin 是 Webpack 提供的是一个拷贝文件的插件,在 Vue CLI 中可以利用它来复制额外的资源文件。

对于 PWA 应用来说,需要将一些静态资源文件加入打包后的 dist 目录,例如 manifest.json、workbox.js 等,它们将会被用于 PWA 特性的开发。

在 vue.config.js 配置文件中添加 CopyWebpackPlugin:

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

-------------- - -
  ----------------- -
    -------- -
      --- -------------------
        --------- -
          - ----- ------------------------- --- ----------------- --
          - ----- ------------------------ --- ---------------------- -
        -
      --
    -
  -
-
展开代码

在这个配置项中,我们向 patterns 数组中添加了两个复制规则。其中,./public/manifest.json 会被复制到 dist 目录下,并重命名为 manifest.json;而 ./public/workbox-*.js 会被重命名为带哈希值的 workbox.[hash:7].js,加入到 dist 目录下。

结语

静态资源的分离是 PWA 应用优化中的重要一环。通过静态资源的分离,我们可以根据不同的策略进行优化,更好地实现快速加载、优质的用户体验等目标。在 Vue CLI 中,我们可以很方便地通过压缩、拆分、复制等插件实现相关的优化。

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

纠错
反馈

纠错反馈