24

Chrome Dev Tools v27のタイムラインを使用して、次のコードのメモリ使用量をプロファイリングしています。requestAnimationFrameガベージコレクション

<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv='content-type' content='text/html; charset=UTF-8' /> 
    <title>RAF</title> 
</head> 
    <body> 
    <script type='text/javascript' charset='utf-8'> 
     var frame = function() { 
     window.webkitRequestAnimationFrame(frame); 
     }; 
     window.webkitRequestAnimationFrame(frame); 
    </script> 
    </body> 
</html> 

注意は簡単です。しかし、最終的には、ガベージコレクタがメモリを再利用していることを示す歯のパターンが表示されます。

Chrome Dev Tools Timeline

RAFデフォルトでゴミオブジェクトを作成していますか?これを避ける方法はありますか?どうも。私はクロームが問題を持っているかもしれないと思う

+0

関連する。この分野にはさらに潜在的な問題があるようです。おそらく、メモリ全体の監視ツールの出力を塩分で取り込むことをお勧めしますか?正直なところ、私はこのことから何を締結すべきか本当に分かりません。 http://stackoverflow.com/questions/19395565/chrome-requestanimationframe-issues –

+0

誰か他の人が同じことをしたいと思っているなら、Imはこれに賞金をあげるつもりです:>それは2つの機能互いにフロッピーを登録する。 –

答えて

2

それは保持サイクルのように見えます。フレーム自体を呼び出しているので、保持カウントが保持され、解放されません。また、プロファイル、タイムライン、またはヒープスタックのいずれかで実行中のコードを監視しているときは、いつでもいくつかの副作用が発生します。

いずれにせよ、私はそれについて心配しません。あなたがあなたのアプリやページのパフォーマンスを上げようとしているなら、もっと大きな問題に対処する必要があります。 JSが16ms以下で完了する限り、誰も気づくことはありません。

最も重要なメモリ/ CPUの問題は、ネットワークコール、PNG/JPGの解凍、DOM要素の作成と破棄、ワーカーではないスレッドの処理/解析、GPUテクスチャの使用不足、 GCはデータを収集するのに時間がかかる。

クロムの120FPS(https://github.com/puppybits/BackboneJS-PerfView)で動作する1,000,000アイテムのスクロールリストを最適化することができました。パフォーマンスツールは、ユーザーが見ることができる最大の問題を見つけるのに役立ち、マイナーなことを心配する必要はありません。

+0

ねえ、そこに!あなたはおそらくrAFアニメーションのためにこのアイデアを使う方法を知っていますか? – thednp

4

enter image description here

私は、次を発見した: 次の2つの「ピンポン」機能のようにあなたのRAFの機能を変更した場合、あなたはたくさんより少ないごみを取得します。最初の最初の「大きなGC」は避けることはできませんが、その後は700kb〜1mbのGCではなく、約50kbの小さなGCしか表示されません。コードは次のようになります:

<script type='text/javascript' charset='utf-8'> 
    window.frameA = function() { 
    window.webkitRequestAnimationFrame(window.frameB); 
    }; 
    window.frameB = function() { 
    window.webkitRequestAnimationFrame(window.frameA); 
    }; 
    window.webkitRequestAnimationFrame(window.frameA); 
</script> 

私はこれがChromeでできると思います。 私はFFでgcの間隔やメモリがほとんど変化しないことに気がついたので、おそらくクロームデバッグに関するものでした(詳細はリンクされたクロムバグレポートを参照してください)。しかし、私はRAFをこのように展開すると自分のゲームで改善が見られました。通常のユーザーマシンでは起こりえない人工的なGCを使わずにデバッグできるようにする必要があります。

+1

私はこれがうまくいくと言うのにショックを受けます。素晴らしい発見、私はあなたがこれを試して何を想像することすらできません。:) – Jaruba

+0

私はこの仕事を見ていません – kevzettler

+0

Kevzettler:それはいつも廃止されている(うまくいけば)ハックでした。あなたはこれをテストしたブラウザバージョンを教えていただけますか?あなたはまだ一般的にgcの問題を観察していますか?私はそれに応じて答えを編集します。 –

関連する問題