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

解決vue自定義指令導致的內存泄漏問題

 更新時間:2020年08月04日 11:51:08   作者:古蘭精  
這篇文章主要介紹了解決vue自定義指令導致的內存泄漏問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

vue的自定義指令是一個比較容易引起內存泄漏的地方,原因就在于指令通常給元素綁定了事件,但是如果忘記了解綁,就會產生內存泄漏的問題。

看下面代碼:

directives: {
  scroll: {
  inserted (el, cb) {
   // 不是元素節(jié)點 || 未設置回調函數
   if (el.nodeType !== 1 || !cb) return
   let direct = 'down'
   let rollHeight = 0

   let getScrollEventTarget = (target) => {
   while (target.nodeType === 1 && target.tagName !== 'BODY' && el.tagName !== 'HTML') {
    var overflowY = getComputedStyle(target).overflowY
    if (overflowY === 'scroll' || overflowY === 'auto') {
    return target
    }
    target = target.parentNode
   }
   return window
   }

   let targetNode = getScrollEventTarget(el)

   let scrollListener = () => {
   if (targetNode.scrollTop > rollHeight) {
    direct = 'down'
   } else {
    direct = 'up'
   }
   rollHeight = targetNode.scrollTop
   cb.value(rollHeight, direct)
   }

   el.unbindEventListener = () => {
   targetNode.removeEventListener('scroll', scrollListener)
   }
   targetNode.addEventListener('scroll', scrollListener)
  },
   // unbind (el) {
   // if (el.unbindEventListener) {
   // el.unbindEventListener()
   // }
  // }
  }
 }

起初,我忘記了些注釋的unbind方法,導致出現了內存泄漏,給元素綁定的scroll方法,會一直存在內存里。

導致出的情況,就是比如我進了頁面滾動到第3頁,出去,再點一個頁面,當滾動到第4頁時,將會請求2次,一次是上個頁面的第4頁,一次是本次頁面的第4頁,當你退出,再進一個頁面,當滾動到第5頁時,將會請求3次(上上頁,上頁和本頁),這就是典型的事件未解綁導致的內存泄漏。

所以需要給元素解綁,好在vue指令提供了unbind鉤子函數,

但是這里依然有個技術巧點就是:

1、我們scroll的元素可能是綁定的元素的父級等等,需要一層一層往上找

2、就是解綁的時候我們也需要找到那個父級元素等等,然后還需要remove對應的方法,那么肯定不可能在unbind里再寫一次,所以就可以在insert鉤子函數里,給el綁定一個解綁事件el.unbindEventListener,在unbind鉤子函數里直接調用即可。

以上這篇解決vue自定義指令導致的內存泄漏問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Nuxt pages下不同的頁面對應layout下的頁面布局操作

    Nuxt pages下不同的頁面對應layout下的頁面布局操作

    這篇文章主要介紹了Nuxt pages下不同的頁面對應layout下的頁面布局操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Vue2.x如何解決Element組件el-tooltip滾動時錯位不消失的問題

    Vue2.x如何解決Element組件el-tooltip滾動時錯位不消失的問題

    這篇文章主要介紹了Vue2.x如何解決Element組件el-tooltip滾動時錯位不消失的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • vant中的toast層級改變操作

    vant中的toast層級改變操作

    這篇文章主要介紹了vant中的toast層級改變操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Vue?事件處理函數的綁定示例詳解

    Vue?事件處理函數的綁定示例詳解

    這篇文章主要為大家介紹了Vue?事件處理函數的綁定示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • antd vue表格可編輯單元格以及求和實現方式

    antd vue表格可編輯單元格以及求和實現方式

    這篇文章主要介紹了antd vue表格可編輯單元格以及求和實現方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Vue實現簡單選項卡效果

    Vue實現簡單選項卡效果

    這篇文章主要為大家詳細介紹了Vue實現簡單選項卡效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Vue?Electron實現輸入法自動刷字數功能詳解

    Vue?Electron實現輸入法自動刷字數功能詳解

    這篇文章主要介紹了Vue?Electron實現輸入法自動刷字數功能,文中的示例代碼講解詳細,對我們學習C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • 詳解vue3自定義指令實現?v-focus?功能

    詳解vue3自定義指令實現?v-focus?功能

    在Vue3中,可以通過自定義指令來實現v-focus功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-05-05
  • 一文帶你吃透Vue3編譯原理

    一文帶你吃透Vue3編譯原理

    一直對編譯原理的東西都有一種恐懼感,感覺太難了,看不懂,打開vue3源碼看到編譯相關的代碼,直接嚇退。不要擔心,小編今天帶你一文吃透Vue3編譯原理
    2023-02-02
  • 基于Vue插入視頻的2種方法小結

    基于Vue插入視頻的2種方法小結

    本文通過兩種方法給大家介紹了基于vue插入視頻的方法,每種方法通過實例代碼給大家介紹的都非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04

最新評論

垦利县| 辰溪县| 浏阳市| 嘉禾县| 莱阳市| 呼伦贝尔市| 固原市| 宜川县| 怀仁县| 延吉市| 石首市| 云南省| 遵义县| 华宁县| 百色市| 彰化县| 巴中市| 辉县市| 鹤峰县| 清远市| 邛崃市| 德安县| 永年县| 儋州市| 建宁县| 黎城县| 来凤县| 鸡泽县| 花莲县| 隆安县| 专栏| 古丈县| 四子王旗| 沙雅县| 吉首市| 永登县| 滦南县| 镇江市| 双流县| 若尔盖县| 突泉县|