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

vue里如何主動銷毀keep-alive緩存的組件

 更新時間:2019年03月21日 10:13:19   作者:old_bin  
這篇文章主要介紹了vue里如何主動銷毀keep-alive緩存的組件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

問題產(chǎn)生的背景

我們一個后臺,在切換一些標簽頁的時候,是使用的 keep-alive 緩存的標簽頁,也使用了 include 屬性來決定哪個頁面進行緩存,而標簽頁的切換實際上是路由的切換,也就是說打開一個新標簽頁的時候,url 會跟著變化,老的標簽頁如果在 keep-aliveinclude 范圍內(nèi)那就會緩存下來。

然后客服人員就反饋頁面開的久了就會崩潰,因為他們基礎(chǔ)上不會刷新頁面(工作需要),又總有切換標簽的習慣,最后導致內(nèi)存越來越大最后崩潰。

依賴環(huán)境

這個項目是基于一個開源 vue 后臺框架:https://github.com/PanJiaChen/vue-element-admin,然后代碼一直由幾個后端開發(fā)維護的!所以后端沒找出問題在哪,然后就我來接手這個問題了。
寫文章時,標簽里竟然沒有 vue 這一項,差評!

定位問題

先梳理下業(yè)務邏輯:從業(yè)務場景來說,我們在標簽頁之間切換時,如果剛進入的這個標簽頁已被緩存了,那被緩存的標簽頁就直接拿出來展示就行,而關(guān)閉這個標簽頁的時候就應該銷毀對應的組件。

花了點時間查看了一下代碼,發(fā)現(xiàn)問題在于關(guān)閉標簽頁的時候,雖然這個頁面沒在 keep-aliveinclude 里了,但是組件也沒有被銷毀掉,還是在緩存狀態(tài),我們可以通過 Vue Devtools 插件看到關(guān)閉后的標簽頁對應的組件一直還存在著:

當然,在這塊 keep-alive 本身的邏輯我覺得是沒問題的,主要是我們項目比較復雜,緩存的組件太多了而且會一直增加,所以最終導致崩潰。

解決問題

既然問題已經(jīng)定位了,那就好解決問題了,只需要在關(guān)閉標簽頁的時候把對應的組件也銷毀掉就好了。

經(jīng)過網(wǎng)上一翻查找,發(fā)現(xiàn)銷毀一個組件可以使用: this.$destroy(‘組件名') 來銷毀。

先說下大概思路:keep-aliveinclude 里存的其實是一個 vuex 中的一個數(shù)據(jù)源(數(shù)據(jù)源保存的是路由名稱),當關(guān)閉標簽頁時,這個數(shù)據(jù)源中的一項會被移除。這之前,我們在組件里監(jiān)聽到這個數(shù)據(jù)源的變化,如果此組件對應的路由(這個路由應在 mounted 的時候保存下來)已經(jīng)不在數(shù)據(jù)源中了,那就應該銷毀此組件。

代碼大概如下:

const mixin = {
 data() {
  return {
   routePath: ''
  }
 },
 mounted() {
  this.routePath = this.$route.path
 },
 computed: {
  visitedViews() {
   return this.$store.state.tagsView.visitedViews
  }
 },
 watch: {
  visitedViews(value) {
   if(value 里沒有了 routePath 這一項)
    this.$destroy(this.$options.name)
   }
  }
 }
}

export default mixin

這一段代碼單獨拎出來了,然后在需要緩存的組件里使用 mixins 混入到組件對象中,這樣組件中要添加的代碼量就比較少了。

更改后經(jīng)過測試,關(guān)閉標簽頁后對應的組件就會被銷毀掉,使用 Vue Devtools 能看的很清楚。

更多思考

在我們后臺操作這么頻繁的業(yè)務場景下,使用 keep-alive 其實并不是一個好的選擇。

在我們修復這個問題后,我們通過控制臺里的 Memory 查看頁面內(nèi)存的變化時,發(fā)現(xiàn)組件即便被銷毀,也要經(jīng)過一段時間才能回收完,當我們在這一段時間一直創(chuàng)建/打開新的標簽頁時,內(nèi)存還是會在短時間內(nèi)高漲。而且有時候,內(nèi)存在經(jīng)過一段時間后也并沒有回收掉。

