返回顶部
首页 > 资讯 > 前端开发 > JavaScript >webpack代码分片的实现
  • 179
分享到

webpack代码分片的实现

2024-04-02 19:04:59 179人浏览 薄情痞子
摘要

目录背景CommonsChunkPluginsplitChunks配置异步加载资源总结背景 实现高性能应用其中最重要的一点就是尽可能地让用户每次只加载必要的资源,优先级不要太高的资

背景

实现高性能应用其中最重要的一点就是尽可能地让用户每次只加载必要的资源,优先级不要太高的资源则采用延迟加载等技术渐进式地获取,这样可以保证页面的首屏速度。代码分片是WEBpck打包工具所特有的一项技术,通过这项功能可以把代码按照特定的形式进行拆分,使用户不必一次全部加载,而是按需加载。

CommonsChunkPlugin

虽然这个插件webpack4当中已经不推荐使用,但是我们还是要了解一下。这个插件可以将多个Chunk中的公共的部分提取出来。公共模块提取可以为几个项目带来几个收益:

  • 开发过程中减少了重复模块打包,可以提升开发速度;
  • 减小整体资源体积;
  • 合理分片后的代码可以更有效的利用客户端缓存

该插件的默认规则是只要一个模块被两个入口chunk所使用就会被提取出来,比如只要a和b用了React,react就会被提取出来。但是它仍有些不足之处:

  • 一个CommonChunkPlugin只能提取一个vendor,假如我们想提取多个vendor,则需要配置多个插件,这回增加很多重复的配置代码。
  • 前面我们提到的mainfest实际上使浏览器多加载一个资源,这对于页面渲染速度不是友好的。
  • 由于内部设计上的一些缺陷,CommonChunkPlugin在提取公共模块的时候会破坏掉原有的chunk中模块的依赖关系,导致难以进行更多的优化

splitChunks

这是webpack新增的一个功能,改进了CommonChunkPlugin而重新设计和实现的代码分片特性,不仅比CommonChunkPlugin功能更加强大,还更简单易用。代码如下


module.exports = {
    entry: './foo.js',
    output: {
        filename: 'foo.js',
        publicPath: '/dist/'
    },
    mode: 'development',
    optimization: {
        splitChunks: {
            chunks: 'all',
        }
    }
}

// foo.js
import React from 'react';
import('./bar.js');
document.write('foo.js', React.version);

// bar.js
import react from 'react';
console.log('bar.js', React.version);

splitChunk默认情形下的提取条件:

  • 提取后的chunk可被共享或者来自node_modules目录。这一条很容易理解,被多次引用或处于node_modules中的模块更倾向于是通用模块,比较适合被提取出来。
  • 提取后的js chunk会有相应的体积,比如大于30KB,CSS Chunk体积假如大于50KB,这个也比较容易理解,如果提取后的资源体积太小,那么带来的优化效果也一般。
  • 在按需加载的过程,并行请求的资源最大值小于等于5,按需加载指的是,通过动态插入script标签的方式加载脚本。我们一般不希望同时加载过多的资源,因为每一个请求都要花费建立链接和释放链接的成本,因此提取的规则只在并行请求不多的时候生效。
  • 在首次加载时,并行请求的资源数最大值小于等于3,和上一条类似,只不过在页面首次加载时往往对性能要求更高,因此这里的默认阀值也更低。

配置


splitChunk:{
    chunks: 'async',
    minSize: {
        javascript: 30000,
        style: 50000,
    },
    maxSize: 0,
    minChunks: 1,
    maxAsyncRequests: 5,
    maxInitialRequests: 3,
    automaticNameDelimiter: '~',
    name: true,
    cacheGroups:{
        vendor: {
            test: /[\\/]node_modules[\\/]/,
            priority: -10,
        },
        default: {
            minChunks: 2,
            priority: -20,
            reuseExistinGChunk: true
        }
    }
}

匹配模式
chunks的值有三个,async(默认)、initial、all。async只提取异步chunks,initial只对入口chunk生效,all两种模式同时开启(推荐使用)

匹配条件
minSize、minChunks、maxAsyncRequests、maxInitialRequests

命名
默认为true,它意味着可以根据不能cacheGroups和作用范围自动为新生成的chunk命名,并以automaticNameDelimiter分隔。

cacheGroup
可以理解为分离chunks时 的规则,默认情况下两种规则:vendors和default。vendors
用于提取所有node_modules中符合条件的模块,default则作用于被多次引用的模块。可以对这些规则进行增加或者修改,如果要禁用某种规则,也可以直接将其设置为false。当一个模块同时符合多个cacheGroups时,则更具其中的priority配置项确定优先级。

异步加载资源

资源异步加载主要解决的问题是,当模块数量过多,资源体积过大时,可以把一些暂时使用不到的模块延迟加载。这样使页面初次渲染的时候用户下载的资源尽可能小,后续的模块等到需要的时候在再去触发加载,因此这种一般都叫做按需加载。
webpack中有两种异步加载的方式,import(webapck2开始)和require.ensure(webapck1),import和es6 module的区别就是,不需要顶层加载,即用即加载。因为只是简单的函数调用,这里不做其他阐述。

总结

代码分片有几种方式---CommonChunkPlugin或SplitChunks,以及异步资源加载。借助这些方法可以有效的缩小资源体积,同时更好的利用缓存,给用户更友好的体验。

