検索
ホームページウェブフロントエンドjsチュートリアルJank-Free JavaScriptアニメーションの7つのパフォーマンスのヒント

7 Performance Tips for Jank-free JavaScript Animations

キーポイント

  • より良いアニメーションパフォーマンスを取得し、投稿または描画操作をトリガーするCSSプロパティのアニメーションを回避するには、transformopacityなどの最新のブラウザーによって最適化されたプロパティを使用します。
  • アニメーション化される要素は、CSS
  • 属性を使用して独自のレイヤーに宣伝できますが、これはメモリと管理が必要なため、注意して行う必要があります。 will-change この方法は、ブラウザの最適な時期にアニメーションコードを実行するため、
  • requestAnimationFrameに置き換えて、ラグのリスクを軽減し、よりスムーズなアニメーションを確保します。 setTimeout/setInterval HTML5キャンバスでの複雑な描画操作の場合、画面外のキャンバスを使用して、画面外のキャンバスですべての描画操作を実行し、各フレームでオフスクリーンキャンバスを描画することでパフォーマンスを向上させます。
  • Webアニメーションの役割は、単純な装飾効果からユーザーエクスペリエンスにおける特定の役割に進化しました。たとえば、ユーザーがアプリケーションと対話する際に視覚的なフィードバックを提供し、アプリケーションの目標を達成するためにユーザーに焦点を合わせ、視覚的なヒントを提供するための視覚的なヒントを提供するユーザーはアプリケーションインターフェイスなどを理解しています。

これらの重要なタスクに対してWebアニメーションが能力があることを確認するために、ユーザーがアプリケーションで実行しようとすることを妨げるものではなく、ユーザーが援助としてそれを見ることができるように、動きを適切なタイミングでスムーズに実行する必要があることが重要です。

アニメーションのデザインが悪い可能性があります - jankfree.orgによって説明されているjank:

最新のブラウザは、デバイスのリフレッシュレートと同期して画面上のコンテンツを更新しようとします。今日のほとんどのデバイスでは、スクリーンは毎秒60回、つまり60Hzを再リッシュします。画面に何らかの動きがある場合(スクロール、トランジション、アニメーションなど)、ブラウザは毎秒60フレームを作成してリフレッシュレートに合わせて作成する必要があります。 st音とは、Webサイトまたはアプリケーションがリフレッシュレートに追いついていないときにユーザーが見ているst音、ジッター、または簡単な一時停止です。

アニメーションが詰まっている場合、ユーザーは最終的にアプリケーションとやり取りすることがますます少なくなり、成功に悪影響を及ぼします。明らかに、誰もそれを望んでいません。
この記事では、JavaScriptアニメーションの問題を解決し、60fps(1秒あたりのフレーム)の目標を簡単に達成し、ネットワーク上のスムーズな動きを可能にするために、いくつかのパフォーマンスのヒントを収集しました。

1

CSSトランジション/CSSキーフレームまたはJavaScriptを使用してCSSプロパティをアニメーション化することを計画している場合、どのプロパティがページジオメトリを変更するか(レイアウト)を理解します。つまり、ページ上の他の要素の位置を再計算する必要があります。描画操作を伴う - これは非常に重要です。レイアウトと描画タスクは、特にページに複数の要素がある場合、ブラウザの処理が非常に高価です。したがって、操作を投稿または描画するCSSプロパティのアニメーション化を避け、transformopacityなどのプロパティに固執する場合、最新のブラウザーが最適化されているため、アニメーションパフォーマンスに大幅な改善が見られます。

CSSトリガーでは、最初の変更を含む、各最新のブラウザでトリガーするアクションに関する情報を含むCSSプロパティの最新リストを見つけることができます。

7 Performance Tips for Jank-free JavaScript Animations

合成操作のみをトリガーするCSSプロパティを変更することは、Webアニメーションのパフォーマンスを最適化するために実行できるシンプルで効果的なステップです。

2は、自分のレイヤーにアニメーション化される要素を上げます(注意してください)アニメーション化される要素が独自のシンセサイザーレイヤーにある場合、一部の最新のブラウザはハードウェアアクセラレーションを使用して作業をGPUにオフロードします。適切に使用すると、これはアニメーションのパフォーマンスにプラスの影響を与える可能性があります。

要素を独自のレイヤーに配置するには、アップグレードする必要があります。 1つの方法は、CSS

プロパティを使用することです。このプロパティにより、開発者は、ブラウザが事前に必要な最適化を行うことができるように、要素にいくつかの変更を加えたいと事前にブラウザに警告することができます。