keep-alive 本質(zhì)上是把整個 dom 節(jié)點及對應的事件等都緩存下來了,當這樣的組件很多的時候,自然會占用很多內(nèi)存。而如果我們只緩存這個組件中的數(shù)據(jù),在需要這個組件再次顯示的時候再臨時渲染那肯定要節(jié)省很多內(nèi)存的,畢竟數(shù)據(jù)占的空間其實很小的,而渲染組件要花的時間也不會很長(只要組件不是特別特別復雜)。

所以,下一階段的優(yōu)化工作就是把 keep-alive 去掉,然后使用 vuex 來緩存組件中的數(shù)據(jù),當需要重新顯示數(shù)據(jù)時再把數(shù)據(jù)取出來并重新渲染。當然,這是一個比較大的工程!

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue2如何獲取上頁的url地址

    vue2如何獲取上頁的url地址

    這篇文章主要介紹了vue2如何獲取上頁的url地址問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 使用vue打包時gzip壓縮的兩種方案

    使用vue打包時gzip壓縮的兩種方案

    這篇文章主要介紹了使用vue打包時gzip壓縮的兩種方案小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Vue.js?的過濾器你了解多少

    Vue.js?的過濾器你了解多少

    這篇文章主要為大家詳細介紹了Vue.js?的過濾器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • vue手機端input change時,無法執(zhí)行的問題及解決

    vue手機端input change時,無法執(zhí)行的問題及解決

    這篇文章主要介紹了vue手機端input change時,無法執(zhí)行的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 詳細聊聊Vue中的MVVM模式原理

    詳細聊聊Vue中的MVVM模式原理

    MVVM旨在利用WPF中的數(shù)據(jù)綁定函數(shù),通過從視圖層中幾乎刪除所有GUI代碼(代碼隱藏),更好地促進視圖層開發(fā)與模式其余部分的分離,這篇文章主要給大家介紹了關(guān)于Vue.js中MVVM的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • Vue實現(xiàn)百度下拉提示搜索功能

    Vue實現(xiàn)百度下拉提示搜索功能

    這篇文章主要為大家詳細介紹了Vue實現(xiàn)百度下拉提示搜索功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 在Vue中實現(xiàn)隨hash改變響應菜單高亮

    在Vue中實現(xiàn)隨hash改變響應菜單高亮

    這篇文章主要介紹了在Vue中實現(xiàn)隨hash改變響應菜單高亮的方法,文中還通過實例代碼給大家介紹了vue關(guān)于點擊菜單高亮與組件切換的相關(guān)知識,需要的朋友可以參考下
    2020-03-03
  • vue+vant使用圖片預覽功能ImagePreview的問題解決

    vue+vant使用圖片預覽功能ImagePreview的問題解決

    這篇文章主要介紹了vue+vant使用圖片預覽功能ImagePreview的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • vscode配置vue下的es6規(guī)范自動格式化詳解

    vscode配置vue下的es6規(guī)范自動格式化詳解

    這篇文章主要介紹了vscode配置vue下的es6規(guī)范自動格式化詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • Vue實現(xiàn)模糊查詢filter()實例詳解

    Vue實現(xiàn)模糊查詢filter()實例詳解

    因為近日在學習并使用VUE,客戶有一個要求,要輸入框可模糊查詢并帶有下拉提示的應用,數(shù)據(jù)從接口取,下面這篇文章主要給大家介紹了關(guān)于Vue實現(xiàn)模糊查詢filter()的相關(guān)資料,需要的朋友可以參考下
    2023-04-04

最新評論

长白| 遂溪县| 巴楚县| 南涧| 疏勒县| 湘乡市| 桓台县| 绥中县| 大余县| 泸州市| 余江县| 克山县| 祥云县| 武夷山市| 三台县| 岱山县| 新巴尔虎左旗| 大邑县| 芦溪县| 正定县| 神木县| 开封县| 澜沧| 高安市| 揭西县| 南皮县| 永州市| 新疆| 霍州市| 三门县| 汉寿县| 贡觉县| 云霄县| 瑞丽市| 平定县| 章丘市| 荔浦县| 信宜市| 绥宁县| 玉林市| 焦作市|