我们有一个相当广泛的three.js应用程序,使用了很多材料,场景,渲染缓冲区等。我们只能刷新/重新启动它几次,它会在几个问题之一上失败;所有这些都等于用完WebGL资源。
我在window.onbeforeunload上添加了一个清理例程,它在支持它的对象上调用dispose()方法;材质,renderBuffers和几何。我不相信我抓住了所有的资源;但似乎已经足够了,因为我已经能够每半秒刷新一次半小时。
问题是: [1] 触发这种清理的最佳方法是什么? window.onbeforeunload看起来很有效,但也许有理由选择一些替代方案?
[2] 执行此类清理的最佳方式是什么?最好在渲染器上设置一个清理所有WebGL资源的部件。 (我不关心javascript对象,因为浏览器似乎能够清理它们。)
我在这里看到了相关的问题;例如清理场景,但我对完全清理感兴趣。我想在较低的WebGL级别上的任何答案对于这次全局清理也会起作用;它可能不仅仅是一些three.js资源,因为它无法计算出这些较小清理的范围。
答案 0 :(得分:1)
通常,当卸载网页时,页面不负责执行任何类型的清理;它的资源一下子就被丢弃了。否则,草率或恶意页面经常会造成麻烦。 WebGL也不例外。
您应该将您所看到的行为视为浏览器错误,找出一个演示该问题的简单测试页,并将其报告给浏览器供应商。这将为每个人解决问题,并从长远来看减轻您的维护负担。
答案 1 :(得分:1)
这是chrome 28中的已知问题,已在下一版本中修复。您可以下载测试版并亲自查看。