alias cli3 配置_vue-cli3项目搭建配置以及性能优化
通过以上的基本配置,项目已经符合我们工作需要了,但是在工作过程中会发现随着项目的集成度越来越高,业务越来越多。出现了加载慢和打包文件过大的问题。导致我们页面白屏时间过长,用户体验不友好。那么如果你感兴趣的话,可以进行以下的配置,可以大大大大大的减小体积和加载速度。在master分支是没有进行优化的,如果需要看优化代码可以到另外一个分支。所以在页面引入的代码都是当前页面需要的执行代码,可以往下面几个方法进行处理。
js,css代码的最小化压缩和分割
js,css代码公用代码提取, 按需引入(cdn加载)
图片文件的压缩
gzip的压缩
去除console.log
1.js,css代码的最小化压缩和分割
首先,我们先对js文件进行配置以达到压缩效果,先看一下没有配置代码情况,整个app.js 的文件是2.8M(因为是初始项目),但是如果页面一多,就不只这个数了。
我们会通过chainWebpak来处理. 在优化前, 看下相关文件的响应代码: 看下app.js文件的返回代码:代码如下:
在vue.config.js文件中加入,run以下后查看app.js情况,文件会变小(由于初始项目体积小,看不出多大区别)。
module.exports ={
chainWebpack: config=>{
config.optimization.minimize(true);
}
}
分割代码,相应的文件中存入分割后的代码。
module.exports ={
chainWebpack: config=>{
config.optimization.minimize(true);
config.optimization.splitChunks({
chunks:'all'})
}
}
加入以上代码后,分成了2个文件,最大的只有2.7M了,这样可以分成多个进行加载,可以达到最快化,但是一定要平衡文件大小的和分割出来的文件数量的平衡, 数量多了, 请求也会变慢的, 影响性能.可以根据项目的进行设置,具体可参考官方文档的详细说明。
2.js,css代码公用代码提取, 按需引入(CDN加载)
把公用代码提取出来,然后采用使用免费的cdn资源进行加载。在项目中我们主要是引入引入不同的模块库才会导致文件较大,那么是否可以把这些文件进一步处理,答案是可以的,比如vue, vuex, vue-router, element-ui等公共资源库。利用webpack我们可以使用externals参数来配置:
在vue.config.js文件:
module.exports ={
chainWebpack: config=>{//压缩代码
config.optimization.minimize(true);//分割代码
config.optimization.splitChunks({
chunks:'all'})//用cdn方式引入
config.externals({'vue': 'Vue','vuex': 'Vuex','vue-router': 'VueRouter','mint-ui': 'MINT', //需用MINT
'axios': 'axios'})
}
}
index.html加入CDN地址,注意引入的时候要写在body里面,否则会报错。
mint-ui样式通过CDN引入。然后商储mian.js文件的 import 'mint-ui/lib/style.css' (全局引入模式才有)
重新运行项目, 看看效果,已经大大的减小了很多,到了k级别了:
提取css代码:
因为js会动态的加载出css,所以js文件包会比较大,那么需要提取css代码到文件. 这里我们只需要将css配置一下:
module.exports ={
css: {
extract:true}
}
3.图片文件的压缩
图片文件大于在webpack设定的值时,我们可以对其进行压缩在进行引入,安利给大家一个压缩图片的网站https://tinypng.com/,它可以批量的压缩图片又不会失真,压缩比相对较大。可以对图片进行有效压缩。
4.gzip的压缩
如果后台有对前端的代码进行gzip压缩的话,那么就不需要进行压缩了,后台自己配置就可以。如果后台不具备这种情况那么我们可以利用compression-webpack-plugin插件可以帮助我们进行gzip压缩:
安装依赖:
npm install --save-dev compression-webpack-plugin
然后引入相关代码:
const CompressionWebpackPlugin = require('compression-webpack-plugin')
const compress= newCompressionWebpackPlugin(
{
filename: info=>{return`${info.path}.gz${info.query}`
},
algorithm:'gzip',
threshold:10240,
test:newRegExp('\\.(' +['js'].join('|') +
')$'),
minRatio:0.8,
deleteOriginalAssets:false}
)
module.exports={
devServer: {
before(app, server) {
app.get(/.*.(js)$/, (req, res, next) =>{
req.url= req.url + '.gz';
res.set('Content-Encoding', 'gzip');
next();
})
}
}
configureWebpack: {
plugins: [compress]
}
重新run一遍,出现了意向不到的结果了。又原来的2.8M转化为250+kb了,缩小了11倍以上。重大突破
6.去除console.log
正常情况下我们会在开发环境进行console调试,但是如果不删除,过多会出现内存泄漏的情况,那么我们可以在正式环境的时候就把它给干掉,实现方法如下:
方法一:
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
module.exports={
configureWebpack: config=>{if(IS_PROD) {
const plugins=[];
plugins.push(newUglifyJsPlugin({
uglifyOptions: {
compress: {
warnings:false,
drop_console:true,
drop_debugger:false,
pure_funcs: ['console.log']//移除console
}
},
sourceMap:false,
parallel:true})
);
config.plugins=[
...config.plugins,
...plugins
];
}
}
}
方法二:使用babel-plugin-transform-remove-console插件
npm i --save-dev babel-plugin-transform-remove-console
在babel.config.js中配置
const plugins =[];if(['production', 'prod'].includes(process.env.NODE_ENV)) {
plugins.push("transform-remove-console")
}
module.exports={
presets: [["@vue/app",{"useBuiltIns": "entry"}]],
plugins: plugins
};
alias cli3 配置_vue-cli3项目搭建配置以及性能优化相关推荐
- ssm如何支持热部署_最新Spring Boot实战文档推荐:项目搭建+配置+SSM整合
在Spring Boot项目中,正常来说是不存在XML配置,这是因为Spring Boot不推荐使用XML,注意,排不支持,Spring Boot推荐开发者使用Java配置来搭建框架, Spring ...
- springboot做系统所需的软硬件环境_最新Spring Boot实战文档推荐:项目搭建+配置+SSM整合...
在Spring Boot项目中,正常来说是不存在XML配置,这是因为Spring Boot不推荐使用XML,注意,排不支持,Spring Boot推荐开发者使用Java配置来搭建框架, Spring ...
- 职场中接手了老项目,如何做性能优化?
作为一名程序员,在工作中大概率都会遇到接手老项目的情况. 跳槽从一个坑跳到另一个坑,接手老项目 同事内部活水了,他手上的项目都交接给你 团队"核心"成员要上新项目or重点项目了,团 ...
- java配置中心开源项目_配置中心搭建(spring-cloud-config-server)
1.github创建配置库 2.配置服务端 ①创建项目 ②导入jar org.springframework.boot spring-boot-starter-web org.springframew ...
- springmvc+mongodb+maven 项目搭建配置
操作步骤我就不再细化了 项目能运行,测试过了,先上配置,另一篇文章上代码,点击下载源码 项目结构 pom.xml <project xmlns="http://maven.apache ...
- IDEA环境项目搭建配置
- python环境变量配置_?Python项目读取配置的正确姿势
读取配置是大部分python应用都会面临的问题,例如应用运行时需要读取数据库的配置,存储文件需要知道文件路径配置,应用在不同的环境的配置也不尽相同.因此,配置管理是一个必不可少的问题,配置读取的方式一 ...
- history模式 nginx配置_Vue history模式Nginx配置
vue开发使用history模式的时候Nginx相关的配置有如下两种: 1.此种配置直接使用的根域名,没有其他的二级路径,因此root直接指向目标文件夹,即包含index.html的文件夹路径 ser ...
- devserver配置_vue.config.js的配置
module.exports = {// 基本路径baseUrl: "./",// 输出文件目录outputDir: "service/dist",// esl ...
最新文章
- python字符串去重保持原顺序_python实现文本去重且不打乱原本顺序
- 谈谈你对摩尔定律的理解,摩尔定律当前还是继续有效的吗?
- Codeforces Round #183 (Div. 2) C
- 10道C++输出易错笔试题收集
- 五种常用的异常值检测方法(均方差、箱形图、DBScan 聚类、孤立森林、Robust Random Cut Forest)
- cocos2dx基础篇(9)——触碰事件Touch
- stanford-chinese-corenlp-yyyy-MM-dd-models.jar not exists解决
- vert.x_选择Vert.x的3个理由
- java反序列化异常接不到_由Java对象反序列化异常想到的
- Redis的SETNX
- Spring Boot学习总结(4)——使用Springloaded进行热部署
- Qt引用Boost问题
- linux 内核移植(七)――rest_init函数分析
- Linux 常用快捷键大全
- 举例说明儿化音的作用_六年级语文下学期复习资料
- Html中的span与a的区别,a标签和span标签的区别
- Shell脚本自动化部署实战(一)
- 微信公众号 JS接口安全域名 配置
- 热爱3D游戏建模,副业兼职外包可以做到什么程度?
- python学习笔记---函数【廖雪峰】
热门文章
- 线段树——最大数——洛谷——1198
- Java中的装箱和拆箱剖析
- Angular - ng-repeat高级用法
- 数组 最大差值_【每日算法Day 97】经典面试题:求两个数组最小差
- 数据库-MySQL-搭建服务器
- redis查看key的过期时间_面试官:Redis过期后key是怎么样清理的?
- 3场直播丨达梦DM8数据库安装部署初体验、新基建下的国产数据库应用和发展趋势、Oracle外部表创建与使用...
- 单图说TDSQL;OceanBase 2.2 事务引擎核心功能;穿云箭2.0版发布;RMAN DUPLICATE配置19C DG;外键上有无索引的影响;MySQL8.0 索引新功能;GaussDB C
- 催人泪下!做技术打铁还需自身硬
- OpenCV萌新福音:易上手的数字识别实践案例