摘要:,組件按需加載這也是可以優(yōu)化的點(diǎn)。如果大家還有好的優(yōu)化方案,歡迎大家留言交流
在日常的Vue項(xiàng)目開(kāi)發(fā)中,隨著業(yè)務(wù)的日漸復(fù)雜,代碼量的日益增加,隨之帶來(lái)的問(wèn)題就是打包后的vendor.js體積過(guò)大,導(dǎo)致加載時(shí)空白頁(yè)時(shí)間過(guò)長(zhǎng),給用戶的體驗(yàn)太差。為此我們需要減少vendor.js的體積,從本質(zhì)上來(lái)解決這種問(wèn)題。
這里大概例舉幾個(gè)在項(xiàng)目中實(shí)際用到過(guò)的方法,優(yōu)化后的js大概縮小了50%左右,效果還是挺明顯的。
1,webpack externals為什么要配置externals
官方解釋:webpack 中的 externals 配置提供了不從 bundle 中引用依賴的方式。解決的是,所創(chuàng)建的 bundle 依賴于那些存在于用戶環(huán)境(consumer environment)中的依賴。
比如我們會(huì)在項(xiàng)目中引用各種第三方的js文件,如 jquery,vue,axios 等,如果我們?cè)诖虬鼤r(shí)排除這些依賴,則可以大大減小文件的大小,提高頁(yè)面加載速度,配置方法如下:
// 在 index.js 中引入資源 module.exports = { ... output: { ... }, externals : { jquery: "jQuery" "vue": "Vue", } ... }
這樣就剝離了那些不需要改動(dòng)的依賴模塊,換句話,下面展示的代碼還可以正常運(yùn)行:
import $ from "jquery"; import Vue from "vue"
這樣不僅之前對(duì)第三方庫(kù)的用法方式不變,還把第三方庫(kù)剝離出webpack的打包中,從而加速webpack的打包速度。
2,組件按需加載這也是可以優(yōu)化的點(diǎn)。如果頻繁使用了第三方組件/UI庫(kù),如我的項(xiàng)目中經(jīng)常使用了 element-ui 組件庫(kù),如果全部引入,項(xiàng)目體積非常大,這時(shí)可以按需引入組件。
首先,我們需要安裝 babel-plugin-component
npm install babel-plugin-component -D
然后,將.babelrc 修改為:
{ "presets": [["es2015", { "modules": false }]], "plugins": [ [ "component", { "libraryName": "element-ui", "styleLibraryName": "theme-chalk" } ] ] }
然后引入部分組件,這樣一來(lái),就不需要引入樣式了,插件會(huì)幫我們處理。
// main.js import Vue from "vue" import { Dialog, Loading } from "element-ui" [Dialog, Loading].forEach((comp) => { Vue.use(comp); })3,路由懶加載
當(dāng)打包構(gòu)建應(yīng)用時(shí),JavaScript 包會(huì)變得非常大,影響頁(yè)面加載。如果我們能把不同路由對(duì)應(yīng)的組件分割成不同的代碼塊,然后當(dāng)路由被訪問(wèn)的時(shí)候才加載對(duì)應(yīng)組件,這樣就更加高效了。
方法一
const login = () => import("@/components/login") const router = new VueRouter({ routes: [ { path: "/login", component: login } ] })
注意:這個(gè)時(shí)候我們需要安裝 babel-plugin-syntax-dynamic-import 插件,這樣打包時(shí)才會(huì)識(shí)別該語(yǔ)法
方法二
有時(shí)候我們想把某個(gè)路由下的所有組件都打包在同個(gè)異步塊 (chunk) 中。只需要使用 命名 chunk,一個(gè)特殊的注釋語(yǔ)法來(lái)提供 chunk name (需要 Webpack > 2.4)。
const Foo = () => import(/* webpackChunkName: "group-foo" */ "./Foo.vue") const Bar = () => import(/* webpackChunkName: "group-foo" */ "./Bar.vue") const Baz = () => import(/* webpackChunkName: "group-foo" */ "./Baz.vue")4,數(shù)據(jù)緩存——keep-alive
VUE2.0中提供了一個(gè)keep-alive方法,可以用來(lái)緩存組件,避免多次加載相應(yīng)的組件,減少性能的消耗。
舉例:用戶瀏覽A頁(yè)面,待A頁(yè)面的資源都加載完畢了,用戶通過(guò)路由跳轉(zhuǎn)到了B頁(yè)面,之后又退回到了A頁(yè)面,如果沒(méi)有特殊處理的話,A頁(yè)面的資源會(huì)重新加載一遍,造成資源浪費(fèi);若我們做了緩存,則可以減少請(qǐng)求的次數(shù),極高用戶體驗(yàn)。
1,緩存部分頁(yè)面
// router 設(shè)置如下 routers:[ {? ?path: "/home", name: home, meta: {keepAlive: true}? ? ? //? 設(shè)置為true表示需要緩存,不設(shè)置或者false表示不需要緩存? ? ? ? ? ? ? } ]
2,緩存組件
// include 和 exclude 屬性允許組件有條件地緩存。二者都可以用逗號(hào)分隔字符串、正則表達(dá)式或一個(gè)數(shù)組來(lái)表示
除了以上的優(yōu)化方法外,還有常規(guī)的 圖片的壓縮合并、CDN加速、壓縮代碼等方法,大家應(yīng)該都很熟悉了,這里就不在一一闡述了。如果大家還有好的優(yōu)化方案,歡迎大家留言交流~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/106809.html
摘要:為了讓事情更簡(jiǎn)單,允許將組件定義為一個(gè)工廠函數(shù),動(dòng)態(tài)地解析組件的定義。只在組件需要渲染時(shí)觸發(fā)工廠函數(shù),并且把結(jié)果緩存起來(lái),用于后面的再次渲染。 庫(kù)使用情況 vue vue-router axios muse-ui material-icons vue-baidu-map 未優(yōu)化前 首先我們?cè)谡G闆r下buildshowImg(https://segmentfault.com/img...
摘要:記錄一個(gè)前端項(xiàng)目?jī)?yōu)化的路程,效果如上圖。第二步優(yōu)化結(jié)果再次運(yùn)行查看項(xiàng)目打包情況可以看到項(xiàng)目體積已經(jīng)優(yōu)化到,中也看不到的蹤影了。本文主要想提供一些優(yōu)化思路及手段,即如何定位通過(guò),查看頁(yè)面加載時(shí)間問(wèn)題,然后再解決這些問(wèn)題。 showImg(https://segmentfault.com/img/bVbq282?w=381&h=384); 記錄一個(gè)前端項(xiàng)目?jī)?yōu)化的路程,效果如上圖。 接下來(lái)我...
摘要:記錄一個(gè)前端項(xiàng)目?jī)?yōu)化的路程,效果如上圖。第二步優(yōu)化結(jié)果再次運(yùn)行查看項(xiàng)目打包情況可以看到項(xiàng)目體積已經(jīng)優(yōu)化到,中也看不到的蹤影了。本文主要想提供一些優(yōu)化思路及手段,即如何定位通過(guò),查看頁(yè)面加載時(shí)間問(wèn)題,然后再解決這些問(wèn)題。 showImg(https://segmentfault.com/img/bVbq282?w=381&h=384); 記錄一個(gè)前端項(xiàng)目?jī)?yōu)化的路程,效果如上圖。 接下來(lái)我...
摘要:優(yōu)化空間不大主要關(guān)注另外兩個(gè)上面。目前為止,項(xiàng)目打包后的大部頭就是,這個(gè)目前的優(yōu)化空間較小。當(dāng)然,從整體優(yōu)化的大維度上來(lái)說(shuō)優(yōu)化的點(diǎn)還有很多,這個(gè)文章繼續(xù)更新下去。 項(xiàng)目現(xiàn)狀 項(xiàng)目是一個(gè)數(shù)據(jù)監(jiān)測(cè)平臺(tái),引入了ehcart和three.js 負(fù)責(zé)項(xiàng)目的數(shù)據(jù)可視化;打包后,體積高達(dá)2.1M,這個(gè)體積相比于我的項(xiàng)目規(guī)模來(lái)說(shuō)就顯得稍有笨重了 使用webpack-bundle-analyzer分析了...
摘要:前言一直混跡社區(qū)突然發(fā)現(xiàn)自己收藏了不少好文但是管理起來(lái)有點(diǎn)混亂所以將前端主流技術(shù)做了一個(gè)書(shū)簽整理不求最多最全但求最實(shí)用。 前言 一直混跡社區(qū),突然發(fā)現(xiàn)自己收藏了不少好文但是管理起來(lái)有點(diǎn)混亂; 所以將前端主流技術(shù)做了一個(gè)書(shū)簽整理,不求最多最全,但求最實(shí)用。 書(shū)簽源碼 書(shū)簽導(dǎo)入瀏覽器效果截圖showImg(https://segmentfault.com/img/bVbg41b?w=107...
閱讀 468·2021-10-09 09:57
閱讀 473·2019-08-29 18:39
閱讀 814·2019-08-29 12:27
閱讀 3030·2019-08-26 11:38
閱讀 2671·2019-08-26 11:37
閱讀 1295·2019-08-26 10:59
閱讀 1382·2019-08-26 10:58
閱讀 993·2019-08-26 10:48