vue项目打包优化策略

使用vue-cli部署生产包时,发现资源包很大,打包后的vendor.js达到了1.4M,这已经很大了,而且会影响到首屏加载。那么,怎么优化呢?

1.组件按需加载

这是首先可以优化的点。如果频繁使用了第三方组件/UI库,如我的项目中经常同时使用了 element-ui, mint-ui,echarts等组件库,如果全部引入,项目体积非常大,这时可以按需引入组件。

示例如下:

1.1 element-ui

首先,安装 babel-plugin-component:

npm install babel-plugin-component -D

然后,将.babelrc 修改为:

{"presets": [["es2015", { "modules": false }]],"plugins": [["component",{"libraryName": "element-ui","styleLibraryName": "theme-chalk"}]]
}

然后引入部分组件,这样一来,就不需要引入样式了,插件会帮我们处理。

// main.js
import Vue from 'vue'
import { Dialog, Loading } from 'element-ui'Vue.use(Dialog)
Vue.use(Loading.directive)
Vue.prototype.$loading = Loading.service
// 然后正常使用组件

1.2 mint-ui

由于mint-ui是element-ui的移动端组件,所以它的使用和引入几乎和element-ui一样。

首先,安装 babel-plugin-component:

npm install babel-plugin-component -D

然后,将.babelrc 修改为:

{"presets": [["es2015", { "modules": false }]],"plugins": [["component", [{"libraryName": "mint-ui","style": true}]]]
}

然后引入部分组件

// main.js
import Vue from 'vue'
import { Toast, MessageBox } from 'element-ui'Vue.use(Dialog)
Vue.use(Loading.directive)
Vue.prototype.$loading = Loading.service
// 然后正常使用组件

注意,element-ui和mint-ui不能同时在.babelrc中进行插件设置,这种情况下,依然可以按需引入,但是不要在.babelrc中配置,在引入的地方同时引入css即可。

1.3 echarts

首先安装babel-plugin-equire

npm i babel-plugin-equire -D

然后,在.babelrc文件中添加该插件

