vue-cli4首次加载速度优化

GZIP压缩

GZIP压缩有动态跟静态两种
可以将由前端打包GZIP,通过 gzip_static:on会寻找以.gz结尾的文件,直接返回,不会占用cpu进行压缩,如果找不到则不进行压缩

nginx

  #开启和关闭gzip模式
    gzip on|off;
    
    #gizp压缩起点,文件大于1k才进行压缩
    gzip_min_length 1k;
    
    # gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间
    gzip_comp_level 5;
    
    # 进行压缩的文件类型。
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript ;
    
    #nginx对于静态文件的处理模块,开启后会寻找以.gz结尾的文件,直接返回,不会占用cpu进行压缩,如果找不到则不进行压缩
    gzip_static on|off
    
    # 是否在http header中添加Vary: Accept-Encoding,建议开启
    gzip_vary on;

    # 设置压缩所需要的缓冲区大小,以4k为单位,如果文件为7k则申请2*4k的缓冲区 
    gzip_buffers 2 4k;

    # 设置gzip压缩针对的HTTP协议版本
    gzip_http_version 1.1;

vue.config.js

// npm i -D compression-webpack-plugin
const CompressionPlugin = require('compression-webpack-plugin')

configureWebpack: {
/* 打包时开启GZIP压缩 */
  plugins: [
    new CompressionPlugin({
          algorithm: 'gzip', // 使用gzip压缩
          test: /\.js$|\.html$|\.css$/, // 匹配文件名
          filename: '[path].gz[query]', // 压缩后的文件名(保持原文件名,后缀加.gz)
          minRatio: 1, // 压缩率小于1才会压缩
          threshold: 10240, // 对超过10k的数据压缩
          deleteOriginalAssets: false, // 是否删除未压缩的源文件,谨慎设置,如果希望提供非gzip的资源,可不设置或者设置为false(比如删除打包后的gz后还可以加载到原始资源文件)
    }),
  ]
}

CDN

const isProd = process.env.NODE_ENV === 'production'
const cdn = {
  externals: {
    // 业务使用示例 => key:包名  value:库文件对应的全局对象字符串=>可以冲源码最后获取
    vue: 'Vue',
    'vue-router': 'VueRouter',
    vuex: 'Vuex',
    axios: 'axios',
    'ant-design-vue': 'antd',
    'vue-ls': 'VueStorage',
  },
  // import的css不要放进来,externals无法过滤掉
  css: [],
  js: [
    '//unpkg.com/[email protected]/dist/vue.min.js',
    '//unpkg.com/[email protected]/dist/vue-router.min.js',
    '//unpkg.com/[email protected]/dist/vuex.min.js',
    '//unpkg.com/[email protected]/dist/axios.min.js',
    '//unpkg.com/[email protected]/dist/antd.min.js',
    '//unpkg.com/[email protected]/dist/vue-ls.min.js',
  ]
};

configureWebpack: config => {
  config.externals = isProd ? cdn.externals : {}
},
chainWebpack: config => {
    config.plugin('html').tap(args => {
            // html中添加cdn
            args[0].cdn = cdn
            return args
          })
}

index.html




  
  
  
  
  <%= htmlWebpackPlugin.options.title %>
  
  
  
  <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.css) { %>
  
  <% } %>


  
  
<% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.js) { %> <% } %>

你可能感兴趣的:(vue.js,vue-cli,前端)