GZIP壓縮有動態跟靜態兩種
能夠將由前端打包GZIP,經過 gzip_static:on會尋找以.gz結尾的文件,直接返回,不會佔用cpu進行壓縮,若是找不到則不進行壓縮javascript
nginxcss
#開啓和關閉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.jshtml
// 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後還能夠加載到原始資源文件) }), ] }
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文件,進一步減少主包大小vue
// 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, },