ホームページ >ウェブフロントエンド >CSSチュートリアル >CSSアニメーションを使用したハードウェアアクセラレーションの紹介
ここ数年、ハードウェアの加速と、ウェブページのアニメーションを改善するのに役立つ方法についてよく聞いてきました。しかし、経験豊富な開発者の多くは、ハードウェアの加速がどのように機能するか、そしてそれを適切に使用してアニメーションを輝かせる方法を知らないと思います。
この用語自体は、高度な数学に近いもののように聞こえます。この記事では、このテーマに光を当て、フロントエンドプロジェクトでこの手法を利用する方法を示します。キーテイクアウト
以下のデモで上記のコードを試してください:
CODEPENのSitePoint(@SitePoint)によるCSS変換でオーバーラップボールをアニメーション化するペンを参照してください。
今、アニメーションは素晴らしくスムーズです。素晴らしい!では、なぜこれが助けになったのですか?まあ、CSS変換は、左と上部のプロパティを持つアニメーションとは異なり、塗り直しを引き起こしません。アニメーションの実行中にChromeのDevtoolsのタイムラインパネルを見てみましょう:
CSS変換の場合のタイムラインを見てください:
ご覧のとおり、アニメーション中に緑色のバーはありません。
補充プロセスを追跡するためにChromeのDevtoolsで利用できるもう1つの機能は、「塗料が点滅することを可能にする」ことです。このオプションは、devtoolsを開き、ESCキーを押してから「レンダリング」タブを選択することで見つけることができます。この機能がオンになると、緑色のボックス(つまり、ペイント長方形)が塗り直された領域の周りに表示されます。左と上の例では、ボールにはアニメーションプロセス全体の緑色のボックスがあり、塗り直しを示しています。
一方、CSS変換の例では、ペイント長方形は最初と最後のアニメーションフレームにのみ表示されます。では、変換はどのように正確にアニメーションを塗り直さずにレンダリングしますか?基本的な答えは、CSS変換がハードウェアアクセラレーションを利用するGPUメモリで直接発生し、ソフトウェアのレンダリングを回避することです。これをもっと詳細に見てみましょう。
ハードウェアアクセラレーションの仕組み
ブラウザがページのマークアップを受信すると、DOMツリーを構築するために解析します。 DOMツリーとCSSにより、ブラウザはレンダリングツリーを構築できます。レンダリングツリーは、レンダリングオブジェクトで構成されています。これは、ページ上にレンダリングされる要素です。各レンダリングオブジェクトはグラフィックレイヤーに割り当てられます。各レイヤーは、テクスチャとしてGPUにアップロードされます。ここでのトリックは、3Dグラフィックスの場合のように、レイヤーが再塗装せずにGPUで変換される可能性があることです。これらの変換は、個別のコンポジタプロセスによって行われます。 Chromeの構成に関する詳細については、こちらをご覧ください。 この例では、CSS変換はGPUで直接変換できる新しい複合層を作成します。 ChromeのDevtoolsは、「show layer borders」オプションを使用して複合層を表示できます。各複合層にはオレンジ色の境界線があります
CSS変換を伴う私たちのボールにはオレンジ色の境界線があり、別々の複合層に移動されます。
尋ねるかもしれません:ブラウザはいつ別のコンポジットレイヤーを作成しますか?
次の場合には次のようにします
3DまたはパースペクティブCSS変換の場合(例では)3D変換と2D変換の違いは、3D変換によりブラウザが事前に個別のコンポジットレイヤーを作成するのに対し、2D変換はその場でそれを行うことです。アニメーションの開始時に、新しいコンポジットレイヤーが作成され、テクスチャがGPUにロードされ、再塗装が開始されます。次に、アニメーションはGPUのコンポジタによって実行されます。アニメーションが終了すると、追加の複合レイヤーが削除され、別の再塗装操作が行われます。
GPUの要素をレンダリング
不透明
これが行うことは、3D変換を実行したいことをブラウザに知らせることです。これにより、ブラウザは別のレイヤーを作成し、事前に要素をGPUに移動するため、ハードウェアアクセラレーションがトリガーされます。
繰り返しますが、ボールの動きはぎくしゃくしています。これは、背景がぼやけているために各塗り直し操作の費用がかかりすぎるために起こります。
次に、コンテナに変換ハックを追加しましょう。<span><span>.ball-running</span> { </span> <span>animation: run-around 4s infinite; </span><span>} </span> <span><span>@keyframes run-around</span> { </span> <span>0%: { </span> <span>top: 0; </span> <span>left: 0; </span> <span>} </span> <span>25% { </span> <span>top: 0; </span> <span>left: 200px; </span> <span>} </span> <span>50% { </span> <span>top: 200px; </span> <span>left: 200px; </span> <span>} </span> <span>75% { </span> <span>top: 200px; </span> <span>left: 0; </span> <span>} </span><span>}</span>
CodepenのSitePoint(@SitePoint)によるハードウェアアクセラレーションを備えた左/上部プロパティをアニメーション化するペンを参照してください。
結果はそれほど悪くなく、アニメーションはうまく機能します。なぜ?これで、ぼやけた塗装防止背景が別の複合層に移動し、各アニメーションステップでのボールの再塗装が安いためです。注意してハードウェアアクセラレーションを使用します
最も重要な問題は、メモリに関連しています。 GPUにテクスチャが多すぎると、メモリの問題が発生する可能性があります。これはモバイルデバイスで非常に重要であり、モバイルブラウザをクラッシュすることもできます。結果に注意し、ページ上のすべての要素にハードウェアアクセラレーションを使用しないでください。
フォントレンダリング
GPUでのレンダリングは、フォントアンチエリアスに影響します。これは、GPUとCPUに異なるレンダリングメカニズムがあるために起こります。したがって、アニメーションの最後にハードウェアアクセラレーションをオフにしたとしても、アニメーション中にテキストがぼやけて表示されます。キース・クラークによるこの投稿のフォントレンダリング問題の詳細については、詳細を読むことができます。
「変換ハック」を使用して個別のコンポジットレイヤーを作成する必要性は面倒です。ブラウザは間違いなくこれを行うための簡単な方法を提供する必要があります。そのため、ウィルチェンジプロパティが導入されました。この機能により、どのプロパティが変更されるかブラウザに通知できるため、ブラウザはそれに対応する最適化を事前に作成できます。ブラウザに変換プロパティが変更されることを通知する例は次のとおりです。
nick salloumによるCSSの概要
<span><span>.ball-running</span> { </span> <span>animation: run-around 4s infinite; </span><span>} </span> <span><span>@keyframes run-around</span> { </span> <span>0%: { </span> <span>top: 0; </span> <span>left: 0; </span> <span>} </span> <span>25% { </span> <span>top: 0; </span> <span>left: 200px; </span> <span>} </span> <span>50% { </span> <span>top: 200px; </span> <span>left: 200px; </span> <span>} </span> <span>75% { </span> <span>top: 200px; </span> <span>left: 0; </span> <span>} </span><span>}</span>CSSについて知る必要があるすべてのものは、Sara Soueidanによる財産を変更します。
結論
「変換ハック」を使用して、GPUで要素を強制する方法を理解してください。
グラフィックス処理ユニット(GPU)は、ハードウェアアクセラレーションのCSSアニメーションで重要な役割を果たします。グラフィックと画像処理のレンダリングを担当します。 CSSアニメーションがハードウェアアクセラレーションされている場合、GPUは中央処理ユニット(CPU)からアニメーションをレンダリングするタスクを引き継ぎます。これにより、GPUはそのようなタスクを処理するように特別に設計されているため、よりスムーズで高速で効率的なアニメーションが得られます。
ハードウェア加速CSSアニメーションを使用することに欠点はありますか?パフォーマンスを大幅に改善できます。潜在的な欠点があります。主な懸念の1つは、互換性の問題です。すべてのデバイスやブラウザがハードウェアの加速をサポートしているわけではなく、それが一貫性のないユーザーエクスペリエンスにつながる可能性があります。さらに、ハードウェアアクセラレーションの過剰使用は、モバイルデバイスの懸念事項になる可能性があります。
はい、ハードウェアアクセラレーションはCSS遷移で使用できます。 「変換」プロパティを使用することにより、GPUをトリガーして遷移をレンダリングし、よりスムーズで効率的なアニメーションを実現できます。
2Dアニメーションにハードウェアアクセラレーションを使用できますか? CSSコードで「変換」プロパティを使用することにより、GPUをトリガーしてアニメーションをレンダリングすることができます。 >
ハードウェアアクセラレーション用のCSSコードの最適化には、「変換」プロパティを使用してアニメーションのレンダリングのためにGPUをトリガーします。また、ハードウェアの加速を過度に使用することを避けることも重要です。これにより、消費電力が増加する可能性があるためです。さらに、さまざまなデバイスやブラウザでウェブサイトまたはアプリケーションをテストすることで、互換性を確保するのに役立ちます。以上がCSSアニメーションを使用したハードウェアアクセラレーションの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。