沐鳴註冊平台_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/vue@2.6.12/dist/vue.min.js',
    '//unpkg.com/vue-router@3.4.9/dist/vue-router.min.js',
    '//unpkg.com/vuex@3.5.1/dist/vuex.min.js',
    '//unpkg.com/axios@0.21.0/dist/axios.min.js',
    '//unpkg.com/ant-design-vue@1.7.2/dist/antd.min.js',
    '//unpkg.com/vue-ls@3.2.1/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

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width,initial-scale=1.0">
  <link rel="icon" href="<%= BASE_URL %>favicon.ico">
  <title><%= htmlWebpackPlugin.options.title %></title>
  <link rel="stylesheet" href="//at.alicdn.com/t/font_1825329_krt0759dhsh.css" />
  <!-- htmlWebpackPlugin.options.cdn 在vue.config.js內配置 -->
  <!-- 使用CDN的CSS文件 -->
  <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.css) { %>
  <link rel="stylesheet" href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" />
  <% } %>
</head>
<body>
  <noscript>
    <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled.
      Please enable it to continue.</strong>
  </noscript>
  <div id="app"></div>
  <!-- 使用CDN的JS文件 -->
  <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.js) { %>
  <script type="text/javascript" src="<%= htmlWebpackPlugin.options.cdn.js[i] %>"></script>
  <% } %>
</body>
</html>

路由按需加載

使用 ()=>import(‘xxx’)按需加載路由組件,可以添加magic comments
打包後會單獨生成chunk.[hash].js文件,進一步減小主包大小

// Magic Comments 詳情查看下方鏈接
// https://webpack.docschina.org/api/module-methods/#magic-comments
{
    path: '/login',
    name: 'login',
    component: () => import(/* webpackChunkName: "my-chunk-name" */'@/views/login/Login'),
    hidden: true,
  },

站長推薦

1.雲服務推薦: 國內主流雲服務商,各類雲產品的最新活動,優惠券領取。地址:阿里雲騰訊雲華為雲

2.廣告聯盟: 整理了目前主流的廣告聯盟平台,如果你有流量,可以作為參考選擇適合你的平台點擊進入

鏈接: http://www.fly63.com/article/detial/10057