Webpack 优化实践:使用 externals 和 splitChunks 插件提升性能

Webpack 是一个现代化的前端项目打包工具,它可以将多个模块打包成一个或多个文件,以便于在浏览器端加载。在实际开发过程中,我们经常需要优化 Webpack 的打包效率,以提升页面加载速度和用户体验。本文将介绍如何使用 externals 和 splitChunks 插件来优化 Webpack 的性能。

externals

在 Webpack 中,externals 可以用来排除某些模块的打包,从而减小打包文件的体积。这些模块可以通过 CDN 或者其他的方式加载,以便于提升页面加载速度。例如,我们可以将 jQuery 从打包文件中排除,然后通过 CDN 加载:

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

在上面的例子中,我们将 jQuery 从打包文件中排除,然后在 index.html 中通过 CDN 加载。这样可以减小打包文件的体积,并且提升页面加载速度。

splitChunks

除了使用 externals,我们还可以使用 splitChunks 插件来优化打包文件。splitChunks 可以将多个模块共同依赖的代码提取成一个单独的文件,以便于缓存和复用。例如,我们可以将所有第三方库的代码提取成一个单独的文件:

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

在上面的例子中,我们使用 splitChunks 插件将所有 node_modules 中的模块提取成一个名为 vendors 的文件。这样可以减小 app.js 的体积,并且提升页面加载速度。

除了 vendors,我们还可以根据实际情况设置其他的 cacheGroups,例如将所有 CSS 提取成一个单独的文件:

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

在上面的例子中,我们使用 splitChunks 插件将所有 .css 文件提取成一个名为 styles 的文件。这样可以减小 app.js 的体积,并且提升页面加载速度。

总结

本文介绍了如何使用 externals 和 splitChunks 插件来优化 Webpack 的性能。使用 externals 可以排除某些模块的打包,从而减小打包文件的体积;使用 splitChunks 可以将多个模块共同依赖的代码提取成一个单独的文件,以便于缓存和复用。在实际开发过程中,我们需要根据实际情况设置 externals 和 splitChunks,以提升页面加载速度和用户体验。

示例代码:https://github.com/xxx/xxx

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