will-changeただし、あまりにも多くの要素を自分のレイヤーに持ち上げたり、膨張させたりすることはお勧めしません。実際、ブラウザによって作成されたすべてのレイヤーには、メモリと管理が必要であり、高価な場合があります。

Nick SalloumのCSSの紹介でのその利点と短所の使用方法について詳しく知ることができます。

will-change 3を使用します

javaScriptアニメーションは通常、

またはを使用してエンコードされます。 requestAnimationFrame setTimeout/setIntervalコードは次のとおりです

これは機能しますが、遅延のリスクは高く、コールバック関数はフレームのある時点で実行され、最後に1つ以上のフレームが欠落する可能性があるためです。今日、

と呼ばれるスムーズなWebアニメーション(DOMアニメーション、キャンバスなど)に設計されたネイティブJavaScriptメソッドを使用できます。 setInterval() setTimeout()

ブラウザの最適な時期にアニメーションコードを実行します。通常はフレームの先頭にあります。

あなたのコードは次のようになるかもしれません:
var timer;
function animateElement() {
  timer = setInterval(function() {
    // 动画代码在此处
  }, 2000);
}

// 要停止动画,请使用 clearInterval
function stopAnimation() {
  clearInterval(timer);
}
var timer;
function animateElement() {
  timer = setInterval(function() {
    // 动画代码在此处
  }, 2000);
}

// 要停止动画,请使用 clearInterval
function stopAnimation() {
  clearInterval(timer);
}
SitePointでのTim Evkoの「RequestAnimationFrameによる更新パフォーマンス」は、

を使用したエンコードに関する素晴らしいビデオ紹介を提供します。 requestAnimationFrame()

4コードのアニメーションからイベントを分離します 1秒あたり60フレームで、ブラウザはその仕事をするためのフレームあたり16.67mしかありません。あまり時間がないので、コードを合理化することは、アニメーションの流encyさに影響を与える可能性があります。 スクロール、サイズ変更、マウスイベント、および画面の更新を処理するコードからのその他のイベントを処理するコードのデカップリングは、アニメーションコードのパフォーマンスを最適化する良い方法です。 この最適化のヒントと関連するサンプルコードの詳細な議論については、Paul Lewisの作成をチェックしてください。

5

ブラウザは、メインスレッドを使用してJavaScriptを実行し、スタイル計算、レイアウト、描画操作などの他のタスクを実行します。長期にわたるJavaScriptコードは、これらのタスクに悪影響を与える可能性があり、フレームがスキップされ、アニメーションがst音を発生させる可能性があります。そのため、コードを簡素化することは、アニメーションがスムーズに実行されるようにするための素晴らしい方法です。 requestAnimationFrame()

DOMへのアクセスを必要としない複雑なJavaScript操作については、Webワーカーの使用を検討してください。ワーカースレッドは、ユーザーインターフェイスに影響を与えることなくタスクを実行します。

6ブラウザ開発者ツールを使用して、パフォーマンスの問題を制御します ブラウザの開発者ツールは、JavaScriptコードまたはサードパーティライブラリを実行するブラウザの難易度を監視する方法を提供します。また、フレームレートなどに関する実用的な情報も提供します。

Webページを右クリックしてCheck In Contextメニューを選択して、Chrome DevToolsにアクセスできます。たとえば、パフォーマンスツールを使用してWebページを録音すると、そのページのパフォーマンスボトルネックを詳細に理解できます。

「録音」ボタンをクリックして、数秒後に録音を停止します:

この時点で、ページのパフォーマンスを分析するのに役立つ多くのデータが必要です。

このChrome DevToolsガイドは、Chromeブラウザ内のパフォーマンスや他の多くのタイプのデータを分析するために、DevToolsを最大限に活用するのに役立ちます。 Chromeが選択したブラウザでない場合は、今日のほとんどの最新のブラウザには、コードを最適化するために使用できる強力なDevToolsが付属しているため、問題ありません。

7 Performance Tips for Jank-free JavaScript Animations

7

この手法は、HTML5キャンバスコードの最適化に特に関連しています。

フレームに複雑な描画操作が含まれている場合、変更が発生したときにすべての描画操作を1回または1回だけ行い、各フレームにオフスクリーンキャンバスのみを描画することです。

MDNの最適化キャンバス記事のこのヒントについて詳細な情報とコードの例などを見つけることができます。

結論

