首页 > 其他分享 >项目打包优化-HardSourceWebpackPlugin

项目打包优化-HardSourceWebpackPlugin

时间:2023-04-05 21:49:08浏览次数:46  
标签:文件 vue js webpack new HardSourceWebpackPlugin 优化 打包 进行

项目优化的方法

HardSourceWebpackPlugin

是一个插件,安装的方式

npm i hard-source-webpack-plugin

引入文件,进行config文件的配置

进行文件的热加载的,一个项目启动或者打包的时间,超过40s的时候,可以进行项目的优化和热加载。

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

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

缺点:每次修改配置项之后,需要项目重新启动的时候,这个时候是需要重新进行项目的热更新,跟没有配置一样。

路由懒加载

在路由的页面使用import进行页面的引入,这样属于动态的对组件进行导入,然后设置绝对路径

缺点:不利于SEO的搜索。

CDN注入

安装

npm install webpack-bundle-analyzer -D

在vue.config.js中进行引入

const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
module.exports = {
  configureWebpack: {
      plugins: [
         new BundleAnalyzerPlugin()
      ]
  }
}

使用npm run serve运行后,在浏览器中进行打开运行的页面,然后可以看到分析页面

使用externals进行项目以来的提取

在vue.config.js中进行配置,这里配置的是大文件,进行大文件的打包忽略

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>

 

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

Gzip进行文件的压缩(不建议使用,前后端联调,影响项目稳定性)

大概就是,前端使用Gzip进行文件的压缩,然后后端使用nginx进行文件的解压

安装

npm install compression-webpack-plugin -D

在vue.config.js中

const CompressionPlugin = require('compression-webpack-plugin');

module.exports = {
  configureWebpack: {
     plugins: [
      new CompressionPlugin({
        test: /\.(js|css)(\?.*)?$/i, //需要压缩的文件正则
        threshold: 1024, //文件大小大于这个值时启用压缩
        deleteOriginalAssets: false //压缩后保留原文件
      })
     ]
  }
}

preload预加载

浏览器自己提供的一种机制,在页面加载的时候,预先请求资源,一边在需要的时候可以更快的获取这些资源。

也就是设置文件中的黑名单,配置文件,添加一个数组,用来储存黑名单

const blackList = ['script1.js', 'script2.js'];

 

然后进行黑名单的传递

plugins: [
  new ScriptExtHtmlWebpackPlugin({
    preload: {
      test: /\.js$/,
      excludeChunks: blackList
    }
  })
]

 

ScriptExtHtmlWebpackPlugin

安装

npm install --save-dev script-ext-html-webpack-plugin

 

删除文件中各个脚本都在使用的脚本命令,然后统一在html页面中进行封装,需要用到的时候,去html页面中进行获取,这样就可以减少http的请求。

 

 

 

删除项目中的所有console.log

安装

npm install webpack-strip-debug --save-dev

vue.config.js中进行项目配置

const StripDebugPlugin = require('webpack-strip-debug');

module.exports = {
  // ...
  plugins: [
    new StripDebugPlugin(),
  ],
};

也可以删除我不想要的语句

new StripDebugPlugin({
  strip: ['console.log', 'console.debug'],
});

HappyPack 多线程打包

安装

npm install HappyPack -D

 

vue.confg.js中进行引入

const HappyPack = require('happypack');
const os = require('os');
// 开辟一个线程池,拿到系统CPU的核数,happypack 将编译工作利用所有线程
const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length });

module.exports = {
  configureWebpack: {
     plugins: [
       new HappyPack({
        id: 'happybabel',
        loaders: ['babel-loader'],
        threadPool: happyThreadPool
      })
     ]
  }
}

 

DllPlugin 动态链接库

和externals作用相似,都是把依赖进行抽离出去,节约打包时间。(公司没有很好的CDN或者不支持CDN的时候可以考虑使用DllPlugin)

创建文件

import { DllPlugin } from "webpack";

export default {
    // 需要抽离的依赖
    entry: {
        vendor: ["vue", "vue-router", "axios", "echarts"]
    },
    mode: "production",
    optimization: {
        splitChunks: {
            cacheGroups: {
                vendor: {
                    chunks: "all",
                    name: "vendor",
                    test: /node_modules/
                }
            }
        }
    },
    output: {
        filename: "[name].dll.js", // 输出路径和文件名称
        library: "[name]", // 全局变量名称:其他模块会从此变量上获取里面模块
        path: AbsPath("dist/static") // 输出目录路径
    },
    plugins: [
        new DllPlugin({
            name: "[name]", // 全局变量名称:减小搜索范围,与output.library结合使用
            path: AbsPath("dist/static/[name]-manifest.json") // 输出目录路径
        })
    ]
};

 

运行webpack民工,生成DLL文件和清单文件

webpack --config webpack.dll.config.js

 

文件进行配置

import { DllReferencePlugin } from "webpack";
import HtmlTagsPlugin from "html-webpack-tags-plugin";

