通过以上的基本配置,项目已经符合我们工作需要了,但是在工作过程中会发现随着项目的集成度越来越高,业务越来越多。出现了加载慢和打包文件过大的问题。导致我们页面白屏时间过长,用户体验不友好。那么如果你感兴趣的话,可以进行以下的配置,可以大大大大大的减小体积和加载速度。在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项目搭建配置以及性能优化相关推荐

  1. ssm如何支持热部署_最新Spring Boot实战文档推荐:项目搭建+配置+SSM整合

    在Spring Boot项目中,正常来说是不存在XML配置,这是因为Spring Boot不推荐使用XML,注意,排不支持,Spring Boot推荐开发者使用Java配置来搭建框架, Spring ...

  2. springboot做系统所需的软硬件环境_最新Spring Boot实战文档推荐:项目搭建+配置+SSM整合...

    在Spring Boot项目中,正常来说是不存在XML配置,这是因为Spring Boot不推荐使用XML,注意,排不支持,Spring Boot推荐开发者使用Java配置来搭建框架, Spring ...

  3. 职场中接手了老项目,如何做性能优化?

    作为一名程序员,在工作中大概率都会遇到接手老项目的情况. 跳槽从一个坑跳到另一个坑,接手老项目 同事内部活水了,他手上的项目都交接给你 团队"核心"成员要上新项目or重点项目了,团 ...

  4. java配置中心开源项目_配置中心搭建(spring-cloud-config-server)

    1.github创建配置库 2.配置服务端 ①创建项目 ②导入jar org.springframework.boot spring-boot-starter-web org.springframew ...

  5. springmvc+mongodb+maven 项目搭建配置

    操作步骤我就不再细化了 项目能运行,测试过了,先上配置,另一篇文章上代码,点击下载源码 项目结构 pom.xml <project xmlns="http://maven.apache ...

  6. IDEA环境项目搭建配置

  7. python环境变量配置_?Python项目读取配置的正确姿势

    读取配置是大部分python应用都会面临的问题,例如应用运行时需要读取数据库的配置,存储文件需要知道文件路径配置,应用在不同的环境的配置也不尽相同.因此,配置管理是一个必不可少的问题,配置读取的方式一 ...

  8. history模式 nginx配置_Vue history模式Nginx配置

    vue开发使用history模式的时候Nginx相关的配置有如下两种: 1.此种配置直接使用的根域名,没有其他的二级路径,因此root直接指向目标文件夹,即包含index.html的文件夹路径 ser ...

  9. devserver配置_vue.config.js的配置

    module.exports = {// 基本路径baseUrl: "./",// 输出文件目录outputDir: "service/dist",// esl ...

最新文章

  1. python字符串去重保持原顺序_python实现文本去重且不打乱原本顺序
  2. 谈谈你对摩尔定律的理解,摩尔定律当前还是继续有效的吗?
  3. Codeforces Round #183 (Div. 2) C
  4. 10道C++输出易错笔试题收集
  5. 五种常用的异常值检测方法(均方差、箱形图、DBScan 聚类、孤立森林、Robust Random Cut Forest)
  6. cocos2dx基础篇(9)——触碰事件Touch
  7. stanford-chinese-corenlp-yyyy-MM-dd-models.jar not exists解决
  8. vert.x_选择Vert.x的3个理由
  9. java反序列化异常接不到_由Java对象反序列化异常想到的
  10. Redis的SETNX
  11. Spring Boot学习总结(4)——使用Springloaded进行热部署
  12. Qt引用Boost问题
  13. linux 内核移植(七)――rest_init函数分析
  14. Linux 常用快捷键大全
  15. 举例说明儿化音的作用_六年级语文下学期复习资料
  16. Html中的span与a的区别,a标签和span标签的区别
  17. Shell脚本自动化部署实战(一)
  18. 微信公众号 JS接口安全域名 配置
  19. 热爱3D游戏建模,副业兼职外包可以做到什么程度?
  20. python学习笔记---函数【廖雪峰】

热门文章

  1. 线段树——最大数——洛谷——1198
  2. Java中的装箱和拆箱剖析
  3. Angular - ng-repeat高级用法
  4. 数组 最大差值_【每日算法Day 97】经典面试题:求两个数组最小差
  5. 数据库-MySQL-搭建服务器
  6. redis查看key的过期时间_面试官:Redis过期后key是怎么样清理的?
  7. 3场直播丨达梦DM8数据库安装部署初体验、新基建下的国产数据库应用和发展趋势、Oracle外部表创建与使用...
  8. 单图说TDSQL;OceanBase 2.2 事务引擎核心功能;穿云箭2.0版发布;RMAN DUPLICATE配置19C DG;外键上有无索引的影响;MySQL8.0 索引新功能;GaussDB C
  9. 催人泪下!做技术打铁还需自身硬
  10. OpenCV萌新福音:易上手的数字识别实践案例