0

かなりの数のマテリアル、シーン、レンダー バッファーなどを使用するかなり大規模な three.js アプリケーションがあります。数回しか更新/再起動できず、いくつかの問題のうちの 1 つで失敗します。そのすべてが WebGL リソースの不足につながりました。

window.onbeforeunload にクリーンアップ ルーチンを追加しました。これは、それをサポートするオブジェクトで dispose() メソッドを呼び出します。マテリアル、renderBuffers、およびジオメトリ。すべてのリソースを取得したとは確信していません。でも、30 分間は 5 秒ごとにリフレッシュできたので、それで十分だったようです。

質問は次のとおりです。[1]そのようなクリーンアップをトリガーする最良の方法は何ですか? window.onbeforeunload は非常に効果的だと思われますが、代替手段を選択する理由があるのでしょうか?

[2]そのようなクリーンアップを実行する最良の方法は何ですか? すべての WebGL リソースをクリーンアップするレンダラーを破棄するとよいでしょう。(ブラウザはそれらをクリーンアップできるように見えるので、javascript オブジェクトについては心配していません。)

ここで関連する質問を見てきました。たとえば、シーンのクリーンアップですが、完全なクリーンアップに興味があります。下位の WebGL レベルでの回答は、このグローバル クリーンアップでも機能すると思います。これらの小さなクリーンアップの範囲を理解できないため、一部の three.js リソースだけではない可能性があります。

4

2 に答える 2

1

一般に、Web ページがアンロードされるとき、ページは何らかの種類のクリーンアップを実行する必要はありません。そのリソースは単純に一度に破棄されます。そうしないと、ずさんなページや悪意のあるページが問題を引き起こすことがよくあります。WebGL も例外ではありません。

表示されている動作をブラウザのバグとして扱い、問題を示す簡単なテスト ページを見つけて、それをブラウザ ベンダーに報告する必要があります。これにより、すべての人の問題が解決され、長期的にはメンテナンスの負担が軽減されます。

于 2013-07-31T22:48:10.467 に答える