2013-07-31 38 views
0

我們有一個相當豐富的three.js應用程序,它使用了很多材質,場景,渲染緩衝區等。我們只能刷新/重新啓動它幾次它會在幾個問題之一上失敗;所有這些都等於耗盡WebGL資源。如何在頁面刷新時清理three.js(或WebGL)

我在window.onbeforeunload上添加了一個清理例程,它在支持它的對象上調用dispose()方法;材料,渲染緩衝區和幾何圖形。我不相信我抓到了所有的資源;但似乎已經足夠,因爲我已經能夠每五秒刷新半小時。

的問題是: [1]什麼是觸發這種清理的最佳方法? window.onbeforeunload似乎相當有效,但也許有理由選擇一些替代方案?

[2] 執行這種清理的最佳方式是什麼?在清理所有WebGL資源的渲染器上配置一個配置會很好。 (我不關心javascript對象,因爲瀏覽器似乎很清楚這些對象。)

我在這裏看到過相關的問題;例如清理場景,但我對完整的清理感興趣。我猜在較低的WebGL級別上的任何答案都可以用於全局清理;這可能不僅僅只是一些three.js資源,因爲它無法解決這些小型清理的範圍。

回答

1

通常,卸載網頁時,頁面不負責執行任何類型的清理;它的資源一下子被全部拋棄。否則,馬虎或惡意網頁經常會造成麻煩。 WebGL也不例外。

您應該將您所看到的行爲視爲瀏覽器缺陷,找出演示問題的簡單測試頁並將其報告給瀏覽器供應商。這將爲所有人解決問題,從長遠來看減輕您的維護負擔。

+0

好點,謝謝。我會在不同的瀏覽器上進行測試(問題出在Chrome上),並嘗試製作一個簡單的頁面來說明錯誤,最好不要使用three.js來儘可能簡單。 –

+0

http://coding.smashingmagazine.com/2012/11/05/writing-fast-memory-efficient-javascript/ – Hobbes

1

這是鉻28中的一個已知問題,已在下一個版本中修復。您可以下載測試版本並親自查看。

+0

Thankyou。我已經平行安裝了Chrome 30,正如你所說,似乎一切正常。 感謝http://stackoverflow.com/questions/3785991/can-i-run-multiple-versions-of-google-chrome-on-the-same-machine-mac-or-window進行並行安裝。 而http://www.oldapps.com/index.php/google_chrome.php針對隱藏在標題爲「谷歌瀏覽器的舊版本」標題下的更高版本(它稱爲開發者) –

+0

讓我大吃一驚。我以爲我犯了一些嚴重的錯誤。我很高興發現這不是我的錯= =] – Hobbes

相關問題