{"plugins": [// other plugins..."equire"]
}

创建一个js文件

// echarts.js
// eslint-disable-next-line
const echarts = equire(['tooltip','candlestick','bar','line','axisPointer','legend','grid'
])
export default echarts// 业务组件,引入echarts
import echarts from '@/assets/lib/echarts'
// 使用与以前一样

按需加载echarts

解决vue-cli首屏加载慢的问题

2.路由懒加载

这里需要一个插件

vue-router官方推荐syntax-dynamic-import插件,不过它要求同时安装@bable/core^7.0.0,如果你安装了babel-core6,是会有版本冲突的。我的做法如下

npm install babel-plugin-syntax-dynamic-import --save-dev(^6.18.0)

// router.js
const login = () => import('@/components/login')
const router = new VueRouter({routes: [{ path: '/login', component: login }]
})

还有一种魔法注释用法

有时候我们想把某个路由下的所有组件都打包在同个异步块 (chunk) 中。只需要使用 命名 chunk,一个特殊的注释语法来提供 chunk name (需要 Webpack > 2.4)。

const Foo = () => import(/* webpackChunkName: "group-foo" */ './Foo.vue')

3.异步组件

如果组件在页面加载时不需要,只在调用时用到,这时可以使用异步组件的写法。仅仅是引入和组件注册写法不同

// template
<test v-if="showTest"></test>// scriptcomponents: {test: () => import('./test') // 将组件异步引入,告诉webpack,将该部分代码分割打包},methods:{clickTest () {this.showTest = !this.showTest}}

4.图片的压缩合并

无损压缩图片:https://tinypng.com/

如有可能,将图片制作成精灵图

5.CDN加速

  • 在index.html中引入cdn资源

    ...
    <body>

    <div id="app">
    </div>
    <!-- built files will be auto injected -->
    <script src="https://cdn.bootcss.com/vue/2.5.2/vue.min.js"></script>
    <script src="https://cdn.bootcss.com/vue-router/3.0.1/vue-router.min.js"></script>
    <script src="https://cdn.bootcss.com/vuex/3.0.1/vuex.min.js"></script>
    <script src="https://cdn.bootcss.com/vue-resource/1.5.1/vue-resource.min.js"></script>

    </body>
    ...

  • 修改 build/webpack.base.conf.js

    module.exports = {
    context: path.resolve(__dirname, '../'),
    entry: {

    app: './src/main.js'

    },
    externals:{

    'vue': 'Vue',
    'vue-router': 'VueRouter',
    'vuex':'Vuex',
    'vue-resource': 'VueResource'

    },
    ...
    }

  • 修改src/main.js src/router/index.js 注释掉import引入的vue,vue-resource

    // import Vue from 'vue'
    // import VueResource from 'vue-resource'
    // Vue.use(VueResource)

6.压缩代码

vue-cli已经使用UglifyJsPlugin 插件来压缩代码,可以设置成如下配置:

new webpack.optimize.UglifyJsPlugin({compress: {warnings: false,drop_console: true,pure_funcs: ['console.log']},sourceMap: false
})

其中sourceMap: false是禁用除错功能。

如果设为true,在部署包中会生成.map结尾的js文件。它用于在代码混淆压缩的情况下仍可进行调试。这个功能虽好,但会大大增加整体资源包的体积,所以将其禁用。

vue项目打包优化策略相关推荐

  1. 记一次vue项目打包优化

    目录 前言 一.优化静态资源 二.vue项目打包体积优化 1.路由懒加载 2.抽离第三方js库 3.小结 三.代码优化 1.减少页面的重排和重绘 2.多设置key值 四.服务器优化 1.nginx服务 ...

  2. Vue Cli3 项目打包优化

    1.项目优化 实现步骤: 清除生产环境中的console.log语句 生成打包报告,根据报告优化项目 第三方库启用CDN 路由懒加载 首页内容定制 2.执行build 2.1 清除生产环境中的cons ...

  3. 前端Vue项目打包性能优化方案

    文章目录 一.前言 二.优化方案 1丶路由懒加载(代码分割) 2丶第三方插件按需加载 3丶常用插件库使用CDN加速 4.gzip压缩 5.打包不生成map文件 三.工具推荐 可视化分析包大小 总结 一 ...

  4. webpack4.0打包优化策略(二)

    打包优化策略 webpack4.0打包优化策略(一) webpack4.0打包优化策略(二) webpack4.0打包优化策略(三) 区分开发和生产环境 通常我们在开发网页时需要区分构建环境 开发环境 ...

  5. Vue 项目性能优化方案

    前言 Vue 框架通过数据双向绑定和虚拟 DOM 技术,帮我们处理了前端开发中最脏最累的 DOM 操作部分, 我们不再需要去考虑如何操作 DOM 以及如何最高效地操作 DOM:但 Vue 项目中仍然存 ...

  6. 前端Vue 项目性能优化

    前言 Vue 框架通过数据双向绑定和虚拟 DOM 技术,帮我们处理了前端开发中最脏最累的 DOM 操作部分, 我们不再需要去考虑如何操作 DOM 以及如何最高效地操作 DOM:但 Vue 项目中仍然存 ...

  7. vue引入cdn Vue 优化Vue引入 cdn vue cdn Vue优化引入CDN vue 项目 CDN优化

    vue引入cdn Vue 优化Vue引入 cdn vue cdn Vue优化引入CDN vue 项目 CDN优化 未引入 CDN前 main.js 更改CDN方式引入 在 vue.config 中引入 ...

  8. 快速解决Vue项目打包后文件过大问题

    快速解决Vue项目打包后文件过大问题 为什么打包后文件过大? 如何快速解决 一.路由懒加载[使用es6提案的import()方式] 二.CDN引入 为什么打包后文件过大? 移动app项目,使用vue- ...

  9. Vue项目打包步骤详细流程,新手必需掌握的知识点!

    Vue项目打包步骤 Vue项目打包流程介绍 生成打包报告 修改默认配置 指定打包入口 通过external加载外部CDN资源 优化组件库的打包 首页内容定制 路由懒加载 Vue项目打包流程介绍 新手必 ...

最新文章

  1. STL nth_element
  2. C#的6种常用集合类大比拼【月儿原创】
  3. 从ReentrantLock的实现看AQS的原理及应用
  4. 使用Heroku部署Rails应用
  5. 20179214 2017-2018 2《网络攻防实践》第七周学习总结
  6. mysql+keepalived 双主热备高可用
  7. Android如何分析native代码,使用android-ndk-profiler对native代码进行性能分析
  8. 把Python函数转换成能在SQL语句中调用的函数
  9. SuperSocket架构设计示意图【转】
  10. 外部SRAM实验,让STM32的外部SRAM操作跟内部SRAM一样(转)
  11. 关于NDK及安装使用
  12. 安卓模拟器刷小米系统_小米5x原生rom系统刷机-小米5X MIUI10刷机包下载V9.7.21最新版-西西软件下载...
  13. 74xx系列芯片说明
  14. baidu.com 百度域名被劫持怎么办 baidu.yxsc33.com
  15. 【分布式】分布式系统概述
  16. 282.软件体系结构的风格与模式
  17. Android 10 精简系统
  18. TELNET协议笔记
  19. 用c语言如何在数字前自动补0
  20. 《FLUENT 14.0超级学习手册》——第2章 FLUENT软件介绍2.1 FLUENT软件特点简介

热门文章

  1. 第 24 章 状态模式
  2. day16【前台】项目展示
  3. 一次redis集群连接数占满问题的排查
  4. 限制会话id服务端不共享_【干货分享】Web安全漏洞深入分析及其安全编码
  5. php dom xml解析,PHP使用DOM解析XML
  6. 带格式文本html 直接复制粘贴,通过JS将带格式的文本复制到剪贴版的两种方法...
  7. 远播教育集团PHP面试题,远播教育金牌升学规划师陈煜雯:如何规划孩子的升学?【摇号】...
  8. 1688.比赛中的配对次数-LeetCode
  9. python爬虫十二种方法_Python爬虫的N种姿势
  10. 低压抽屉柜常见故障处理方法_传真机常见故障如何处理 传真机常见故障处理方法【详解】...