在Custom Element构造函数中创建MutationObserver导致内存泄漏?

时间:2016-08-28 18:37:14

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

我有一个Custom Element类,它在createdCallback中创建了一个变异观察器。从来没有调用observer.disconnect()。这会导致内存泄漏吗?如果是这样,你会如何推荐处理它?<​​/ p>

这是一个基本的例子:

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) {
        // ...
    }
}

1 个答案:

答案 0 :(得分:1)

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

无论如何,您始终可以使用observer.disconnect()方法拨打detachedCallback()。在这种情况下,请使用this.observer代替const observer来保留引用。