vue 优化

193 阅读1分钟

gzip压缩

下载compression-webpack-plugin包

npm install compression-webpack-plugin --save-dev 

vue.config.js 文件里面引入 compression-webpack-plugin包并做相应的配置

// vue.config.js

const CompressionWebpackPlugin = require('compression-webpack-plugin')

...
const prodPlugins = []
if (process.env.NODE_ENV !== 'development') {
  prodPlugins.push(new CompressionWebpackPlugin({
    test: /\.js$|\.html$|\.css/, // 匹配文件名
    threshold: 10240, // 对超过10k的数据压缩
    deleteOriginalAssets: false // 不删除源文件
  }))
}

...

module.exports = {
  ...
  configureWebpack: {
    plugins: [
      ...prodPlugins
    ]
  }
  ...
}

// yaml文件中添加


location / {
  root /opt/public/src;
  add_header Cache-Control no-store;


// add 
  gzip on;
  gzip_static on;
  gzip_http_version 1.1;
  gzip_comp_level 3;
  gzip_min_length 10k;
  gzip_types text/plain application/json application/x-javascript application/css application/xml application/xml+rss text/javascript application/x-httpd-php image/jpeg image/gif image/png image/x-ms-bmp font/woff text/css;

  // add end

  index index.html;
  try_files $uri $uri/ /index.html =404;
}


白屏优化

下载vue-skeleton-webpack-plugin 骨架屏

npm install vue-skeleton-webpack-plugin --save-dev 

vue.config.js 文件里面引入 vue-skeleton-webpack-plugin 包并做相应的配置

// vue.config.js
const SkeletonWebpackPlugin = require('vue-skeleton-webpack-plugin')

module.exports = {
  ...
  configureWebpack: {
    plugins: [
      new SkeletonWebpackPlugin({
        webpackConfig: {
          entry: {
            app: path.join(__dirname, 'src/components/skeleton/index.js') // 
          }
        }
      })
    ]
  }
  ...
}

// src/components/skeleton/index.js
import Vue from 'vue'
import Skeleton from '@/components/skeleton/index.vue'

export default new Vue({
  components: {
    Skeleton
  },
  render: h => h(Skeleton)
})
// @/components/skeleton/index.vue

<template>
<div>放置动画...</div>
</template>

开发环境优化编译速度

下载babel-plugin-dynamic-import-node包

npm install babel-plugin-dynamic-import-node --save-dev 

babel.config.js 文件里面配置

module.exports = {
  ...
  'env': {
    'development': {
      'plugins': ['dynamic-import-node']
    }
  },
  ...
}

element按需引入

官网文档很详细,直接看文档

vxe-table 按需引入

下载babel-plugin-import

npm install babel-plugin-import --save-dev
// babel.config.js
module.exports = {
  'plugins': [
    ...
    [
      'import',
      {
        'libraryName': 'vxe-table',
        'style': true // 样式是否也按需加载
      }
    ],
    ...
  ]
}

// main.js

import 'xe-utils'
import '@/utils/plugins/table'

// @/utils/plugins/table
import Vue from 'vue'
import XEUtils from 'xe-utils'

import {
  VXETable,
  Table,
  Icon,
  Column,
  Header,
  Footer,
  Filter,
  Edit,
  Menu,
  Export,
  Keyboard,
  Validator

} from 'vxe-table'

import zhCN from 'vxe-table/lib/locale/lang/zh-CN'

VXETable.setup({
  i18n: key => XEUtils.get(zhCN, key)
})

// 先安装依赖模块
Vue.use(Icon)
Vue.use(Column)
Vue.use(Header)
Vue.use(Footer)
Vue.use(Filter)
Vue.use(Edit)
Vue.use(Menu)
Vue.use(Export)
Vue.use(Keyboard)
Vue.use(Validator)

// 再安装核心库
Vue.use(Table)