2017-07-04 122 views
1

我一直在使用POCing聚合物与Redux和Polymer(2.0)入门工具包结合使用,其中介绍了iron-pages组件,以及其中包含的页面的延迟加载。卸载聚合物页面

但是,我注意到它们实际上不是页面,而更像是一个老式的tab bar,其中所有内容都被加载到DOM中,但是使用CSS隐藏。调用connectedCallback()生命周期方法,但disconnectedCallback()不是因为组件从未卸载。

这感觉就像一个内存和性能泄漏给我。我们将要实现的一个用例是通过websockets进行的频繁更新的数据;我想避免的是它在后台更新。对于桌面,我认为它会很好,但对于移动设备来说,它对性能来说会很糟糕。

其次,我宁愿不必实施手动生命周期管理; NIH的气味。

因此,它归结为:聚合物和/或分页Web组件中是否存在组件卸载或可靠的生命周期回调?

编辑:我看到Unloading Polymer pages也有同样的问题 - 虽然没有答案。

编辑2:我看到在iron-pages上也出现了这个问题。

+0

相关:https://stackoverflow.com/questions/38905931/polymer-deactivating-pages-when-their-not-in-view – alesc

回答

0

如相关问题所述,您可以使用条件模板(<template is="dom-if">)和restamp属性。使用restamp时,条件为false时将删除元素,因此您的disconnectedCallback被调用。您可以使用一组dom-if模板来代替iron-pages元素。

正如您所指出的那样,iron-pages元素更像是一个标签面板,并且在底层视图相对较轻时您运行良好,或者您希望人们频繁地来回切换,并且不想支付重新创建的代价他们。但是,在很多情况下,当元素占用大量内存或者(在你的情况下)只要他们在页面上工作的时候,一个条件模板就是要走的路。