webpack 构建优化实验室 - splitChunks.optimization.splitChunks 配置项思考

在前端工程化中,webpack 已经成为了一种不可避免的构建工具。webpack 通过各种插件和配置项的方式来实现各种构建功能,其中 splitChunks.optimization.splitChunks 是一项非常重要的优化配置。本篇文章将要探讨这个配置项的作用、用法及其合理性思考,帮助大家更好的利用它来加速项目构建。

splitChunks 配置项是什么?

在 webpack 的所有配置项中,optimization.splitChunks 是非常常用的一项优化配置。它主要的作用是将项目中的公共代码提取成公共文件,避免在每个页面间都会打包一次相同的代码。这样不仅可以减小文件大小,还可以减少浏览器下载资源的数量和请求次数,提升首屏渲染速度。

splitChunks 自webpack 4中开始引入,对于使用webpack 3的用户,提取公共代码的配置需通过使用 CommonsChunkPlugin 插件来实现。为了在 webpack 4 中方便处理Webpack从v3到v4的升级过程,Webpack 4在optimization代码块中引入了一个新的属性splitChunks以控制如何提取代码块到新的文件夹中(这也是前端开发生态系统中其他构建工具,如Rollup中的常见优化)。

splitChunks 如何使用?

我们可以通过在 webpack 配置文件中添加optimization.splitChunks选项来启用代码分离功能。常见的用法如下:

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

这样我们就会发现在项目打包的时候会自动把公共的代码提取出来并打包成一个文件。

splitChunks 参数解析

splitChunks 中有很多参数需要我们来配置以达到最好的效果。下面我们来根据官网的文档一一了解一下。

chunks

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

我们通过设置 chunks 来告诉 webpack 代码提取的时机。可选的值有:

  • async:只提取异步代码中的公共模块。
  • initial:只提取入口文件中的公共模块。
  • all:同时提取异步和入口文件中的公共模块。

minSize

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

minSize 定义了被提取的chunk最小的大小。

minChunks

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

minChunks 定义了至少被引用的次数。默认为1,即被引用一次即可被提取出来。

maxAsyncRequests

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

maxAsyncRequests定义了按需加载时,并行请求的最大值。

maxInitialRequests

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

maxInitialRequests定义了一个入口最大的并行请求数。

cacheGroups

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

cacheGroups是一个选项对象,它允许您指定特定块的设置。

splitChunks 在实际项目中的应用

splitChunks 在实际项目中的应用是非常广泛的。以下我们为大家介绍两个例子,分别是按需加载时打包成单独的文件和多页面打包的情况。

按需加载时打包成单独的文件

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

多页面打包的情况

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

总结

本篇文章主要为大家详细介绍了 webpack 构建优化实验室 - splitChunks.optimization.splitChunks 配置项思考,这是一个非常重要的优化配置,可以帮助我们大大提升项目构建的速度和性能。我们可以通过设置不同的参数,结合实际情况来合理配置 splitChunks,使其工作得更加优美。最后提醒大家,在实际项目中使用 splitChunks 配置项时,一定要结合业务需求,避免过度优化,增加不必要的复杂度。

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


