優化:
1:外部引入模塊(cdn)
如 jquery,zepto,d3, bootstrap這些固定的lib 使用cdn直接引用就可以,沒有必要打包到build,有效利用302。
2:圖標優化
不管后台還是移動端避免不了icon的使用,使用字體圖標,還需引入字體文件,如果字體丟失 會影響到icon顯示效果,推薦轉換base64 后引用。
3:統一模塊
如:moment我們可能在多個頁面使用 沒必要每個頁面進行import引入,可以在入口文件(index.js 或main.js)全局配置
例如:
import Vue from 'vue'
Vue.prototype.$moment = moment;
以后在每個頁面都可以直接使用 this.$moment , 不在需要每個頁面import 'moment' 。
moment 有各種語言包,總大小200k+,如使用webpack打包 建議過濾掉其他語言
new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/)
或 new webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, /zh-cn/)
4:分離第三方庫
entry: {
app: './src/main.js', //設置入口文件
vendors: ['vue', 'vue-router', 'moment']
},
app: './src/main.js', //設置入口文件
vendors: ['vue', 'vue-router', 'moment']
},
plugins[ new webpack.optimize.CommonsChunkPlugin({ name: ['vendor', 'manifest'], // 如果有manifest 每次打包壓縮后的文件不會改變hash minChunks: function (module, count) { // any required modules inside node_modules are extracted to vendor return ( module.resource && /\.js$/.test(module.resource) && module.resource.indexOf( path.join(__dirname, '../node_modules') ) === 0 ) } }),]
使用 CommonsChunkPlugin插件配置 每次build后,都會重新設置hash,導致Etag不同,每次上線都會更新Etag, 無法利用瀏覽器緩存。
下圖優化大小:
后台項目:總大小 20M 減少到4.2M 后台4.2M, 在開啟gzip壓縮下,勉強湊合。
優化后:
移動端:2.0M減少到830K,開啟gzip 大概在400-500k左右。