猜你喜欢

  • 在 ECMAScript 2017 中使用 Map 数据结构

    在前端开发中,我们经常需要存储和操作键值对数据,比如缓存数据、存储表单数据等等。ES6 中引入了新的数据结构 Map,它可以帮助我们更方便地管理键值对数据。 Map 数据结构简介 Map 是一种有序的...

    8 个月前
  • ES2020:BigInt 和 JavaScript 的关系

    在 JavaScript 中,数字类型是一种非常常见的数据类型,它可以用来进行计算和表示数值。但是,在某些情况下,数字类型的范围可能会受到限制,这就需要使用 BigInt 类型来解决这个问题。

    8 个月前
  • 响应式设计中的旋转-缩放 BUG 怎么办

    在响应式设计中,我们经常会遇到旋转和缩放的问题。尤其是在移动设备上,用户经常会旋转和缩放屏幕以适应不同的浏览情况。然而,在实现这些功能时,我们经常会遇到一些旋转-缩放 BUG。

    8 个月前
  • ES6 中使用 Proxy 增强 RESTful API

    RESTful API 是目前 Web 应用中最受欢迎的接口设计风格,它以统一资源标识符(URI)作为接口的唯一标识符,并通过 HTTP 动词(GET、POST、PUT、DELETE)对资源进行操作。

    8 个月前
  • ES10 中新引入的 Array.filter 方法详解及使用示例

    在 JavaScript 的 ES10 版本中,新增了许多有用的方法来帮助我们更加高效地编写代码。其中,Array.filter 方法是一个非常实用的方法,它可以帮助我们筛选出数组中符合指定条件的元素...

    8 个月前
  • Redux 中使用 reselect 库优化多层数据筛选

    在前端开发中,我们经常会遇到需要对多层数据进行筛选的情况。如果使用原生的 Redux,我们可能需要写一些冗长的代码来处理这些数据。但是,使用 reselect 库可以大大简化我们的代码,提高代码的可读...

    8 个月前
  • Deno 中如何使用 Sentry 进行错误监控?

    介绍 Deno 是一个安全的 TypeScript 运行时环境,它的设计目标是在不需要 Node.js 的情况下,提供一种更现代化的方式来编写后端应用程序。Sentry 是一个开源的错误监控平台,它可...

    8 个月前
  • 设计 CSS Reset 的正确姿势

    在前端开发中,我们经常需要使用 CSS 来美化页面,但是不同浏览器对于默认样式的处理方式不同,这就导致了在不同浏览器上页面的样式可能会有所不同。为了解决这个问题,我们需要使用 CSS Reset 来清...

    8 个月前
  • Promise 的钩子函数.then/catch/finally 详解

    Promise 是 JavaScript 中一种处理异步操作的方式,它可以让我们更加优雅和简单地处理异步操作。在 Promise 中,有三个钩子函数:.then、.catch 和 .finally,它...

    8 个月前
  • Node.js + Socket.io 实现多人竞技游戏功能

    前言 在互联网时代,游戏已经成为了人们生活中重要的娱乐方式。而随着移动互联网的普及,手机游戏、网页游戏也越来越受到人们的关注。在这些游戏中,多人竞技游戏是一种极为受欢迎的游戏类型。

    8 个月前
  • koa2 使用教程:路由中参数的方法

    在 koa2 中,路由是一个非常重要的概念。路由的作用就是将客户端请求映射到相应的处理函数上。在路由中,参数的传递也是非常常见的。那么在 koa2 中,如何使用路由中的参数呢?本篇文章将详细介绍 ko...

    8 个月前
  • Material Design 如何实现 Tab 选项卡

    在前端开发中,选项卡是常用的交互组件之一。Material Design 是 Google 推出的一套设计语言,它的设计风格简洁、美观,同时也非常注重用户体验。本文将介绍如何使用 Material D...

    8 个月前
  • Kubernetes 应用编排工具之 Helm 介绍

    前言 在 Kubernetes 中,我们需要部署和管理多个应用程序,这些应用程序可能包含多个 Kubernetes 资源对象,如 Deployment、Service、ConfigMap 等。

    8 个月前
  • PWA 的 Web App Manifest 文件为空怎么办?

    PWA(Progressive Web App)是一种新兴的 Web 应用程序开发方式,它能够提供类似于原生应用的用户体验,包括离线访问、桌面快捷方式、推送通知等。

    8 个月前
  • RESTful API 设计模式:Builder 模式实战

    在前端开发中,RESTful API 设计是非常重要的一环。它不仅关乎着 API 的可用性和易用性,还涉及到 API 的可扩展性和可维护性。而 Builder 模式是一种非常适合于 RESTful A...

    8 个月前
  • 如何在 Jest 中测试 Redux-Saga

    Redux-Saga 是一个 Redux 中间件,它可以用来处理异步操作。它使用了 ES6 的 Generator 函数,使得异步操作变得更加易于管理和测试。在本文中,我们将探讨如何在 Jest 中测...

    8 个月前
  • Angular.js SPA 应用中的数据可编辑的解决方案

    在 Angular.js 单页应用中,数据可编辑是一个基本的功能需求,但是实现起来可能会有一些困难。本文将介绍一些常用的数据可编辑解决方案,并提供示例代码和指导意义。

    8 个月前
  • ES6 vs ES8:箭头函数与 bind() 方法的比较

    在 JavaScript 中,函数是一等公民。因此,函数的使用在前端开发中非常重要。在 ES6 和 ES8 中,箭头函数和 bind() 方法是两个非常有用的函数。

    8 个月前
  • 如何在 CSS Grid 中使用 fr 单位?

    CSS Grid 是一种强大的布局工具,可以帮助我们轻松地创建复杂的网格布局。其中,fr 单位是一种强大的长度单位,可以帮助我们更好地控制网格布局的大小和比例。在本文中,我们将详细介绍如何在 CSS ...

    8 个月前
  • Mocha 测试中如何模拟用户输入及表单提交数据

    在前端开发中,测试是非常重要的一环。Mocha 是一个流行的 JavaScript 测试框架,它可以帮助我们轻松地编写和运行测试用例。在测试中,模拟用户输入和表单提交数据是常见的需求。

    8 个月前

相关推荐

    暂无文章