コードを実行すると、次のようになります。
1 秒間に 4 ~ 12 MB の間で常にピークに達します。
draw() 関数または settarget() 関数で可能性が高いように絞り込みましたが、何がそんなに多くのゴミを引き起こしているのかわかりません。
何がこれほど多くのゴミを引き起こしているのでしょうか?
コードを実行すると、次のようになります。
1 秒間に 4 ~ 12 MB の間で常にピークに達します。
draw() 関数または settarget() 関数で可能性が高いように絞り込みましたが、何がそんなに多くのゴミを引き起こしているのかわかりません。
何がこれほど多くのゴミを引き起こしているのでしょうか?
Chrome の Heap Profilerを使用して収集できることから、多くの配列、数値、および文字列を作成しているように見えます。(このようなアニメーションでは驚くべきことではありません。) この行は疑わしいように見えます。
rgbcolor = 'rgb('+Math.floor(Math.random()*256)+','+Math.floor(Math.random()*256)+','+Math.floor(Math.random()*256)+')';
これは、すべてのフレームのすべてのドットに対して呼び出され、(少なくとも) 1 つの新しい String オブジェクトと、Math が内部で行うさまざまな Number 関連のものを作成します。
とはいえ、これが実際に問題を引き起こしているのでしょうか、それともノコギリのメモリ プロファイルに悩まされているだけなのでしょうか? この種のメモリ プロファイルは、ガベージ コレクションされたランタイムではまったく珍しいことではありません。ノコギリ波のピークが時間の経過とともに増加しないという事実は、実際にはメモリ リークがどこにもないことを示しているようです。また、Chrome (および最新のブラウザーのほとんど) は、このような一時的なオブジェクトを作成するコードの最適化に非常に優れています。
私は実際にこの行をここにあると思います:
window.setTimeout(callback, 1000/60);.
コンソールツールの下の詳細Memory
を見ると、アニメーションフレームが起動され、次に再起動されてから、切り上げられたすべて17ms
が1000/60
再起動されていることがわかります。
次の宛先への最初の呼び出しを開くことができます。
(function animloop() {
window.requestAnimFrame(animloop);
17ms
そして、その後ごとに、プロセスが再び生成されたことがわかります。