到此这篇关于webpack代码分片的实现的文章就介绍到这了,更多相关webpack代码分片内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: webpack代码分片的实现

本文链接: https://lsjlt.com/news/129668.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • webpack代码分片的实现
    目录背景CommonsChunkPluginsplitChunks配置异步加载资源总结背景 实现高性能应用其中最重要的一点就是尽可能地让用户每次只加载必要的资源,优先级不要太高的资...
    99+
    2024-04-02
  • webpack中怎么实现代码分片
    webpack中怎么实现代码分片,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。CommonsChunkPlugin虽然这个插件在webpack4当中已经不推荐使...
    99+
    2023-06-20
  • Webpack 实现 Node.js 代码热替换
    这两天为了这个问题, Gitter 上问, Twitter 上问, GitHub 上问, 两天没反应 原来写博客的 jlongster 不理我, 我也不知道 Webpack 作者的联系方式 最后在 Gitt...
    99+
    2022-06-04
    代码 Webpack Node
  • webpack代码拆分的示例分析
    这篇文章主要介绍webpack代码拆分的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!如果利用 webpack 将项目中的所有代码打包在一起,很多时候是不适用的,因为代码中有...
    99+
    2024-04-02
  • 使用webpack打包ts代码的实现
    目录使用 webpack 打包生成 package.json安装 cnpm安装 webpack 相关编写 webpack 配置文件创建 tsconfig.json修改 package...
    99+
    2024-04-02
  • webpack代码分离优化的示例分析
    这篇文章主要介绍了webpack代码分离优化的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。分离代码文件在此之前,首先要知道经常配置...
    99+
    2024-04-02
  • Python实现Gif图片分解的示例代码
    目录1、模块安装2、模块导入3、分解动图4、批量分解5、生成效果在前面做过一个Gif图片合成的小工具,老朋友应该有所印象。但是,近段时间有人反映合成了的Gif图片该如何进行分解呢? ...
    99+
    2024-04-02
  • 在Python web中实现验证码图片代码分享
    系统版本: CentOS 7.4 Python版本: Python 3.6.1 在现在的WEB中,为了防止爬虫类程序提交表单,图片验证码是最常见也是最简单的应对方法之一。 1.验证码图片的生成 ̳...
    99+
    2022-06-04
    验证码 代码 图片
  • Python实现修改图片分辨率(附代码)
    目录前言环境依赖代码验证一下前言 本文提供将图片分辨率调整的python代码,一如既往的实用主义。 环境依赖 ffmpeg环境安装,可以参考:windows ffmpeg安装部署 f...
    99+
    2024-04-02
  • webpack图片转为base64的实现示例
    下载url-loader yarn add -D url-loader module: { rules: [ { test: /\.(jpeg...
    99+
    2024-04-02
  • webpack优化之代码分割与公共代码提取的示例分析
    小编给大家分享一下webpack优化之代码分割与公共代码提取的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、概念在一...
    99+
    2024-04-02
  • 怎么在Webpack中执行代码分割
    这篇文章主要介绍“怎么在Webpack中执行代码分割”,在日常操作中,相信很多人在怎么在Webpack中执行代码分割问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么在Web...
    99+
    2024-04-02
  • 如何实现webpack图片转为base64
    这篇文章将为大家详细讲解有关如何实现webpack图片转为base64,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。下载url-loader yarn add ...
    99+
    2023-06-22
  • iOS仿微信图片分享界面实现代码
    以下是一个iOS仿微信图片分享界面的实现代码的示例:```swiftimport UIKitclass ViewController: UIViewController, UICollectionViewDelegate, UIColl...
    99+
    2023-08-11
    iOS
  • Java实现文件分片上传接口的示例代码
    目录java后端分片上传接口前端分片java后端分片上传接口 文件上传工具--FileUtil package com.youmejava.chun.util; import l...
    99+
    2024-04-02
  • Webpack构建代码质量压缩的示例分析
    小编给大家分享一下Webpack构建代码质量压缩的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Webpack构建速度优化基本优化完毕,接下来考虑的就是:线上代码质量的优化,即如何...
    99+
    2024-04-02
  • GitLab的代码片段功能及分享实践
    GitLab的代码片段功能及分享实践【引言】在软件开发过程中,我们经常会遇到一些重复性的代码片段,例如常用的函数、配置文件模板等等。为了提高开发效率,GitLab提供了代码片段功能,可以方便地存储和分享这些代码片段,使团队成员能够快速获取和...
    99+
    2023-10-22
    代码片段功能: 代码片段 分享实践: 分享 GitLab: GitLab
  • NodeJS实现图片上传代码(Express)
    文件上传是每个网站不可避免的,最近需要做些上传图片的功能,主要解决两个问题,一个是文件上传样式和服务端路径保存,功能很简单,做起来倒是没那么简单,先从最简单的页面的上传页面的样式开始。 页面样式 Html页...
    99+
    2022-06-04
    图片上传 代码 NodeJS
  • Wordpress 显示主题图片的实现代码
    复制代码代码如下: <php //Put this in functions.php function get_primary_image($id, $size){ $featured = ...
    99+
    2022-06-12
    Wordpress 主题图片
  • Android图片无限轮播的实现代码
    本文实例为大家分享了AnAndroid图片无限轮播的具体代码,供大家参考,具体内容如下 public class MainActivity extends Activity ...
    99+
    2022-06-06
    轮播 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作