日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Vue優化:常見會導致內存泄漏問題及優化詳解

瀏覽:217日期:2022-12-17 14:39:38

如果你在用 Vue 開發應用,那么就要當心內存泄漏的問題。這個問題在單頁應用 (SPA) 中尤為重要,因為在 SPA 的設計中,用戶使用它時是不需要刷新瀏覽器的,所以 JavaScript 應用需要自行清理組件來確保垃圾回收以預期的方式生效。因此在vue開發過程中,你需要時刻警惕內存泄漏的問題,這些內存泄漏往往會發生在使用 Vue 之外的其它進行 DOM 操作的三方庫時,請確保測試應用的內存泄漏問題并在適當的時機做必要的組件清理。

下面是我開發過程中遇到,并查資料總結的內存泄漏問題,會持續更新中

一、vue自定義指令給元素綁定事件,卻沒有解綁事件

這個問題見上篇博客,vue自定義指令導致的內存泄漏問題解決

二、v-if指令產生的內存泄露

v-if也是一個容易產生內存泄漏的地方。因為:

1、v-if綁定到false的值,但是實際上dom元素在隱藏的時候沒有被真實的釋放掉

2、就是非常常見的比如我們通過v-if刪除了父級元素,但是并沒有移除父級元素里的dom片段。通常產生于使用第三方庫的時候,比如下面的示例中,我們加載了一個帶有非常多選項的選擇框,然后我們用到了一個顯示/隱藏按鈕,通過一個 v-if 指令從虛擬 DOM 中添加或移除它。這個示例的問題在于這個 v-if 指令會從 DOM 中移除父級元素,但是我們并沒有清除由 Choices.js 新添加的 DOM 片段,從而導致了內存泄漏。

<link rel='stylesheet prefetch' rel='external nofollow' ><script src='https://joshuajohnson.co.uk/Choices/assets/scripts/dist/choices.min.js?version=3.0.3'></script><div id='app'> <button v-if='showChoices' @click='hide'>Hide</button> <button v-if='!showChoices' @click='show' >Show</button> <div v-if='showChoices'> <select id='choices-single-default'></select> </div></div>

