webpack 优化构建速度的插件

news2025/2/20 15:43:06

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql中事务的简介

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

zoomeye api报错 request invalid, validate usage and try again

项目场景&#xff1a; 调用zoomeye的api接口进行数据拿取 问题描述 之前接口一直通着今天突然报错&#xff0c;以下为源代码 pip install zoomeye from zoomeye.sdk import ZoomEye zm ZoomEye(api_key"34A8B452-D874-C63E0-8471-F3D4f89766f") zm.dork_search(a…

Python 将CSV文件转为PDF文件

CSV文件通常用于存储大量的数据&#xff0c;而PDF文件则是一种通用的文档格式&#xff0c;便于与他人共享和打印。将CSV文件转换成PDF文件可以帮助我们更好地管理和展示数据。本文将介绍如何通过Python编程将CSV文件导出为PDF文件。 Python Excel库安装及介绍 在 Python 中&am…

《手把手教你》系列练习篇之12-python+ selenium自动化测试(详细教程)

1. 简介 前面文章我们了解了如何获取元素的text属性值&#xff0c;和判断元素是否显示在页面&#xff08;is_displayed()方法&#xff09;&#xff0c;本文我们来学习下&#xff0c;判断一个控件是否被选中状态、获取页面元素的大小、组合键-全选文字、组合键-退格键删除文本和…

农业乡村振兴,绿意盎然谱新篇

乡村振兴&#xff0c;不仅是经济的繁荣&#xff0c;更是文化的传承和生态的保护。让我们以更加饱满的热情&#xff0c;投身到乡村建设中来&#xff0c;助力农业现代化&#xff0c;提升农村居民生活品质。 农业乡村振兴的吴总说&#xff1a;在这片热土上&#xff0c;农业承载着国…

简单聊聊大数据分析的方法有什么

大数据分析是指对规模巨大的数据集合进行的分析过程。 这些数据集合通常具有以下几个特点&#xff0c;可以概括为5个V&#xff1a; 1.数据量大&#xff08;Volume&#xff09;&#xff1a;大数据分析处理的数据量巨大&#xff0c;远远超出了传统数据处理软件的能力范围。 2.…

Diffusers代码学习: IP-Adapter

从操作的角度来看&#xff0c;IP-Adapter和图生图是很相似的&#xff0c;都是有一个原始的图片&#xff0c;加上提示词&#xff0c;生成目标图片。但它们的底层实现方式是完全不一样的&#xff0c;我们通过源码解读来看一下。以下是ip adapter的实现方式 # 以下代码为程序运行…

语音降噪算法库介绍

一.语音降噪技术方向介绍 软件上进行语音降噪目前主要是两个方向&#xff1a;传统降噪算法和AI降噪算法&#xff0c;他们各有千秋&#xff0c;目前看他们各有千秋&#xff0c;有各自适用场景。 推荐一个不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;内容全面&#…

【Python报错】已解决AttributeError: list object has no attribute items ( Solved )

解决Python报错&#xff1a;AttributeError: list object has no attribute ‘items’ (Solved) 在Python中&#xff0c;AttributeError通常表示你试图访问的对象没有你请求的属性或方法。如果你遇到了AttributeError: list object has no attribute items的错误&#xff0c;这…

Si3N4/SiC纳米复相陶瓷综合性能明显提升 下游可应用范围广泛

Si3N4/SiC纳米复相陶瓷综合性能明显提升 下游可应用范围广泛 Si3N4/SiC纳米复相陶瓷&#xff0c;是以碳化硅&#xff08;SiC&#xff09;纳米颗粒为第二相&#xff0c;弥散进入氮化硅&#xff08;Si3N4&#xff09;基体相制备得到的新型陶瓷材料&#xff0c;对碳化硅陶瓷具有强…

【AIOT-Robot】3D pos 相关

1. Mediapipe 3D detection 使用移动增强现实(AR)会话数据(session data),开发了新的数据pipeline。大部分智能手机现在都具备了增强现实的功能,在这个过程中捕捉额外的信息,包括相机姿态、稀疏的3D点云、估计的光照和平面。 利用相机的姿势、检测到的平面、估计的照明,来生…

从LangChain迈出学习人工智能第一步入门指南

什么是langchain LangChain是一个用于开发由语言模型驱动的应用程序的框架,致力于简化AI模型应用的开发.简单来说,langchain就是一个帮助开发者轻松完成AI模型应用开发的框架,现在支持python和js两个版本,它集成多种大语言模型及第三方api. 对于使用langchain,把它当作一个第三…

禁用layui树形表格的多选框checkbox

1. 背景 在使用树形表格渲染数据时&#xff0c;需要对数据进行批量操作。相对于选中数据后&#xff0c;再做错误提示。直接把数据的多选框禁用掉更加直观。 2. 实现 DisabledTableCheckBox: () > {// 获取所有行 var tableElem $(".layui-table-fixed-l");var …

Vue3+vite部署nginx的二级目录,使用hash模式

修改router访问路径 import { createRouter, createWebHashHistory } from vue-routerconst router createRouter({history: createWebHashHistory (/mall4pc-bbc/),routes: [XXX,] })配置package.json文件 "build:testTwo": "vite build --mode testing --ba…

【管理咨询宝藏128】埃森哲大型制造型集团五年发展战略规划项目规划方案

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏128】ACC大型制造型集团五年发展战略规划项目规划方案 【格式】PDF版本 【关键词】战略规划、制造型企业、埃森哲 【核心观点】 - 中国消费者正…

5G发牌五周年丨移远通信:全面发力,加快推进5G技术服务社会发展

2024年6月6日&#xff0c;正值中国5G商用牌照发牌五周年。根据移动通信“十年一代”的规律&#xff0c;5G已走过一半征程。在过去的五年时间里&#xff0c;5G技术从萌芽到成熟&#xff0c;深刻改变了工业、农业、医疗及消费端等各个领域的发展脉络。无论是无人机配送、自动驾驶…

PMP学习和考试难度分析

PMP&#xff08;项目管理专业人士&#xff09;考试目前是全球范围内比较具权威性和认可度的项目管理证书之一。因此PMP考试的难度是一个备受关注的话题。根据我们以往的学员经验我从不同角度解析PMP考试的难度&#xff0c;并提供一些应对挑战的建议。希望对大家有所帮助。 PMP考…

自动识别水位预警摄像机

自动识别水位预警摄像机是现代城市水域安全管理的重要组成部分。这种摄像机具有多项功能&#xff0c;使其在水位监测和异常情况识别方面发挥关键作用。 其高清摄像头能够捕捉水位变化的细节&#xff0c;提供精确的监控画面。这意味着即使是微小的水位变化也能被及时发现和记录。…

场景图生成网络——RelTR(TPAMI2023)

一、ReITR概述 场景图是一种图结构&#xff0c;其节点代表图像中的实体&#xff0c;边代表实体间的关系。这项技术超越了传统的对象检测&#xff0c;与视觉关系检测紧密相关&#xff0c;对图像检索、图像字幕、视觉问答&#xff08;VQA&#xff09;和图像生成等多种视觉-语言任…

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

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、ToDo.data.ts的数据信息如下 import {BasicColumn} from //components/Table; import {FormSchema} from //components/Table; import { rules} from //utils/helper/validator; impor…