vue性能瓶頸的幾種情況?
1. 一次渲染大量的數(shù)據(jù)的時(shí)候,存在大量數(shù)據(jù)并且都是復(fù)雜類型的時(shí)候,會(huì)導(dǎo)致vue對(duì)數(shù)據(jù)的劫持時(shí)間和渲染時(shí)間變長(zhǎng), js連續(xù)執(zhí)行時(shí)間過(guò)長(zhǎng),會(huì)導(dǎo)致頁(yè)面長(zhǎng)時(shí)間無(wú)法交互,而且渲染時(shí)間太慢,用戶一次交互反饋的時(shí)間過(guò)長(zhǎng)。 優(yōu)化方案:可以使用 requestAnimation這個(gè)方法,將數(shù)據(jù)進(jìn)行分割,分批次渲染,減少了 js 的連續(xù)運(yùn)行時(shí)間,并且加快了渲染時(shí)間,利用加長(zhǎng)總運(yùn)行時(shí)間換取了渲染時(shí)間,用戶既能快速得到反饋,而且不會(huì)因?yàn)檫^(guò)長(zhǎng)時(shí)間的 js 運(yùn)行而無(wú)法與頁(yè)面交互。
2. 當(dāng)頁(yè)面中存在大量數(shù)據(jù),只是修改了一小部分導(dǎo)致頁(yè)面也會(huì)導(dǎo)致頁(yè)面卡頓,因?yàn)関ue的更新以組件為粒度進(jìn)行更新的,只要修改了當(dāng)前組件中所使用的數(shù)據(jù),組件就會(huì)整個(gè)去進(jìn)行更新,造成大量的時(shí)間浪費(fèi) 優(yōu)化方案:將不同的模塊劃分成不同的組件,這樣有效降低虛擬dom的diff運(yùn)算時(shí)間過(guò)長(zhǎng)的問(wèn)題,比如將大量數(shù)據(jù)的模塊單獨(dú)放一個(gè)組件,其它放一個(gè)組件,由于vue是以組件為粒度更新,修改其它組件的情況下不會(huì)導(dǎo)致table的重新diff,提升頁(yè)面響應(yīng)速度高達(dá)幾百倍。
3. 動(dòng)態(tài)插槽作用域或者靜態(tài)插槽的更新 使用插槽作用域來(lái)替換這兩種操作方式,一樣能提升性能,因?yàn)槭褂?插槽作用域之后,插槽內(nèi)容會(huì)被封裝到一個(gè)函數(shù)中,被子組件渲染,而不是在父組件。