0

CSS3とtranslate3dをテストするための小さなアプリケーションを開発しています。アイデアは、画面上でランダムに移動する複数のDIVをレンダリングすることです。これは一種のパーティクルシステムです。おそらくWebGLまたはCanvasを使用してパフォーマンスを向上させることができますが、モバイルブラウザーでもスムーズに動作させたいので、パフォーマンスにはDOM操作の方が適していると思いました。

このURLで数時間後に結果が見つかります

DIVの数を増やすために可能な限り最高のパフォーマンスを達成したいと思います。

しかし、ここに私の問題があります。ChromeまたはSafariでTimeLineを使用したときに見つけた「レンダリングの問題」があります。時々、ページ全体がレンダリングされ、SafariiPhoneまたはChromeAndroid+iPhoneで認識できる小さなラグが生成されます。

ですから、もしあなたの一人が挑戦に挑戦しているなら、私は多くのことを試みましたが、この高価な再描画を避ける方法を理解していませんでした。

ところで、このスニペットを最適化するための追加のアイデアがある場合は、遠慮なく返信してください。

ありがとう

----------更新1-----------

Ariyaのアドバイスに基づいて、コード(url)で更新し、左上のみを使用して別のテストを追加しました。Chromeが提供するFPSカウンターに基づくと、ほぼ同じフレームレートの左上のプロパティを使用すると、fpsがより安定していることがわかります。CSS3バージョンを最適化してパフォーマンスをさらに向上させることができるかどうか考えていますか?GPUアクセラレーションを使用したcss3の方が高速ですが、おそらく何か間違ったことをしました。

----------アップデート2-----------

requestAnimFrameを使用するようにコードを更新し、再描画が必要な場合にのみコードを起動します。そして、cssで定義したパフォーマンスグレーグラデーションの背景を殺しているのは、頻繁に再描画され、パフォーマンスを殺していることを発見しました。ただし、純粋なパフォーマンスの観点からは、上/左はCSS遷移よりも優れているようです:(。

4

1 に答える 1

1

Google Chrome の開発者ツールでタイムライン プロファイルを見ると、多くのスタイルの再計算があることがわかります。これは、この特定の行で非難されるべきです:

      lastSheet.insertRule('@-webkit-keyframes '+keyframeName+' { ....

つまり、スタイルシートを継続的に変更するとコストが高くなります。この例の要素のアニメーションは、キーフレーム ベースのアニメーションを使用するのではなく、要素を移動することを目的としているため、シンプルなトランジションに単純化することをお勧めします。

于 2013-01-12T06:37:11.090 に答える