0

コードを実行すると、次のようになります。 これ

1 秒間に 4 ~ 12 MB の間で常にピークに達します。

これが完全なものです。

draw() 関数または settarget() 関数で可能性が高いように絞り込みましたが、何がそんなに多くのゴミを引き起こしているのかわかりません。

これがコードです

何がこれほど多くのゴミを引き起こしているのでしょうか?

4

2 に答える 2

1

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 (および最新のブラウザーのほとんど) は、このような一時的なオブジェクトを作成するコードの最適化に非常に優れています。

于 2012-12-12T03:11:49.780 に答える
0

私は実際にこの行をここにあると思います:

 window.setTimeout(callback, 1000/60);. 

コンソールツールの下の詳細Memoryを見ると、アニメーションフレームが起動され、次に再起動されてから、切り上げられたすべて17ms1000/60再起動されていることがわかります。

次の宛先への最初の呼び出しを開くことができます。

(function animloop() {
window.requestAnimFrame(animloop);

17msそして、その後ごとに、プロセスが再び生成されたことがわかります。

于 2012-12-12T03:03:52.667 に答える