猜你喜欢

  • Koa 项目中如何使用 Koa-validate 插件进行表单验证

    在开发 web 应用程序时,表单验证是必不可少的一环。Koa-validate 是一个简单易用的表单验证库,它可以帮助我们快速地进行表单验证,并且提供了很多验证规则,如必填、长度限制、正则表达式、数字...

    1 年前
  • RxJS 应用之实现自动补全搜索

    在前端开发中,我们经常需要实现搜索功能,而自动补全搜索是基础的搜索功能之一。RxJS 是一种强大的响应式编程库,可以帮助我们更方便地实现自动补全搜索功能。本文将介绍如何使用 RxJS 实现自动补全搜索...

    1 年前
  • 在 Tailwind CSS 中如何处理 IE11 中的 Flexbox 布局问题

    背景 在现代前端开发中,Flexbox 布局是一个很常用的布局方式。它让我们能够快速、方便地实现各种布局效果。而在一些老旧的浏览器中,如 IE11,可能会出现 Flexbox 布局的兼容性问题。

    1 年前
  • SASS 编译后发现变量被覆盖

    在前端开发中,使用预处理器编写 CSS 代码是一种非常流行的方法。SASS 是其中一种非常流行的预处理器之一,它可以提供很多有用的功能,例如变量、嵌套、混合、继承等。

    1 年前
  • Babel 编译后代码运行出现 ‘_typeof is not defined’ 错误的解决方案

    问题描述 在使用 Babel 编译 ES6+ 代码为 ES5 时,有时会出现 ‘_typeof is not defined’ 错误,如下: -------- --------------- ----...

    1 年前
  • SPA 应用中如何实现用户登录与授权

    SPA 应用中如何实现用户登录与授权 随着移动设备的普及和互联网的改变,SPA(Single Page Application)已经成为了许多前端开发者的首选,使用 SPA 技术能够提高页面加载速度,...

    1 年前
  • ES11 (2020) 中的可选链操作符:如何避免代码崩溃和浪费性能?

    在前端开发中,我们经常需要处理从后端接收到的数据。这些数据通常是嵌套的对象或数组,而我们需要在代码中访问这些数据的属性或元素。然而,如果数据中某些属性或元素不存在,我们的代码可能会崩溃,因为 Java...

    1 年前
  • Jest 测试中使用 Sinon Spy 的最佳实践

    在前端开发中,测试是至关重要的一环。Jest 是一个非常流行的 JavaScript 测试框架,而 Sinon 则提供了丰富的测试工具,包括 Spy、Stub、Mock 等。

    1 年前
  • ESLint 与 Jest:如何结合 ESLint 与 Jest 检测代码覆盖率?

    ESLint 与 Jest:如何结合 ESLint 与 Jest 检测代码覆盖率? 前端开发过程中,我们不仅需要关注代码的正确性,还需注重代码的质量和可维护性。其中,代码规范和代码覆盖率是两个非常重要...

    1 年前
  • ECMAScript 2017 (ES8) 利用 Object.entries() 实现对象双向映射

    在前端开发中,对象双向映射经常被用到。在 ES8 中,我们可以利用 Object.entries() 方法实现对象双向映射,使得代码更加简单易懂。 Object.entries() 方法 Object...

    1 年前
  • Redux 异步 action 解决方案

    在前端开发中,我们经常会遇到需要异步获取数据并更新 Redux store 的情况。Redux 官方提供了一种异步 action 解决方案,本篇文章将详细介绍该解决方案,包括如何使用和注意事项。

    1 年前
  • Material Design 中的响应式图片布局

    Material Design 是 Google 推出的一种设计规范,旨在创建功能强大且富有美感的移动设备和 Web 应用程序。在 Material Design 中,响应式图片布局是其重要组成部分之...

    1 年前
  • Node.js Headless CMS 及其实现方案的分享

    在现代 Web 开发中,使用 Headless CMS 来管理和发布内容是一个常见的方案。Headless CMS 本质上是一个将内容从展示与管理分离的系统,它能够提供一套 API 接口供外部系统调用...

    1 年前
  • 十分钟读懂 Docker Ruby on Rails 应用部署

    前言 Docker 是一种容器化技术,可以让应用在不同的环境中运行,适合单独部署应用。在本文中,我们将介绍如何使用 Docker 来部署一个 Ruby on Rails 应用程序。

    1 年前
  • PWA 应用如何克服由数据负载引起的性能问题?

    前言 在当今互联网时代,Web 应用程序已经成为人们的重要工具之一。随着移动互联网的普及,PWA(Progressive Web App)应用逐渐兴起,成为前端应用程序的一种新兴形态。

    1 年前
  • 使用 Express.js 和 Passport 实现本地登录和社交登录功能

    在现代 Web 开发中,身份验证和鉴权是非常重要的一部分。 本文将详细介绍如何使用 Express.js 和 Passport 实现本地登录和社交登录功能,以及一些常见的身份验证模式,包括基本身份验证...

    1 年前
  • Socket.io 中如何优雅地处理房间内聊天信息?

    随着互联网技术的发展,即时通信成为了人们日常生活和工作中重要的交流方式,而 Socket.io 作为一个实时通信库,在 Web 开发中扮演着不可替代的角色。在 Socket.io 中,房间(room)...

    1 年前
  • Sequelize 中使用 UTC 时间的处理方法

    在 Web 开发中,处理时间是非常常见的需求。在使用 Sequelize 这个 Node.js ORM (Object-Relational Mapping) 框架时,处理时间的方法也截然不同。

    1 年前
  • MongoDB 高并发场景下性能优化实践

    MongoDB 是当今互联网时代中最流行的 NoSQL 数据库之一,得益于其灵活的模式和卓越的性能,被广泛应用于大数据存储、高并发 Web 应用等场景。然而,在这些高压力的场景下,MongoDB 的性...

    1 年前
  • Cypress 测试框架中的批量运行与调试技巧

    Cypress 是一个基于 JavaScript 的前端测试框架,它能够自动化地运行你的测试用例,模拟浏览器行为,检查网站的正确性和完整性。Cypress 的最大优势在于它的高度可控性和可定制性,它提...

    1 年前

相关推荐

    暂无文章