webpack 优化构建速度的插件

1.HardSourceWebpackPlugin本地缓存

HardSourceWebpackPlugin这个插件比DLL动态链接库更优秀

HardSourceWebpackPlugin是webpack的插件,为模块提供中间缓存步骤。为了查看结果,您需要使用此插件运行webpack两次:第一次构建将花费正常的时间。第二次构建将显着加快(大概提升90%的构建速度)

安装

cnpm i hard-source-webpack-plugin

引入

const HardSourceWebpackPlugin = require('hard-source-webpack-plugin');

module.exports = { // ...... plugins: [ new HardSourceWebpackPlugin() // <- 直接加入这行代码就行 ] }

 总结:

进行文件的热加载的,一个项目启动或者打包的时间,超过40s的时候,可以进行项目的优化和热加载。文件的加载,首先hard-source-webpack-plugin会进行文件的启动缓存,第一次启动之后,会给文件添加一次缓存,然后在第二次启动的时候,直接在本地缓存进行。打开的时候先去本地获取项目,优化非常猛项目启动时间少80%。

文件的打包,使用之后,加速打包大约在40%-50%左右

未优化前:


优化后:

1.1 hard-source-webpack-plugin和cache-loader的差异

建议使用hard-source-webpack-plugin优化工程

缓存方式:

cache-loader:cache-loader 主要是缓存 loader 的输出结果。它会缓存每个 loader 处理后的文件,以避免重复的编译过程。
hard-source-webpack-plugin:hard-source-webpack-plugin 则是提供了一个中间缓存,可以跨次构建持久化缓存模块和中间结果,以减少重复工作。
缓存粒度:

cache-loader:cache-loader 的缓存粒度是 loader 级别的,即每个 loader 处理的结果都可以被缓存。
hard-source-webpack-plugin:hard-source-webpack-plugin 的缓存粒度更大,可以缓存模块和中间结果,从而跨多个 loader 和构建过程。
缓存策略:

cache-loader:cache-loader 的缓存策略相对简单

hard-source-webpack-plugin 相对复杂

webpack-bundle-analyzer生成报告

是一个用于分析 webpack 打包结果的插件,它可以帮助开发者直观地了解打包后的文件大小、模块依赖关系等信息,从而进行优化。以下是使用 webpack-bundle-analyzer 的基本步骤

安装:

npm install --save-dev webpack-bundle-analyzer

配置:

const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
module.exports = {
  plugins: [
    new BundleAnalyzerPlugin({
      analyzerMode: 'server', // 启动 HTTP 服务器以显示 bundle 报告
      generateStatsFile: true, // 生成 stats.json 文件
      // 其他配置项...
    })
  ]
}; 

 运行:

配置完成后,可以通过运行打包命令(如 npm run build 或 yarn build)来生成分析报告。如果配置了 generateStatsFile: true,则会在构建过程中生成 stats.json 文件。在服务器模式下,分析器会自动启动一个 HTTP 服务器,并在浏览器中打开报告。通过分析报告,可以直观地看到打包后的文件大小、模块依赖关系等信息。这有助于识别哪些模块占用了较多的空间,从而进行优化

3.cache-loader缓存构建结果 

cache-loader 可以被用来缓存构建结果,以加快构建速度 ,它可以缓存 loader 的输出结果,避免重复耗时的编译过程。

安装:

npm install --save-dev cache-loader

 配置:

module.exports = {
  // ...
  module: {
    rules: [
      {
        test: /\.jsx?$/,
        use: [
          'cache-loader',
          'babel-loader'
        ],
        include: path.resolve('src')
      },
    ]
  }
  // ...
};

 或者这样的写法:

module.exports = {
  // ...
  module: {
    rules: [
       {

        test: /\.vue$/,

        use: [

          { loader: 'cache-loader' },

          { loader: 'vue-loader', options: vueLoaderConfig },

        ],

        // loader: 'vue-loader',

        // options: vueLoaderConfig

      },


    ]
  }
  // ...
};

 总结:

请注意,保存和读取这些缓存文件会有一些时间开销,所以请只对性能开销较大的 loader 使用此 loader。

4 CDN注入

4.1首先使用externals进行项目依赖提取

进行大文件的打包忽略

module.exports = {
  configureWebpack: {
    externals: {
      vue: 'Vue',
      'vue-router': 'VueRouter',
      axios: 'axios',
      echarts: 'echarts'
    }
}

在index.html中使用CDN进行依赖大的引入

 <body>
    <script src="http://lib.baomitu.com/vue/2.6.14/vue.min.js"></script>
    <script src="http://lib.baomitu.com/vue-router/3.5.1/vue-router.min.js"></script>
    <script src="http://lib.baomitu.com/axios/1.2.1/axios.min.js"></script>
    <script src="http://lib.baomitu.com/echarts/5.3.2/echarts.min.js"></script>
  </body>

4.2缺点:CDN配置到服务器是要钱的

这个东西,CDN配置到服务器是要钱的,然后就是这个东西不稳定,服务器不稳定或者网络波动的时候,项目会卡顿 

5.路由懒加载

webpack路由懒加载

在Webpack中实现路由的懒加载,可以使用动态导入语法,这是ECMAScript提供的一种新的import语法,可以将模块代码拆分成小块,按需加载。这样可以提高初始加载速度,并且只有在实际需要时才加载路由组件

// router.js
import Vue from 'vue';
import Router from 'vue-router';
 
Vue.use(Router);
 
export default new Router({
  routes: [
    {
      path: '/home',
      name: 'Home',
      // 使用动态导入进行懒加载
      component: () => import('@/components/Home.vue')
    },
  ]
});

6. 静态资源预加载

是用户点击按钮时才加载这个资源的,如果资源体积很大,那么用户会感觉到明显卡顿效果 要优化这种情况,可以使用preload和prefetch技术

webpack 预加载资源-CSDN博客文章浏览阅读603次,点赞9次,收藏8次。webpack 预加载资源 减少首屏绘制时长https://blog.csdn.net/qq_37550440/article/details/139501533

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/687051.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI技术变革与企业服务创新

1、AI的技术变革 1&#xff09;AI市场规模 2&#xff09;AI大模型发展历程 3&#xff09;AIGC发展背景 4&#xff09;AIGC技术能力 AIGC的技术架构逻辑上分为基础层、技术层、能力层、应用层、终端层五大板块&#xff0c;其中核心技术层涵盖AI技术群和大模型的融合创新&#…

Python 短文本匹配,短文本语义相似度,基于大模型的短文本匹配,基于LLMs的短文本语义相似度识别,短文本语义扩充和匹配

1.任务描述 之前在做疾病相似度匹配的时候&#xff0c;堪称史诗级难题&#xff0c;虽然最后加上规则以及一些nlp模型&#xff0c;取得了差强人意的效果&#xff0c;但是短文本的语义相似度匹配一直属于比较难以攻克的难题 2.思路 随着近年大模型的飞速发展&#xff0c;就之前…

Linux实验七:线程管理

目录 一、实验目的二、实验内容三、实验环境四、参考代码五、实验步骤步骤1. 编辑源代码test7.c步骤2. 编译源代码test7.c步骤3. 运行可执行程序test7步骤4. 进一步调试源代码test7.c 六、实验结果七、实验总结 一、实验目的 1、深入理解线程模型相关概念&#xff1b; 2、掌握…

SpringBoot实现发送邮件功能

目录 一、开启邮件服务 二、导入pom依赖 三、配置yml文件 四、发送邮件 4.1、发送文字邮件 4.2、发送html邮件 4.3、发送附件邮件 4.4、发送图片邮件 一、开启邮件服务 这里拿QQ邮箱举例。 翻到下面进行开启,之后获取授权码。 二、导入pom依赖 <dependency><…

AlaSQL.js:用SQL解锁JavaScript数据操作的魔法

简介 先附上 github 地址 https://github.com/AlaSQL/alasql AlaSQL.js - JavaScript SQL database for browser and Node.js. Handles both traditional relational tables and nested JSON data (NoSQL). Export, store, and import data from localStorage, IndexedDB, or …

【机器学习】机器学习与智能交通在智慧城市中的融合应用与性能优化新探索

文章目录 引言机器学习与智能交通的基本概念机器学习概述监督学习无监督学习强化学习 智能交通概述交通流量预测交通拥堵管理智能信号控制智能停车管理 机器学习与智能交通的融合应用实时交通数据分析数据预处理特征工程 交通流量预测与优化模型训练模型评估 智能信号控制与优化…

mysql中事务的简介

大家好。我们在日常开发过程中肯定都或多或少的用到过事务&#xff0c;而且在面试时&#xff0c;数据库的事务也是必问内容之一。今天我们就来说说mysql的事务。 为了方便我们下面内容的讲解&#xff0c;我们也先建立一个讲事务必用的表–account表&#xff0c;并在表中插入两…

2024上半年主播又买了啥好东西? | 老高居然买了仨手机当望远镜用!

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 朱峰 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo 场地支持 / &#xff08;新&#xff09;声湃轩北京录音间 本期节目绝无广告&#xff0c;如有需要&#xff0c;我们还可以提供购买记录 …

Qt 简易Word

Ui界面如下&#xff1a; 查找和替换界面&#xff1a; 具体代码&#xff1a; GitHub : 简易Word Gitee : 简易Word

el-table合计行前置在首行,自定义合计行方法

背景 el-table原生合计行是在标签内增加show-summary属性&#xff0c;在表尾实现设计合计&#xff0c;且只对表格当前页面显示的列数据进行合计。element-UI效果如下图所示。 现要求在首行显示合计行&#xff0c;并自定义合计逻辑实现如下效果。 图示表格中&#xff0c;成本…

正宇软件助力青岛打造智慧政协平台,引领新时代政协工作创新

在当前数字化、智能化浪潮的推动下&#xff0c;青岛市政协紧跟时代步伐&#xff0c;以“百舸争流奋楫先”的精神&#xff0c;不断开拓创新&#xff0c;推动政协工作高质量发展。5月30日&#xff0c;人民政协报报道了青岛市政协在推动高质量发展、加强思想政治引领、凝聚合作共识…

李学龙 :涉水视觉

源自&#xff1a;电子学报 作者&#xff1a;李学龙 注&#xff1a;若出现无法显示完全的情况&#xff0c;可搜索“人工智能技术与咨询”查看完整文章 摘 要 地球表面有约71%的面积被江河湖海等水体覆盖&#xff0c;陆地上的成像也会受到云雪雨雾等水体影响&#xff0c;但是…

C++三大特性之继承,详细介绍

阿尼亚全程陪伴大家学习~ 前言 每个程序员在开发新系统时&#xff0c;都希望能够利用已有的软件资源&#xff0c;以缩短开发周期&#xff0c;提高开发效率。 为了提高软件的可重用性(reusability)&#xff0c;C提供了类的继承机制。 1.继承的概念 继承&#xff1a; 指在现有…

软件项目建设方案编制参考模板(Word原件)

1 引言 1.1 编写目的 1.2 项目概述 1.3 名词解释 2 项目背景 3 业务分析 3.1 业务需求 3.2 业务需求分析与解决思路 3.3 数据需求分析【可选】 4 项目建设总体规划【可选】 4.1 系统定位【可选】 4.2 系统建设规划 5 建设目标 5.1 总体目标 5.2 分阶段目标【可选】 5.2.1 业务目…

迅为RK3562开发板ARM四核A53核心板瑞芯微国产人工智能Linux安卓

iTOP-3562开发板采用瑞芯微RK3562处理器&#xff0c;内部集成了四核A53Mali G52架构&#xff0c;主频2GHZ&#xff0c;内置1TOPSNPU算力&#xff0c;RK809动态调频。支持OpenGLES1.1/2.0/3.2、0penCL2.0、Vulkan 1.1内嵌高性能2D加速硬件。 内置独立NPU, 算力达 1TOPS,可用于轻…

硬件I2C读写MPU6050

硬件I2C读写MPU6050 SCL接PB10&#xff0c;SDA接PB11,但是硬件I2C引脚不可以任意指定。 查询引脚定义表&#xff0c;来规划引脚。但由于PB6,7,8,9被OLEDz占用&#xff0c;不方便接线了。 可以使用I2C2引脚&#xff0c;但必须是SCL对应PB10&#xff0c;SDA对应PB11&#xff0c;…

嵌入式Linux系统编程 — 2.3 标准I/O库:格式化I/O

目录 1 格式化I/O简介 2 格式化输出 2.1 格式化输出函数简介 2.2 格式控制字符串 format 2.3 示例程序 3 格式化输入 3.1 格式化输入简介 3.2 格式控制字符串 format 3.3 示例程序 1 格式化I/O简介 在先前示例代码中&#xff0c;经常使用库函数 printf() 来输出程序中…

数据分析中的统计学基础及Python具体实现【数据分析】

各位大佬好 &#xff0c;这里是阿川的博客&#xff0c;祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 Python 初阶 Python–语言基础与由来介绍 Python–…

python的line[:-1]和line[-1]

line[:-1]其实就是去除了这行文本的最后一个字符(换行符)后剩下的部分。 line = "abcde" line[:-1] 结果为:abcd line = "abcde" line[::-1] 结果为:edcba 示例3 [m : ] 代表列表中的第m+1项到最后一项 [ : n] 代表列表中的第一项到第n项 [-1] 代…

基于jeecgboot-vue3的Flowable流程-已办任务(一)

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、api接口部分 import { defHttp } from //utils/http/axios;enum Api {flowRecord /flowable/task/flowRecord,finishedListNew /flowable/task/finishedListNew,revokeProcess /flo…