Webpack 中给图片打上 Hash 以优化缓存

在 Web 开发中,优化网页性能是一项非常重要的工作。其中,优化缓存是一个非常有效的方法。在前端开发中,图片是非常常见的资源,而且图片文件通常比较大,因此优化图片缓存是非常有必要的。本文将介绍如何在 Webpack 中给图片打上 Hash 以优化缓存。

为什么要给图片打上 Hash

在 Web 开发中,浏览器缓存是一个非常重要的概念。浏览器缓存可以减少网络请求,提高网页加载速度。但是,如果缓存的文件发生了变化,浏览器就需要重新请求文件,这样就会影响网页的性能。为了避免这种情况,我们可以给文件打上 Hash,当文件内容发生变化时,文件名也会发生变化,这样浏览器就会重新请求文件。

对于图片来说,如果图片文件名没有改变,即使图片内容已经发生了变化,浏览器也会使用缓存的图片。这样就会导致网页显示的不是最新的图片。为了避免这种情况,我们可以给图片打上 Hash,当图片内容发生变化时,图片文件名也会发生变化,浏览器就会重新请求图片。

如何给图片打上 Hash

在 Webpack 中,我们可以使用 file-loaderurl-loader 来加载图片。这两个加载器都支持给文件打上 Hash。

使用 file-loader

file-loader 可以将文件复制到输出目录,并返回文件名。我们可以使用 output.filenameoutput.chunkFilename 配置选项来给文件打上 Hash。

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

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

上面的配置将图片复制到输出目录的 images 子目录中,并给图片文件名添加了 Hash。

使用 url-loader

url-loader 可以将文件转换成 Base64 编码的 Data URL,如果文件大小小于指定的限制,就会返回 Data URL,否则就会使用 file-loader 处理文件。我们可以使用 output.filenameoutput.chunkFilename 配置选项来给文件打上 Hash。

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

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

上面的配置将图片转换成 Base64 编码的 Data URL,如果文件大小小于 8KB,就会返回 Data URL,否则就会使用 file-loader 处理文件。同时也给图片文件名添加了 Hash。

总结

在 Web 开发中,优化缓存是非常重要的。给文件打上 Hash 是一个非常有效的方法。对于图片来说,我们可以使用 file-loader 或 url-loader 来加载图片,并给图片打上 Hash。这样可以避免图片缓存导致网页显示的不是最新的图片,提高网页性能。

参考资料

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