【问题标题】:Memory leak from creation of MutationObserver in Custom Element constructor?在自定义元素构造函数中创建 MutationObserver 导致内存泄漏?
【发布时间】:2016-08-28 18:37:14
【问题描述】:

我有一个自定义元素类,它在它的 createdCallback 中创建一个变异观察者。从来没有调用过observer.disconnect()。这会导致内存泄漏吗?如果是这样,您建议如何处理?

这是一个基本的例子:

class SomeElement extends HTMLElement {
    createdCallback() {
        // Observe nodes in the future.
        const observer = new MutationObserver(changes => {
            for (let change of changes) {
                if (change.type != 'childList') continue

                for (let node of change.addedNodes)
                    this.childConnectedCallback(node)

                for (let node of change.removedNodes)
                    this.childDisconnectedCallback(node)
            }
        })
        observer.observe(this, { childList: true })
    }

    childConnectedCallback(node) {
        // ...
    }

    childDisconnectedCallback(node) {
        // ...
    }
}

【问题讨论】:

    标签: javascript dom polymer web-component custom-element


    【解决方案1】:

    如果垃圾收集器设计得很好,它就不应该有内存泄漏。当自定义元素本身被删除时,突变观察者将被释放。

    无论如何,您始终可以在detachedCallback() 方法中调用observer.disconnect()。在这种情况下,使用this.observer 而不是const observer 来保留引用。

    【讨论】:

    • 出于某种原因(我现在不记得)在我的情况下调用disconnect 是不可行的,这就是我问的原因。嗯,希望JS引擎能够聪明……
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 2020-06-06
    相关资源
    最近更新 更多