export default {
  configureWebpack: {
    plugins: [
      new DllReferencePlugin({
        manifest: AbsPath("dist/static/vendor-manifest.json") // manifest文件路径
      }),
      new HtmlTagsPlugin({
        append: false, // 在生成资源后插入
        publicPath: "/", // 使用公共路径
        tags: ["static/vendor.dll.js"] // 资源路径
      })
    ]
  }
};

  

transpileDependencies&&Babel 进行项目版本的降级

进行版本降级,更好的适配低版本

Babel的用法

安装

npm install --save-dev @babel/core @babel/cli

 

 创建文件,创建一个.babelrc的文件,进行指定Babel的配置,下边的代码是把ES6+代码改成ES5代码

{
  "presets": ["@babel/preset-env"]
}

 

把src目录中的js代码减低版本为ES5的代码,可以将ts文件转成js文件,可以将jsx文件转成js文件

npx babel src --out-dir dist

 

标签:文件,vue,js,webpack,new,HardSourceWebpackPlugin,优化,打包,进行
From: https://www.cnblogs.com/hgng/p/17280009.html

相关文章

  • mysql 两百万数据 深分页性能优化
    --ddlCREATETABLE`student`( `id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'主键', `user_no`varchar(50)DEFAULT''COMMENT'学号', `user_name`varchar(50)DEFAULT''COMMENT'姓名', `score`decimal(10,2)DEFAU......
  • RedisTemplate Pipeline 封装和使用,优化Redis操作
    前言公司游戏项目服务端运行过程中,依赖Redis保存游戏过程数据。与客户端一次交互会对Redis进行大量的操作,在内网开发环境下测试,一次操作开销在1-2ms,建立连接和网络开销累积在一起大大降低了响应速度,这种场景下可以使用RedisPipeline进行优化。RedisPipelineRedis服......
  • Android性能优化总结
    这是来自一位粉丝「MeloDev」的投稿,讲真,我这里投稿的不少,但是只有我自己觉得很不错的才会通过,这篇文章我觉得对大家有用,而且性能优化也算是我面试必问的一个话题了,所以这里推荐给大家。微信不支持链接,可点击「阅读原文」查看原文。写在前面公司给了我一周的时间去学习Android性能的......
  • 一个Web报表项目的性能分析和优化实践(六):设置MySQL的最大连接数(max_connections)
    在上一篇文章中"一个Web报表项目的性能分析和优化实践(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例"提到,项目中新增几个数据库后,数据库最大连接数达到了默认的最大值100。此时,如果再创建连接,就会报错(TooManyConnections)。因此,需要手动设置MySQL的最......
  • 一个Web报表项目的性能分析和优化实践(四):MySQL建立索引,唯一索引和组合索引
    先大致介绍下项目的数据库信息。数据库A:主要存放的通用的表,如User、Project、Report等。数据库B、C、D:一个项目对应一个数据库,而且这几个项目的表是完全一样的。数据库表的特点A中的表:数据量几乎都比较小,比如User表中用户数,顶多也就几百上千。B中的表:X/Y/Z3张表几乎是确定的,Data表......
  • 如何从多个文件夹内转移全部文件(忽略文件夹的结构)(进行复制)(再打包)
    首先,需要用到的这个工具:度娘网盘提取码:qwu2蓝奏云提取码:2r1z 04文件夹里面有只有1个名称为"1"的文件夹,“1”里面有“2”,“2”有“3”,“3”有“4”,从“1”开始,都有5个兔兔的图片,这是“1”里面的文件夹结构,现在要做的就是忽略文件夹结构,提取出全部的兔兔图片合并成一个压缩......
  • 360看图 1.0.0.1010 精简优化版
    修改历史:2023.03.30:自改官方 1.0.0.1010最新正式版本2023.03.20:首个自改官方1.0.0.1002修改内容:基于官方最新版本制作,精简部分非必要文件;禁止软件自动更新;去除所有程序自校验,避免程序报错;其他细节调整下载链接: 自用资源,暂不公开!......
  • 非线性优化理论(求极小值)
    梯度下降法迭代条件:    梯度下降法的缺点:初值的确定影响着迭代的快慢。步长过小可能要好多步才能到达极小值步长过大或则算法多次迭代后,可能导致在两个值之间反复振荡,收敛速度较慢可以迭代的前期使用梯度下降法       牛顿法迭代条件  ......
  • 基于PSO的最优路径优化仿真,带GUI界面,可以设置粒子数目,迭代次数,优化目标,输出最优
    1.算法描述PSO从这种模型中得到启示并用于解决优化问题。PSO中,每个优化问题的解都是搜索空间中的一只鸟。我们称之为“粒子”。所有的粒子都有一个由被优化的函数决定的适应值(fitnessvalue),每个粒子还有一个速度决定他们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空......
  • 基于PSO的最优路径优化仿真,带GUI界面,可以设置粒子数目,迭代次数,优化目标,输出最优
    1.算法描述        PSO从这种模型中得到启示并用于解决优化问题。PSO中,每个优化问题的解都是搜索空间中的一只鸟。我们称之为“粒子”。所有的粒子都有一个由被优化的函数决定的适应值(fitnessvalue),每个粒子还有一个速度决定他们飞翔的方向和距离。然后粒子们就追随当前......