コードパフォーマンスの最適化は、今日のネットワークでのユーザーの期待に応えたくない場合に必要なタスクですが、決して簡単ではありません。アニメーションのパフォーマンスの低下にはいくつかの理由があるかもしれませんが、上記のヒントを使用しようとすると、最も一般的なアニメーションパフォーマンストラップを避けて、ウェブサイトまたはアプリのユーザーエクスペリエンスを改善するための大きな一歩を踏み出します。

LagsのないJavaScriptアニメーションのFAQ(FAQ) JavaScriptアニメーションの「st音」の概念は何ですか?

「Stutter」とは、Webサイトまたはアプリケーションがリフレッシュレートに追いついていないときにユーザーが見ているst音、ジッター、または単純な一時停止を指します。 JavaScriptアニメーションでは、フレームレートが毎秒標準60フレームを下回っているときにラグが発生する可能性があります。これにより、スムーズなアニメーションが少なくなり、視覚的に魅力的ではなくなり、ユーザーエクスペリエンスに悪影響を与える可能性があります。

スムーズなJavaScriptアニメーションを確保する方法は?

JavaScriptアニメーションをスムーズにするには、コードを最適化して、1秒あたりの安定した60フレームを維持します。これは、ブラウザがアニメーションを最適化できるようにする

メソッドを使用することで実現できます。また、CSSトランジションまたはアニメーションを使用してシンプルなアニメーションを使用することもできます。これは、一般にJavaScriptよりも効率的であるためです。さらに、レイアウトジッターは、DOMの読み取りおよび書き込み操作を一緒にバッチすることで回避されます。

JavaScriptアニメーションにおけるその役割は何ですか?

JavaScriptのメソッドは、スムーズなアニメーションを作成するための重要なツールです。ブラウザにアニメーションを実行したいことを指示し、ブラウザに指定された関数を呼び出して次の塗り直しの前にアニメーションを更新するように依頼します。この方法により、ブラウザがアニメーションを最適化することができ、よりスムーズで効率的なアニメーションをもたらします。 requestAnimationFrame

なぜCSSの移行またはアニメーションがJavaScriptよりも効率的であるのですか?

requestAnimationFrame CSSの遷移とアニメーションは、ブラウザのシンセサイザースレッドで処理され、メインのJavaScriptスレッドから分離されているため、JavaScriptよりも効率的になる場合があります。これは、メインスレッドが他のタスクで忙しい場合でも、スムーズに実行できることを意味します。さらに、特定のプロパティは、再描画を引き起こすことなくCSSでアニメーション化することができ、特に効率的になります。

レイアウトジッターとは何ですか?また、JavaScriptアニメーションでそれを避ける方法は? requestAnimationFrame

レイアウトジッターとは、JavaScriptを繰り返しDOMに読み書きすることを指し、ブラウザがレイアウトを複数回再計算し、非効率的でutter音を立てるアニメーションをもたらします。これは、domの読み取りと書き込み操作を一緒にバッチすることで回避できます。たとえば、インターリーブの読み取りと書き込みの代わりに、すべての読み取りを行うことができ、次にすべての書き込みを行うことができます。

will-change属性最適化JavaScriptアニメーションを使用する方法は?

CSSの

プロパティを使用すると、必要になる前に適切な最適化を設定できるように、要素にどのようなタイプの変更を作成するかを事前にブラウザに通知することができます。これにより、アニメーションのパフォーマンスが大幅に向上する可能性があります。ただし、ブラウザが最適化に時間がかかりすぎる可能性があるため、慎重に使用してください。 will-change JavaScriptアニメーションでは、

およびtransformプロパティは何を意味しますか? opacity

cssの

およびtransformプロパティは、アニメーションに特に効率的です。これは、これらのプロパティの変更を、レイアウトや描画なしでブラウザのシンセサイザースレッドで処理できるためです。これは、メインのJavaScriptスレッドがビジーであっても、スムーズに実行できることを意味します。 opacity

Webワーカーを使用してJavaScriptアニメーションのパフォーマンスを向上させる方法は?

JavaScriptのWebワーカーを使用すると、メインの実行スレッドとは別に、バックグラウンドでスクリプトを実行できます。これは、メインスレッドをブロックして遅延を引き起こすことなく、計算集約型タスクを処理できることを意味します。ただし、DOMやWeb APIにアクセスできないなど、いくつかの制限があります。

「非メインスレッド」アニメーションとは何ですか、JavaScriptアニメーションにどのように利益をもたらしますか?

