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


猜你喜欢

  • ES8 中引入的 async 函数:快速、高效地编写异步代码

    在前端开发中,异步编程是非常常见的。在过去,我们可能使用回调函数或者 Promise 来解决异步编程的问题。但是这些方法都有一些缺点,比如回调地狱和 Promise 的 then() 方法嵌套过多。

    8 个月前
  • 解决 Deno 应用遇到的文件读写路径问题

    Deno 是一个安全、现代化的 JavaScript 和 TypeScript 运行时环境,它提供了很多有用的 API,包括文件读写、网络请求等等。在使用 Deno 进行应用开发时,我们经常会遇到文件...

    8 个月前
  • Redux 实战:打造一个购物车组件

    在前端开发中,我们经常需要实现购物车功能,这里我们将介绍如何使用 Redux 打造一个购物车组件。 Redux 简介 Redux 是一种状态管理库,它可以帮助我们管理应用的状态。

    8 个月前
  • Docker 容器中安装 Java 开发环境的方法

    前言 Docker 是一个流行的开源容器化平台,它可以帮助开发者将应用程序和其依赖项打包成一个可移植的容器,从而方便在不同的环境中部署和运行。Java 开发环境是一个常见的容器化需求,本文将详细介绍如...

    8 个月前
  • 应用 Hapi 框架创建 Restful API 服务

    在前端开发中,我们经常需要创建 Restful API 服务来与后端进行数据交互。而 Hapi 是一个流行的 Node.js 框架,它提供了方便的路由管理和插件系统,使得我们可以快速创建高效的 Res...

    8 个月前
  • 如何在 Angular 中使用 TypeScript 进行 Http 请求?

    Angular 是一款流行的前端框架,它提供了许多功能强大的工具来帮助开发人员构建现代 Web 应用程序。其中,Http 模块是一个非常重要的模块,它允许应用程序与远程服务器进行通信,获取数据和执行操...

    8 个月前
  • Headless CMS 与 PWA 的最佳结合方式

    前言 随着移动互联网的发展,Web 应用程序的开发方式也在不断变化。传统的 Web 应用程序往往需要依赖于服务器端的模板渲染,这种方式的缺点是无法支持离线访问和快速响应。

    8 个月前
  • Angular11 应用中如何使用 Flex-layout 实现自适应页面

    什么是 Flex-layout Flex-layout 是一个 Angular 官方推荐的响应式布局库,它基于 CSS3 Flexbox 和 CSS Grid 布局,提供了一些 Angular 指令和...

    8 个月前
  • Promise 中如何实现 Promise 的缓存

    在前端开发中,Promise 是一个非常重要的概念。它可以帮助我们更好地处理异步操作,避免回调地狱。但是,在某些情况下,我们可能会遇到需要缓存 Promise 的场景。

    8 个月前
  • Vue.js+Vuex 实现 SPA 应用的状态管理

    前言 在 SPA(Single Page Application)应用中,状态管理是非常重要的一环。随着应用的复杂度不断提升,状态管理的复杂度也会随之增加。Vue.js 是一个流行的前端框架,而 Vu...

    8 个月前
  • Sequelize 的 beforeBulkCreate 触发的问题解决方法

    Sequelize 是一个基于 Node.js 的 ORM 框架,可以方便地操作数据库。其中,beforeBulkCreate 是 Sequelize 提供的一个钩子函数,用于在批量创建数据之前执行一...

    8 个月前
  • 无障碍 Web 开发实战:如何为残障人士打造友好的交互体验

    前言 在 Web 开发中,我们通常会考虑如何提高用户的交互体验,但我们是否曾考虑过如何为那些残障人士打造友好的交互体验呢?事实上,残障人士也是 Web 用户的一部分,他们也需要使用 Web 应用来获取...

    8 个月前
  • 解读 ES6 中的数组解构语法及其高级用法

    在 ES6 中,引入了数组解构语法,可以方便地从数组中提取值并赋给变量。本文将介绍数组解构语法的基本用法,并深入探讨其高级用法,以及如何在实际开发中使用它们。 基本用法 数组解构语法的基本用法很简单,...

    8 个月前
  • Enzyme 中如何测试异步操作

    Enzyme 中如何测试异步操作 Enzyme 是 React 中一个非常流行的测试工具,它可以帮助我们轻松地编写单元测试和集成测试。测试异步操作是前端开发中非常重要的一环,因为在现代 Web 应用程...

    8 个月前
  • Next.js 中如何进行数据预取与缓存

    在现代的 Web 应用中,数据的处理和展示是一个非常重要的环节。Next.js 是一款流行的 React 框架,它提供了一些工具和技术来帮助我们更好地处理数据预取和缓存。

    8 个月前
  • ES12 中的更高级的原型继承

    在 JavaScript 中,原型继承是一种常见的继承方式。在 ES6 中,我们看到了 class 关键字的引入,这让我们可以更方便地使用原型继承。但是,在 ES12 中,有更高级的原型继承方式,本文...

    8 个月前
  • ES8 中新的对象操作 API:Object.getOwnPropertyDescriptors 详解

    在 ES8 中,新增了一个对象操作 API:Object.getOwnPropertyDescriptors,该 API 可以返回一个对象的所有属性描述符。这个 API 可以很好地帮助我们更好地理解对...

    8 个月前
  • RxJS 中使用 of 操作符构造 Observable

    RxJS 是一个基于 Reactive Programming 的 JavaScript 库,它提供了方便的 API 来处理异步数据流。在 RxJS 中,我们可以使用 of 操作符来构造一个 Obse...

    8 个月前
  • 学习 Deno 时遇到的错误:如何处理 WebSocket 关闭不彻底的问题

    在使用 Deno 进行 WebSocket 开发时,我们有时会遇到 WebSocket 关闭不彻底的问题。这个问题可能会导致服务器端出现内存泄漏,甚至影响整个应用程序的性能和稳定性。

    8 个月前
  • LESS 的 @mixin 语法及进阶应用

    LESS 是一种 CSS 预处理器,它可以让我们在编写 CSS 时更加高效、灵活、易于维护。其中,@mixin 是 LESS 中的一个重要概念,它可以让我们定义一些可复用的代码片段,并在需要的地方进行...

    8 个月前

相关推荐

    暂无文章