<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

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

        來源:懂視網 責編:小采 時間:2020-11-27 21:59:49
        文檔

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

        vue里如何主動銷毀keep-alive緩存的組件:問題產生的背景 我們一個后臺,在切換一些標簽頁的時候,是使用的 keep-alive 緩存的標簽頁,也使用了 include 屬性來決定哪個頁面進行緩存,而標簽頁的切換實際上是路由的切換,也就是說打開一個新標簽頁的時候,url 會跟著變化,老的標簽頁如果在 keep
        推薦度:
        導讀vue里如何主動銷毀keep-alive緩存的組件:問題產生的背景 我們一個后臺,在切換一些標簽頁的時候,是使用的 keep-alive 緩存的標簽頁,也使用了 include 屬性來決定哪個頁面進行緩存,而標簽頁的切換實際上是路由的切換,也就是說打開一個新標簽頁的時候,url 會跟著變化,老的標簽頁如果在 keep

        問題產生的背景

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

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

        依賴環境

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

        定位問題

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

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

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

        解決問題

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

        經過網上一翻查找,發現銷毀一個組件可以使用: this.$destroy(‘組件名') 來銷毀。

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

        代碼大概如下:

        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 混入到組件對象中,這樣組件中要添加的代碼量就比較少了。

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

        更多思考

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

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

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

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

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

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

        vue里如何主動銷毀keep-alive緩存的組件:問題產生的背景 我們一個后臺,在切換一些標簽頁的時候,是使用的 keep-alive 緩存的標簽頁,也使用了 include 屬性來決定哪個頁面進行緩存,而標簽頁的切換實際上是路由的切換,也就是說打開一個新標簽頁的時候,url 會跟著變化,老的標簽頁如果在 keep
        推薦度:
        標簽: 緩存 VUE 主動
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 成人免费视频88| 最近2019中文免费字幕| 亚洲偷自拍拍综合网| 欧洲美女大片免费播放器视频| 亚洲Av综合色区无码专区桃色| 久久久久久久国产免费看| 亚洲色偷偷狠狠综合网| 国产在线精品一区免费香蕉| 亚洲AV综合色区无码一区| 67pao强力打造高清免费| 国产福利电影一区二区三区,亚洲国模精品一区| 337P日本欧洲亚洲大胆艺术图| 日本高清免费中文字幕不卡| 精品一区二区三区无码免费直播 | 亚洲经典在线中文字幕| 国产曰批免费视频播放免费s| 亚洲人成在线免费观看| 青青草国产免费久久久91 | 在线观看免费无码视频| 亚洲第一福利视频| 91在线视频免费播放| 免费观看亚洲人成网站| 亚洲人成图片小说网站| 国产成人精品免费视频网页大全| 成人区精品一区二区不卡亚洲| 少妇亚洲免费精品| 国产精品亚洲精品观看不卡| 国产一级淫片a免费播放口之| 国产免费人成视频尤勿视频| 久久久久亚洲AV无码麻豆| 成人性生交视频免费观看| ssswww日本免费网站片| 久久精品国产亚洲AV麻豆~| 毛片免费全部免费观看| 久久久受www免费人成| 亚洲AV无码乱码麻豆精品国产| 免费A级毛片在线播放不收费| 毛片在线全部免费观看| 亚洲精品天堂成人片AV在线播放| 亚洲午夜久久久影院| 国产男女猛烈无遮挡免费视频网站|