我们有一个适用于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
?答案 0 :(得分:0)
最后的结论是:
MDL面向1.x的无状态站点。在布局组件的初始构建期间,不会破坏整个布局。
所以正确答案是:
不会缩进使用MaterialLayout for MDL 1.x删除元素。
其他信息:
对于一个黑客工作(用于测试),我删除了从material.js添加MediaQueryList监听器(仍然是1.0.4,带有deconstructComponentInternal形式1.1.2)。这似乎适用于我们的解决方案。到目前为止,我没有发现任何缺点(在我们的解决方案中)。