「非メインスレッド」アニメーションとは、メインのJavaScriptスレッドとは別のスレッドでアニメーションを実行することを指します。これにより、メインスレッドがビジーであってもスムーズに実行できるため、アニメーションのパフォーマンスが大幅に向上する可能性があります。これは、CSSアニメーション、Webワーカー、またはWebアニメーションAPIを使用することで実現できます。

Web Animations APIを使用して効率的なJavaScriptアニメーションを作成する方法は?

Web Animations APIは、CSSアニメーションと同じように効率的に機能するJavaScriptを使用してアニメーションを作成する方法を提供します。 JavaScriptからアニメーションを直接制御および操作できるため、CSSアニメーションよりも柔軟性が高くなります。ただし、これは依然として実験的なテクノロジーであり、すべてのブラウザーで完全にサポートされていません。

以上がJank-Free JavaScriptアニメーションの7つのパフォーマンスのヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Java vs JavaScript:開発者向けの詳細な比較Java vs JavaScript:開発者向けの詳細な比較May 16, 2025 am 12:01 AM

Javaandjavascriptaredistinctlanguages:javaisusedforenterpriseandmobileapps、whilejavascriptisforinteractivewebpages.1)javaiscompiled、staticatically、andrunsonjvm.2)javascriptisisterted、dynamsornoded.3)

JavaScriptのデータ型:ブラウザとNodejsに違いはありますか?JavaScriptのデータ型:ブラウザとNodejsに違いはありますか?May 14, 2025 am 12:15 AM

JavaScriptコアデータ型は、ブラウザとnode.jsで一貫していますが、余分なタイプとは異なる方法で処理されます。 1)グローバルオブジェクトはブラウザのウィンドウであり、node.jsのグローバルです2)バイナリデータの処理に使用されるNode.jsの一意のバッファオブジェクト。 3)パフォーマンスと時間の処理にも違いがあり、環境に従ってコードを調整する必要があります。

JavaScriptコメント://および / * *を使用するためのガイドJavaScriptコメント://および / * *を使用するためのガイドMay 13, 2025 pm 03:49 PM

javascriptusestwotypesofcomments:シングルライン(//)およびマルチライン(//)

Python vs. JavaScript:開発者の比較分析Python vs. JavaScript:開発者の比較分析May 09, 2025 am 12:22 AM

PythonとJavaScriptの主な違いは、タイプシステムとアプリケーションシナリオです。 1。Pythonは、科学的コンピューティングとデータ分析に適した動的タイプを使用します。 2。JavaScriptは弱いタイプを採用し、フロントエンドとフルスタックの開発で広く使用されています。この2つは、非同期プログラミングとパフォーマンスの最適化に独自の利点があり、選択する際にプロジェクトの要件に従って決定する必要があります。

Python vs. JavaScript:ジョブに適したツールを選択するPython vs. JavaScript:ジョブに適したツールを選択するMay 08, 2025 am 12:10 AM

PythonまたはJavaScriptを選択するかどうかは、プロジェクトの種類によって異なります。1)データサイエンスおよび自動化タスクのPythonを選択します。 2)フロントエンドとフルスタック開発のためにJavaScriptを選択します。 Pythonは、データ処理と自動化における強力なライブラリに好まれていますが、JavaScriptはWebインタラクションとフルスタック開発の利点に不可欠です。

PythonとJavaScript:それぞれの強みを理解するPythonとJavaScript:それぞれの強みを理解するMay 06, 2025 am 12:15 AM

PythonとJavaScriptにはそれぞれ独自の利点があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1. Pythonは、データサイエンスやバックエンド開発に適した簡潔な構文を備えた学習が簡単ですが、実行速度が遅くなっています。 2。JavaScriptはフロントエンド開発のいたるところにあり、強力な非同期プログラミング機能を備えています。 node.jsはフルスタックの開発に適していますが、構文は複雑でエラーが発生しやすい場合があります。

JavaScriptのコア:CまたはCの上に構築されていますか?JavaScriptのコア:CまたはCの上に構築されていますか?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc;それは、解釈されていることを解釈しました。

JavaScriptアプリケーション:フロントエンドからバックエンドまでJavaScriptアプリケーション:フロントエンドからバックエンドまでMay 04, 2025 am 12:12 AM

JavaScriptは、フロントエンドおよびバックエンド開発に使用できます。フロントエンドは、DOM操作を介してユーザーエクスペリエンスを強化し、バックエンドはnode.jsを介してサーバータスクを処理することを処理します。 1.フロントエンドの例:Webページテキストのコンテンツを変更します。 2。バックエンドの例:node.jsサーバーを作成します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。