当前位置:   article > 正文

vue代码及打包优化,提高加载速度,减少内存占用_vue程序浏览器包内存不足

vue程序浏览器包内存不足

1.借助工具排查项目中占用包较大的部分,然后相应解决
vue-cli2.0 自带 webpack-bundle-analyzer 工具,可直接执行 npm run build --report,打包结束后会生成如下图视图分析

vue-cli3 需要做相应安装配置后方可使用
(1) 首先安装依赖 npm install webpack-bundle-analyzer --save-dev
(2) 在 vue.config.js 中添加如下配置 

  1. //vue.config.js配置
  2. module.exports = {
  3.   ...  
  4.   chainWebpack: config => {
  5. if (process.env.use_analyzer) {
  6. config
  7. .plugin('webpack-bundle-analyzer')
  8. .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
  9. }
  10. },  
  11.   ...
  12. };
  13. //package.json配置
  14. {
  15. "scripts": {
  16. "serve": "vue-cli-service serve",
  17. "build": "vue-cli-service build",
  18. "analyzer": "cross-env use_analyzer=true npm run build"
  19. },
  20. }
  21. 注:window可能需要先执行 npm install cross-env --save 安装 cross-env

以上配置完成后直接执行 npm run analyzer 就可以了

2. vue-route 加载方式优化
加载方式有多种,这里仅提供2种方式
(1) 路由懒加载

  1. import VueRouter from 'vue-router'
  2. Vue.use(VueRouter)
  3. export default new VueRouter({
  4. routes: [
  5. {
  6. path: '/login', name: 'login', component(resolve) { require(['@pages/login'], resolve) },
  7. meta: { title: '登录' }
  8. },
  9. ...
  10. ]
  11. })

(2) 路由异步加载(模块划分)

  1. import Router from 'vue-router'
  2. Vue.use(Router)
  3. var router = new Router ({
  4. mode: 'history',
  5. base: process.env.BASE_URL,
  6. routes: [
  7. {
  8. path: '/login',
  9. name: 'login',
  10. component: r => require.ensure([], () => r(require('@pages/login.vue')), 'Login'),
  11. meta: { title: '登录' }
  12. },
  13. {
  14. path: '/model',
  15. name: 'model',
  16. component: r => require.ensure([], () => r(require('@pages/model.vue')), 'Model'),
  17. meta: { title: '模块' },
  18. children: [
  19. {
  20. path: '/model1',
  21. name: 'model1',
  22. component: r => require.ensure([], () => r(require('@pages/model1.vue')), 'Model'),
  23. meta: { title: '模块1' }
  24. },
  25. ...
  26. ]
  27. }
  28. ]
  29. })
  30. export default router;

3. 在webpack打包的过程中,将多余文件去掉,如map文件
vue-cli2: build/webpack.base.conf.js
vue-cli3: vue.config.js

productionSourceMap: false,

4. CDN加速
把那些不太可能改动的代码或者库分离出来,继续减小单个chunk-vendors,然后通过CDN加载进行加速加载资源

  1. // vue-cli2 配置
  2. const vuxLoader = require('vux-loader')
  3. module.exports = vuxLoader.merge({
  4. ...
  5. externals: {
  6. 'vue': 'Vue',
  7. 'vue-router': 'VueRouter',
  8. 'mint-ui': 'MINT',
  9. "echarts": "echarts",
  10. 'ali-oss': 'OSS',
  11. },
  12. ...
  13. })
  14. // vue-cli3 配置
  15. module.exports = {
  16. ...
  17. configureWebpack: config => {
  18. config.externals: {
  19. 'vue': 'Vue',
  20. 'vue-router': 'VueRouter',
  21. 'mint-ui': 'MINT',
  22. "echarts": "echarts",
  23. 'ali-oss': 'OSS',
  24. },
  25. ...
  26. },
  27. ...
  28. }

注意:CDN本身的加载也会影响首屏加载速度(特别是对于国外的网站),可查找相关CDN提供网站(如https://www.bootcdn.cn/http://staticfile.org/ 等),可对比斟酌后使用;

好用分享:影响首屏加载速度的因素很多,对于网络和请求方面,可通过抓包工具(如Charles)查看具体影响的位置和原因(如cdn,js,css,接口等)

5. 服务器和webpack打包同时配置Gzip

Gzip是GNU zip的缩写,顾名思义是一种压缩技术。它将浏览器请求的文件先在服务器端进行压缩,然后传递给浏览器,浏览器解压之后再进行页面的解析工作。在服务端开启Gzip支持后,我们前端需要提供资源压缩包,通过Compression-Webpack-Plugin插件build提供压缩
(1) 安装插件
webpack版本为3.x时,需要安装低版本插件: npm install --save-dev compression-webpack-plugin@1.1.12 ,否则会报错
webpack版本为4.x以上,可直接安装 npm install --save-dev compression-webpack-plugin
(2) 代码配置

  1. // vue-cli2
  2. const vuxLoader = require('vux-loader')
  3. const CompressionWebpackPlugin = require('compression-webpack-plugin');
  4. module.exports = vuxLoader.merge({
  5. ...
  6. },{
  7. plugins: [
  8. 'vux-ui',
  9. new CompressionWebpackPlugin({
  10. asset: '[path].gz[query]',
  11. algorithm: 'gzip',
  12. test: new RegExp('\\.(' + config.build.productionGzipExtensions.join('|') + ')$'),
  13. threshold: 10240,
  14. minRatio: 0.8,
  15. deleteOriginalAssets: false //是否删除源文件(默认)
  16. })
  17. ]
  18. })
  19. 注意:在config/index.js中需要配置
  20. productionGzip: true,
  21. productionGzipExtensions: ['js', 'css'],
  22. // vue-cli3
  23. const CompressionWebpackPlugin = require('compression-webpack-plugin');
  24. const productionGzipExtensions = ["js", "css"];
  25. module.exports = {
  26. ....
  27. configureWebpack: config => {
  28. config.plugins = ....,
  29. config.plugins.push(new CompressionWebpackPlugin({
  30. filename: "[path].gz[query]",
  31. algorithm: 'gzip',
  32. test: new RegExp("\\.(" + productionGzipExtensions.join("|") + ")$"), //匹配文件名
  33. threshold: 10240,
  34. minRatio: 0.8,
  35. deleteOriginalAssets: false //是否删除源文件(默认)
  36. }))
  37. }
  38. }

此方向需要服务器端配合完成相关配置才能生效,参照 https://blog.csdn.net/qq_37653449/article/details/85101227 (根据自身需要做相应配置)

更多优化方式参照:https://juejin.im/post/5d9ff02df265da5baf4104d9

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/535552
推荐阅读
相关标签
  

闽ICP备14008679号