javascript - 在自定义元素构造函数中创建 MutationObserver 导致内存泄漏?

标签 javascript dom polymer web-component custom-element

我有一个自定义元素类,它在其 createCallback 中创建一个突变观察者。任何时候都不会调用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) {
        // ...
    }
}

最佳答案

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

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

关于javascript - 在自定义元素构造函数中创建 MutationObserver 导致内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39194565/

相关文章:

javascript - Node.js 中不断出现 "x is not a function"错误

javascript - 尝试使用 jQuery 的 submitHandler 时表单未提交

javascript - 仅当我们在 Chrome 浏览器中按 F12(开发者工具)时, Highcharts 才会显示数据

javascript - 如何设置 MutationObserver 来检测添加的 DOM?

javascript - 用于跨域字符串存储的 Window.name 的替代解决方案

javascript - 如何在 polymer 组件中以编程方式滚动

javascript - 使用 Selenium 测试 Polymer 元素和阴影 DOM

javascript - 左键点击激活oncl​​ick 右击激活href

javascript - GWT 中的 DOM(事件)

javascript - polymer 应用程序布局在组件后面滑动