随着前端各种框架的日益完善,一些基本的性能优化和加载优化都已经很完善了,但是有些必要的优化还是得开发者自己去做。vue.js是一个比较流行的前端框架,与react.js、angular.js相比来说,vue.js入手曲线更加流畅,不管掌握多少都可以快速上手。但是单页面应用也都有其弊病,有时候首屏加载慢的让人捏舌。今天我们以vue cli2.x来说一说如何行之有效的缓解此问题!以项目为例,输入网址以后会出现十几秒的空白页,如果是后台管理系统还能接受,嵌套式的H5面对的是C端用户,产品肯定是无法接受的。仔细分析了下,主要是打包后的app.js太大,以及我们引用的一些插件安装包加载比较慢,在网上搜了很多解决加载慢的方案,最终优化的时间移动端H5页面2秒多,后台管理系统5秒多。下面,将自己在平时项目上所做的优化策略实践分享于大家。
方案一、路由懒加载
- {
- path: '/home',
- name: 'home',
- component: r => require.ensure([], function (require) {
- r(require('views/hls/Home/Home.vue'))
- }, 'home'),
- meta: {
- title: '首页',
- keepAlive: false,
- hasTop: true,
- hasBottom: true
- }
- }
- 复制代码
复制代码 方案二、组件按需加载(代码分割)
1. 首先引入按需加载工具 babel-plugin-import babel-plugin-import是babel它会在编译过程中将 import 的写法自动转换为按需引入的方式。 - npm install babel-plugin-import --save-dev
复制代码
2. 在项目根目录创建.babelrc文件并配置按需加载内容:
- {
- "plugins": [["import", {
- "libraryName": "iview",
- "libraryDirectory": "src/components"
- }]]
- }
复制代码
3. webpack配置: - // webpack.config.js
- module.exports = function ({ production = false, development = false }) {
- ...
- output: {
- path: path.resolve(__dirname, 'build'),
- filename: 'static/js/[name].[contenthash:8].js', // 主文件分割出的文件命名
- chunkFilename: 'static/js/[name].[contenthash:8].chunk.js', // splitChunks 分割出的文件命名
- },
-
- optimization: {
- minimize: true,
- ...
- splitChunks: {
- chunks: 'all',
- cacheGroups: {
- default: false,
- vendors: false,
- // 多页面应用,或者 webpack import() 多个 chunk 文件中,有 import 其他模块两次或者多次时,会打包生成 common
- common: {
- chunks: "all",
- minChunks: 2,
- name: 'common',
- enforce: true,
- priority: 5
- },
- // node_modules 中的公共模块抽离
- vendor: {
- test: /[\\/]node_modules[\\/]/,
- chunks: 'initial',
- enforce: true,
- priority: 10,
- name: 'vendor'
- },
- // @materual-ui
- material: {
- name: 'chunk-material',
- priority: 20, // 优先级高于 vendor
- test: /[\\/]node_modules[\\/]_?@material-ui(.*)/
- },
- }
- },
- runtimeChunk: { // 运行时代码(webpack执行时所需的代码)从主文件中抽离
- name: entrypoint => `runtime-${entrypoint.name}`,
- },
- },
- })
复制代码
|