最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Vue依賴收集引發(fā)的問題

 更新時間:2019年04月22日 11:11:54   作者:DanceOnBeat  
這篇文章主要介紹了Vue依賴收集引發(fā)的問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

問題背景

在我們的項目中有一個可視化配置的模塊,是通過go.js生成canvas來實現(xiàn)的。但是,我們發(fā)現(xiàn)這個模塊在瀏覽器中經(jīng)常會引起該tab頁崩潰。開啟chrome的任務(wù)管理器一看,進(jìn)入該頁面內(nèi)存和cpu就會暴漲,內(nèi)存經(jīng)常會飆到700多M。但是我們的canvas實際的像素只有約500x500,根據(jù)一些粗略的計算,大概只占了1M的內(nèi)存,這個計算過程可參考100*100的 canvas 占多少內(nèi)存。那么我們這700M內(nèi)存是哪里來的呢?

定位問題

我們可以使用chrome開發(fā)者工具來分析我們的調(diào)用棧。這邊我是先通過Performance來幫助我們定位問題,它會幫我們生成一段過程中一些數(shù)據(jù)的變化,包括js堆內(nèi)存、dom節(jié)點數(shù)量、動畫幀等數(shù)據(jù),如圖:

這是切換至一個canvas畫布較大的一個模塊的performance分析表現(xiàn),可以看到占用了472M的內(nèi)存。下面折線圖藍(lán)色部分是js堆內(nèi)存的變化,而Main下面黃色與紫色的矩形框就是我們的調(diào)用棧,上下兩部分是按照時間一一對應(yīng)的??梢钥吹?,藍(lán)色的折線呈高低起伏的態(tài)勢,GC回收之后低點基本和高點持平,因此可以斷定幾乎不存在內(nèi)存泄漏的問題。然后我們可以放大去看一看,內(nèi)存升高的時候,js做了些什么事情,找一找規(guī)律。

 

我們隨機找一段內(nèi)存增長的區(qū)域,可以看到在內(nèi)存增長的過程中,最為頻繁調(diào)用的就是Observer相關(guān)的代碼。但是就這么看,我們不能夠明白Observer是在干什么。此時我們可以借用Memory選項中的Allocation Sampling按照javascript function來查看內(nèi)存分配,我們同樣錄制以上的一段操作。

此時我們能夠清楚的看到,的確是這個Observer在作怪。同時,我們可以看到這是vue的代碼,點擊右邊的文件查看source code,就可以清楚的明白這就是vue在執(zhí)行依賴收集的操作,此時會給屬性添加watcher。那我們這里為什么會有如此多的屬性被添加了watcher呢?看了一下代碼,原來是我把go.js的一個實例掛到了vue的data選項中,放到data中的屬性會被vue執(zhí)行依賴收集的相關(guān)操作,而這個實例擁有非常多的嵌套屬性,全部都會被添加watcher。其實,我們只是想單純的存儲一下這個實例,供我們后續(xù)調(diào)用其相關(guān)的方法,添加watcher對我們來說完全沒有意義,那我們?nèi)绾伪苊膺@樣的問題呢?

解決問題

上網(wǎng)搜索了相關(guān)的解決方案,大概有如下幾種:

  1. 在data中定義的屬性前面加上$,即通知vue該屬性不需要被依賴收集,例如:javascript data() { return { $goDiagram: null } }但是這樣聲明,在template中引用時會報找不到$goDiagram屬性的錯誤,具體的原因我還沒深究,有空可以研究一下。
  2. 不在data中聲明,直接在賦值的時候聲明this.goDiagram = diagram。這同樣會遇到第一種方案的問題,模板中會提示找不到goDiagram屬性。
  3. 不在data中聲明,而是利用$options來存儲goDiagram,例如:
export default {
 goDiagram: null,
 mounted() {
  this.$options.goDiagram = xxx
 }
}

 這應(yīng)該是比較好的一個方法,vue官方中也說明了$options用來包含自定義屬性,例如我們平時引入的常量或是枚舉類型,我們也不希望它們被添加無意義的watcher,因此可以通過這種方式來定義,在template中引用時只需要{{$options.xxx}}即可。這種方式唯一的缺點就是不能像data那樣一眼望去就能清楚地知道你定義了什么屬性。