new Vue({ el: '#app', data: function () { return { showChoices: true } }, mounted: function () { this.initializeChoices() }, methods: { initializeChoices: function () { let list = [] // 我們來為選擇框載入很多選項 // 這樣的話它會占用大量的內存 for (let i = 0; i < 1000; i++) { list.push({ label: 'Item ' + i, value: i }) } new Choices('#choices-single-default', { searchEnabled: true, removeItemButton: true, choices: list }) }, show: function () { this.showChoices = true this.$nextTick(() => { this.initializeChoices() }) }, hide: function () { this.showChoices = false } }})

解決實例:在上述的示例中,我們可以用 hide() 方法在將選擇框從 DOM 中移除之前做一些清理工作,來解決內存泄露問題。為了做到這一點,我們會在 Vue 實例的數據對象中保留一個屬性,并會使用 Choices API 中的 destroy() 方法將其清除。

new Vue({ el: '#app', data: function () { return { showChoices: true, choicesSelect: null } }, mounted: function () { this.initializeChoices() }, methods: { initializeChoices: function () { let list = [] for (let i = 0; i < 1000; i++) { list.push({ label: 'Item ' + i, value: i }) } // 在我們的 Vue 實例的數據對象中設置一個 `choicesSelect` 的引用 this.choicesSelect = new Choices('#choices-single-default', { searchEnabled: true, removeItemButton: true, choices: list }) }, show: function () { this.showChoices = true this.$nextTick(() => { this.initializeChoices() }) }, hide: function () { // 現在我們可以讓 Choices 使用這個引用 // 在從 DOM 中移除這些元素之前進行清理工作 this.choicesSelect.destroy() this.showChoices = false } }})

三、vue-router跳轉到別的組件導致的內容泄漏

在上述示例中,我們使用了一個 v-if 指令產生內存泄漏,但是一個更常見的實際的場景是使用 Vue Router 在一個單頁應用中路由到不同的組件。

就像這個 v-if 指令一樣,當一個用戶在你的應用中導航時,Vue Router 從虛擬 DOM 中移除了元素,并替換為了新的元素。但是其子元素dom片段也并沒有銷毀。

Vue 的 beforeDestroy() 生命周期鉤子是一個解決基于 Vue Router 的應用中的這類問題的好方法。我們可以將清理工作放入 beforeDestroy() 鉤子,像這樣:

beforeDestroy: function () { this.choicesSelect.destroy()}

所以最正確的解決方案就是:首先,v-if置為false前先刪除創建的dom片段;其次,路由跳出吃,在beforeDestroy鉤子函數里面判斷choicesSelect是否銷毀,沒銷毀則銷毀。

還有一個替代方案:

我們已經討論了移除元素時的內存管理,但是如果你打算在內存中保留狀態和元素該怎么做呢?這種情況下,你可以使用內建的 keep-alive 組件。

當你用 keep-alive 包裹一個組件后,它的狀態就會保留,因此就留在了內存里。

<button @click='show = false'>Hide</button><keep-alive> // <my-component> 即便被刪除仍會刻意保留在內存里 <my-component v-if='show'></my-component></keep-alive>

這個技巧可以用來提升用戶體驗。例如,設想一個用戶在一個文本框中輸入了評論,之后決定導航離開。如果這個用戶之后導航回來,那些評論應該還保留著。

一旦你使用了 keep-alive,那么你就可以訪問另外兩個生命周期鉤子:activated和 deactivated。如果你想要在一個 keep-alive 組件被移除的時候進行清理或改變數據,可以使用 deactivated 鉤子。

deactivated: function () { // 移除任何你不想保留的數據,或者銷毀可能產生內存泄漏的地方}

以上這篇Vue優化:常見會導致內存泄漏問題及優化詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美激情日韩| 国产精品视频一区二区三区四蜜臂| 一区二区三区四区日韩| 欧美一区二区三区高清视频| 久久在线91| 成人国产精选| 精品视频国内| 国产一区国产二区国产三区| 精品入口麻豆88视频| 国产一区三区在线播放| 在线亚洲人成| 亚洲一区久久| 青草国产精品| 久久一区视频| 欧美日韩日本国产亚洲在线 | 美女网站久久| 欧美一级二级三级视频| 欧美日韩夜夜| av免费不卡国产观看| 天堂а√在线最新版中文在线| 久草免费在线视频| 国产一区二区三区四区五区传媒| 国产精品3区| 日韩不卡在线| 蜜桃视频一区二区三区| 欧美极品一区二区三区| 午夜影院欧美| 国产精品久久久久久久免费软件 | 久久精品亚洲人成影院 | 黄页网站一区| 精品91福利视频| 三级欧美韩日大片在线看| 国产精品麻豆成人av电影艾秋| 欧洲一区二区三区精品| 中文字幕日韩欧美精品高清在线| 另类综合日韩欧美亚洲| 亚洲欧美日韩国产综合精品二区| 国内精品麻豆美女在线播放视频| 国产午夜久久| 久久一区二区三区喷水| 美女精品久久| 国产私拍福利精品视频二区| 久久久噜噜噜| 超碰成人av| 精品一区二区三区中文字幕视频 | 丁香婷婷久久| 欧美极品一区二区三区| 日韩av不卡在线观看| 亚洲自啪免费| 久久av一区| 国产亚洲午夜| 亚洲永久字幕| 国产亚洲精品v| 私拍精品福利视频在线一区| 国产精品调教视频| 国产欧美一区二区精品久久久 | 亚洲女同一区| 中文在线一区| av成人国产| 欧美专区一区二区三区| 免费的成人av| 男人操女人的视频在线观看欧美| 欧美日韩激情在线一区二区三区| 中文字幕系列一区| 91精品综合| 亚洲激情国产| 日韩高清电影免费| 日韩成人av影视| 日韩精品视频一区二区三区| 日韩一区精品| 精品亚洲a∨| 深夜视频一区二区| 水野朝阳av一区二区三区| 亚洲人成亚洲精品| 国产在线日韩精品| 最新国产拍偷乱拍精品| 亚洲欧美日本国产| 麻豆一区二区99久久久久| 91精品韩国| 丝袜美腿亚洲色图| 久久99影视| 国产欧洲在线| 一区久久精品| 国产一级成人av| 日韩欧美综合| 亚洲精品一级| 美女精品一区二区| 亚洲在线电影| 久久久久久夜| 日韩午夜视频在线| 久久久久久久久丰满| 日本aⅴ免费视频一区二区三区| 精品三级久久久| 久久亚洲不卡| 福利一区视频| 日本欧美在线| 午夜日本精品| 欧美成人精品午夜一区二区| 五月天综合网站| 精品国产麻豆| 四虎精品一区二区免费| 香蕉成人av| 国产精品一页| 在线精品一区| 亚洲夜间福利| 国产欧美日韩影院| 亚洲色图网站| 五月综合激情| 久久精品国产亚洲夜色av网站| 国产精品极品| 人人爱人人干婷婷丁香亚洲| 亚洲一卡久久| 久久中文亚洲字幕| 国产成人免费精品| 国产精品一区毛片| 国产日韩精品视频一区二区三区| 日韩精品一级二级| 久久亚洲风情| 亚洲色图网站| 亚洲精品美女91| 中文字幕亚洲影视| 亚洲欧美日本国产| 亚洲青青久久| 久久激情五月婷婷| 97久久超碰| 国产精品调教视频| 国产精品色在线网站| 亚洲精品大片| 亚洲精品视频一二三区| 一区二区国产精品| 日韩高清一区在线| 国产精品片aa在线观看| 国产精品115| 中文字幕在线高清| 免费观看不卡av| 日韩一区二区三区精品| 国产伦乱精品| 日韩av片子| 婷婷激情综合| 欧美精品一卡| 欧美片网站免费| 国产中文字幕一区二区三区| 日本不卡免费高清视频在线| 国产99精品| 国产免费av一区二区三区| 手机在线电影一区| 在线亚洲一区| 欧美激情 亚洲a∨综合| 国产99精品| 久久精品97| 亚洲成人日韩| 欧美aⅴ一区二区三区视频| 999国产精品永久免费视频app| 一区在线视频观看| 国产精品亚洲人成在99www| 中文视频一区| 久久国产精品99国产| 久久国产乱子精品免费女| 国产精品片aa在线观看| 99视频精品视频高清免费| 亚洲精品一级二级三级| 香蕉成人av| 麻豆精品久久久| 日韩在线黄色| 亚洲高清影视| 国产精品久久久久蜜臀| 日韩精品一区二区三区中文在线| 久久精品一区二区国产| 亚洲深深色噜噜狠狠爱网站 | 免费人成黄页网站在线一区二区| 四虎精品一区二区免费| 亚洲福利专区| 福利视频一区| 久久a爱视频| 青青国产91久久久久久| 欧美日韩四区| 久久伦理在线| 高清av一区| 久久精品理论片| 国产欧美日韩精品高清二区综合区 | 欧美精品中文字幕亚洲专区| 亚洲激情社区| 欧美91精品| 欧美日韩一区二区三区视频播放| 激情综合婷婷| 四虎8848精品成人免费网站| 国产精品亚洲欧美一级在线| 久久精品凹凸全集| 国产日韩精品视频一区二区三区| 免费久久99精品国产| 国产亚洲永久域名| 麻豆久久精品| 亚洲免费成人| 六月婷婷一区| 亚洲午夜国产成人| 日韩av一区二区在线影视| 97se亚洲| 国语精品一区| 国产综合色区在线观看| 999视频精品|