MDL在动态网站上降级

时间:2016-03-11 12:19:10

标签: javascript memory-leaks material-design-lite

我们有一个适用于MDL的旧的基于ajax的GUI。 整个页面内容是动态构建的(来自xml描述)。

componentHandler.downgradeElements( /all old notes/ ;
remove all old notes form DOM
add new page content to DOM
componentHandler.upgradeAllRegistered();

这样可以正常工作,但如果组件MaterialLayout是动态创建的,它会泄漏内存。 使用"downgrading fix (#2009"删除内部引用 内存泄漏的原因是组件MaterialLayout向MediaQueryList(MDL 1.1)添加了一个侦听器。

 this.screenSizeMediaQuery_.addListener(this.screenSizeHandler_.bind(this));

在MDL 1.1.2中,添加了两个Windows事件处理程序,这会导致同样的问题。

window.addEventListener('pageshow', function (e) { ... } );
...
window.addEventListener('resize', windowResizeHandler);

downgradeElements不会删除此侦听器。因此DOM元素不是GC。

问题:

  • 是否缩进以删除MaterialLayout
  • 元素
  • 我在这里做的完全错了吗?
  • 这是MDL问题吗?
  • 是否有解决方法而不更改MDL代码?

1 个答案:

答案 0 :(得分:0)

MDL Layout downgrade #1340

有问题报告

最后的结论是:
MDL面向1.x的无状态站点。在布局组件的初始构建期间,不会破坏整个布局。

所以正确答案是:
不会缩进使用MaterialLayout for MDL 1.x删除元素。

其他信息:
对于一个黑客工作(用于测试),我删除了从material.js添加MediaQueryList监听器(仍然是1.0.4,带有deconstructComponentInternal形式1.1.2)。这似乎适用于我们的解决方案。到目前为止,我没有发现任何缺点(在我们的解决方案中)。