項目中我采用了第一種方式,經(jīng)過修改后內(nèi)存占用量減少到原來的1/5到1/6,可以說效果非常好,再也不會出現(xiàn)瀏覽器崩潰的情況了。

總結(jié)

通過這樣的一個問題,我們主要能夠?qū)W習(xí)到兩點:

  1. 如何通過chrome的開發(fā)者工具,去快速地定位代碼中存在的內(nèi)存問題
  2. 不要盲目的將屬性都掛載到data選項中,一些常量我們可以采取上面提到的幾種方式來定義,以此來作為一種優(yōu)化手段

以上所述是小編給大家介紹的Vue依賴收集引發(fā)的問題詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 詳解Vuex的屬性

    詳解Vuex的屬性

    Vuex是專為Vue.js應(yīng)用程序開發(fā)的狀態(tài)管理模式,這篇文章主要介紹了Vuex的屬性,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • 使用vant-uploader上傳照片無法刪除的解決

    使用vant-uploader上傳照片無法刪除的解決

    這篇文章主要介紹了使用vant-uploader上傳照片無法刪除的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue后臺管理之動態(tài)加載路由的方法

    vue后臺管理之動態(tài)加載路由的方法

    這篇文章主要介紹了vue后臺管理之動態(tài)加載路由的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Vue中使用better-scroll實現(xiàn)輪播圖組件

    Vue中使用better-scroll實現(xiàn)輪播圖組件

    better-scroll 是一款重點解決移動端(已支持 PC)各種滾動場景需求的插件。這篇文章主要介紹了Vue中使用better-scroll實現(xiàn)輪播圖組件的實例代碼,需要的朋友可以參考下
    2020-03-03
  • vue elementUI表格控制顯示隱藏對應(yīng)列的方法

    vue elementUI表格控制顯示隱藏對應(yīng)列的方法

    這篇文章主要為大家詳細(xì)介紹了vue elementUI表格控制顯示隱藏對應(yīng)列的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue實現(xiàn)帶復(fù)選框的樹形菜單

    vue實現(xiàn)帶復(fù)選框的樹形菜單

    這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)帶復(fù)選框的樹形菜單,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • vue 頁面跳轉(zhuǎn)的實現(xiàn)方式

    vue 頁面跳轉(zhuǎn)的實現(xiàn)方式

    這篇文章主要介紹了vue 頁面跳轉(zhuǎn)的實現(xiàn)方式,幫助大家更好的理解和使用vue,感興趣的朋友可以了解下
    2021-01-01
  • 一文帶你深入理解Vue3響應(yīng)式原理

    一文帶你深入理解Vue3響應(yīng)式原理

    響應(yīng)式就是當(dāng)對象本身(對象的增刪值)或者對象屬性(重新賦值)發(fā)生變化時,將會運行一些函數(shù),最常見的就是render函數(shù),下面這篇文章主要給大家介紹了關(guān)于Vue3響應(yīng)式原理的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • Vue項目中如何引入icon圖標(biāo)

    Vue項目中如何引入icon圖標(biāo)

    這篇文章主要介紹了Vue如何引入icon圖標(biāo),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2018-03-03
  • vuejs數(shù)據(jù)超出單行顯示更多,點擊展開剩余數(shù)據(jù)實例

    vuejs數(shù)據(jù)超出單行顯示更多,點擊展開剩余數(shù)據(jù)實例

    這篇文章主要介紹了vuejs數(shù)據(jù)超出單行顯示更多,點擊展開剩余數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05

最新評論

建昌县| 肃北| 遵化市| 北安市| 科技| 财经| 抚远县| 扎赉特旗| 维西| 古浪县| 双牌县| 黔西县| 绩溪县| 祁阳县| 鹤岗市| 中西区| 永济市| 汽车| 美姑县| 共和县| 北碚区| 盐边县| 靖安县| 瓮安县| 屯留县| 普宁市| 麟游县| 南充市| 固始县| 乡城县| 崇左市| 乌什县| 邢台县| 遵化市| 青阳县| 阿巴嘎旗| 三门县| 抚远县| 乌鲁木齐市| 荥经县| 汪清县|