前言
一般來說,你不需要太關心vue的運行時性能,它在運行時非常快,但付出的代價是初始化時相對較慢。在最近開發的一個Hybrid APP里,Android Webview初始化一個較重的vue頁面竟然用了1200ms ~ 1400ms,這讓我開始重視vue的初始化性能,并最終優化到200 ~ 300ms,這篇文章分享我的優化思路。
性能瓶頸在哪里?
先看一下常見的vue寫法:在html里放一個app組件,app組件里又引用了其他的子組件,形成一棵以app為根節點的組件樹。
<body> <app></app> </body>
而正是這種做法引發了性能問題,要初始化一個父組件,必然需要先初始化它的子組件,而子組件又有它自己的子組件。那么要初始化根標簽<app>,就需要從底層開始冒泡,將頁面所有組件都初始化完。所以我們的頁面會在所有組件都初始化完才開始顯示。
這個結果顯然不是我們要的,更好的結果是頁面可以從上到下按順序流式渲染,這樣可能總體時間增長了,但首屏時間縮減,在用戶看來,頁面打開速度就更快了。
要實現這種渲染模式,我總結了下有3種方式實現。第3種方式是我認為最合適的,也是我在項目中實際使用的優化方法。
第一種:不使用根組件
這種方式非常簡單,例如:
<body> <A></A> <B></B> <C></C></body>
拋棄了根組件<app>,從而使A、B、C每一個組件初始化完都立刻展示。但根組件在SPA里是非常必要的,所以這種方式只適用小型頁面。
第二種:異步組件
異步組件在官方文檔已有說明,使用非常簡單:
<app> <A></A> <B></B></app>
new Vue({ components: { A: { /*component-config*/ }, B (resolve) { setTimeout(() => { resolve({ /*component-config*/ }) }, 0); } }})
這里<B>組件是一個異步組件,會等到手動調用resolve函數時才開始初始化,而父組件<app>也不必等待<B>先初始化完。
我們利用setTimeout(fn, 0)將<B>的初始化放在隊列最后,結果就是頁面會在<A>初始化完后立刻顯示,然后再顯示<B>。如果你的頁面有幾十個組件,那么把非首屏的組件全設成異步組件,頁面顯示速度會有明顯的提升。
你可以封裝一個簡單的函數來簡化這個過程:
function deferLoad (component, time = 0) { return (resolve) => { window.setTimeout(() => resolve(component), time) };}new Vue({ components: { B: deferLoad( /*component-config*/ ), // 100ms后渲染 C: deferLoad( /*component-config*/, 100 ) }})
看起來很美好,但這種方式也有問題,考慮下這樣的結構:
<app> <title></title> <A></A> <title></title> <B></B> <title></title> <C></C></app>
還是按照上面的異步組件做法,這時候就需要考慮把哪些組件設成異步的了。如果把A、B、C都設成異步的,那結果就是3個<title>會首先渲染出來,頁面渲染的過程在用戶看來非常奇怪,并不是預期中的從上到下順序渲染。
第三種:v-if 和 terminal指令
這是我推薦的一種做法,簡單有效。還是那個結構,我們給要延遲渲染的組件加上v-if:
<app> <A></A> <B v-if="showB"></B> <C v-if="showC"></C></app>
new Vue({ data: { showB: false, showC: false }, created () { // 顯示B setTimeout(() => { this.showB = true; }, 0); // 顯示C setTimeout(() => { this.showC = true; }, 0); }});
這個示例寫起來略顯亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人在线中文字幕|
亚洲国产私拍精品国模在线观看|
91免费的视频在线播放|
精品国产老师黑色丝袜高跟鞋|
超薄丝袜一区二区|
日韩久久精品成人|
亚洲热线99精品视频|
日韩电影免费观看中文字幕|
亚洲无亚洲人成网站77777|
亚洲欧洲在线视频|
日韩精品中文字幕久久臀|
日韩av在线看|
欧美日韩在线影院|
亚洲美女精品成人在线视频|
亚洲精品视频在线播放|
欧美日韩性生活视频|
国产精品吴梦梦|
精品亚洲一区二区三区四区五区|
国产日产久久高清欧美一区|
国产激情综合五月久久|
91在线无精精品一区二区|
亚洲欧美激情一区|
亚洲第一福利网|
欧美成人合集magnet|
国产精品视频久久|
成人国产精品一区|
久久久久久尹人网香蕉|
亚洲色图第三页|
日韩电影免费观看在线观看|
欧美精品在线观看91|
国产福利视频一区|
日本道色综合久久影院|
狠狠躁夜夜躁人人爽天天天天97|
国产精品高潮呻吟久久av野狼|
国产精品av在线播放|
欧美日韩中文字幕在线|
亚洲第一精品夜夜躁人人躁|
中文字幕欧美精品在线|
91亚洲精品久久久|
久久综合免费视频|
亚洲男人第一av网站|
国产精品久久久久久久久男|
国产精品视频久久久久|
久久久精品一区|
亚洲欧洲国产一区|
国产亚洲精品一区二555|
久久精品91久久香蕉加勒比|
欧美日本在线视频中文字字幕|
久久久久久中文|
亚洲午夜国产成人av电影男同|
欧美午夜性色大片在线观看|
中文字幕亚洲天堂|
亚洲专区国产精品|
尤物九九久久国产精品的分类|
一本色道久久88综合亚洲精品ⅰ|
96sao精品视频在线观看|
亚洲天天在线日亚洲洲精|
亚洲男人的天堂在线|
亚洲一区二区三区成人在线视频精品|
国产日韩欧美在线看|
欧美国产日产韩国视频|
亚洲欧美中文日韩在线v日本|
日韩在线中文视频|
九九精品视频在线|
日韩精品在线私人|
久久久噜噜噜久噜久久|
少妇av一区二区三区|
日本在线精品视频|
自拍偷拍亚洲欧美|
成人精品aaaa网站|
欧美理论电影在线播放|
国产热re99久久6国产精品|
久久久久久久国产精品|
亚洲成人激情在线|
奇米成人av国产一区二区三区|
欧美成人剧情片在线观看|
国产精品视频免费在线观看|
亚洲欧美日韩天堂一区二区|
91免费福利视频|
国产精品精品久久久久久|
亚洲电影天堂av|
亚洲xxxx妇黄裸体|
久久影视电视剧免费网站|
亚洲精品在线观看www|
日本久久久久久久|
亚洲美女动态图120秒|
91精品视频在线|
2019国产精品自在线拍国产不卡|
日韩中文字幕欧美|
91免费高清视频|
日韩免费在线免费观看|
久久成人人人人精品欧|
国产98色在线|
国产精品视频一区二区三区四|
国产日韩欧美在线观看|
欧美第一淫aaasss性|
亚洲视频在线视频|
国产美女久久久|
日韩免费电影在线观看|
精品国产乱码久久久久久天美|
欧美一级黑人aaaaaaa做受|
精品国产一区二区三区久久久狼|
国产精品久久久久久久久久久久|
一区二区中文字幕|
国产在线一区二区三区|
亚洲国产精品嫩草影院久久|
成人乱色短篇合集|
一区二区三区天堂av|
国产精品亚洲一区二区三区|
97碰碰碰免费色视频|
久久天天躁日日躁|
日韩在线视频网|
国产精品久久久久久久久免费|
不卡av电影院|
日韩av手机在线|
欧美性xxxxx极品娇小|
欧洲亚洲在线视频|
久久久久国产精品免费网站|
国产丝袜精品第一页|
国产欧美日韩精品丝袜高跟鞋|
亚洲最大福利网站|
亚洲美女久久久|
日韩美女在线播放|
国内精品美女av在线播放|
91免费精品国偷自产在线|
国产精品影院在线观看|
精品人伦一区二区三区蜜桃网站|
日韩欧美第一页|
中文字幕一区日韩电影|
成人写真福利网|
日本道色综合久久影院|
亚洲午夜未满十八勿入免费观看全集|
国产精品视频一区二区三区四|
国产精品久久久久一区二区|
欧美成人三级视频网站|
国产丝袜一区二区三区免费视频|
91po在线观看91精品国产性色|
91视频国产一区|
亚洲欧洲免费视频|
91精品在线看|
92版电视剧仙鹤神针在线观看|
中文字幕亚洲第一|
欧美日韩中文字幕综合视频|
亚洲欧美激情精品一区二区|
欧美肥婆姓交大片|
98视频在线噜噜噜国产|
国产成人激情小视频|
欧美午夜精品伦理|
国产欧美在线播放|
中文字幕亚洲自拍|
日韩高清免费在线|
亚洲精品国产综合久久|
国产丝袜一区二区三区免费视频|
日韩av免费网站|
午夜免费在线观看精品视频|
欧美在线视频网|
国产精品高潮粉嫩av|
国产精品69av|
亚洲一区二区三区sesese|
欧美亚洲视频在线看网址|
91精品国产综合久久香蕉的用户体验|
国产日本欧美视频|
57pao成人永久免费视频|
亚洲人成人99网站|