我们有一个相当广泛的three.js应用程序,使用了相当多的材料、场景、呈现缓冲区等。我们只能刷新/重新启动它几次,而且它会在几个问题中的一个问题上失败;所有这些都等于耗尽了WebGL资源。
我在window.onbeforeunload上添加了一个清理例程,它在支持它的对象上调用that ()方法;材料、renderBuffers和几何图形。我不相信我已经抓住了所有的资源,但这似乎已经足够了,因为我每隔5秒钟就能刷新半个小时。
问题是:1触发的最佳方法是什么?window.onbeforeunload看起来相当有效,但也许有理由选择其他的方法?
2执行这样一次清理的最佳方法是什么?最好在清理所有WebGL资源的呈现器上进行处理。(我不关心javascript对象,因为浏览器似乎很有能力清理这些对象。)
我在这里见过相关的问题(如有关清理场景的问题),但我对彻底的清理感兴趣。我想在较低的WebGL级别上的任何答案对于这个全局清理也是有效的;这可能不只是针对一些three.js资源,因为它无法计算出这些较小的清理的范围。
发布于 2013-07-31 22:48:10
通常,当一个网页被卸载时,执行任何类型的清理并不是该页面的责任;它的资源只是一次性被丢弃。否则,草率或恶意页面经常会造成麻烦。WebGL也没什么不同。
您应该将您所看到的行为视为浏览器错误,找出一个简单的测试页面来演示问题,并向浏览器供应商报告。这将解决每个人的问题,并减少您的维护负担,从长远来看。
发布于 2013-08-01 22:27:40
这是一个已知的问题在铬28,并已修复在下一个版本。您可以下载测试版并亲自查看。
https://stackoverflow.com/questions/17975261
复制相似问题