目次
「非メインスレッド」アニメーションとは、メインのJavaScriptスレッドとは別のスレッドでアニメーションを実行することを指します。これにより、メインスレッドがビジーであってもスムーズに実行できるため、アニメーションのパフォーマンスが大幅に向上する可能性があります。これは、CSSアニメーション、Webワーカー、またはWebアニメーションAPIを使用することで実現できます。
Web Animations APIは、CSSアニメーションと同じように効率的に機能するJavaScriptを使用してアニメーションを作成する方法を提供します。 JavaScriptからアニメーションを直接制御および操作できるため、CSSアニメーションよりも柔軟性が高くなります。ただし、これは依然として実験的なテクノロジーであり、すべてのブラウザーで完全にサポートされていません。
ホームページ ウェブフロントエンド jsチュートリアル Jank-Free JavaScriptアニメーションの7つのパフォーマンスのヒント

Jank-Free JavaScriptアニメーションの7つのパフォーマンスのヒント

Feb 15, 2025 am 09:13 AM

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 までご連絡ください。

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Python vs. JavaScript:学習曲線と使いやすさ Python vs. JavaScript:学習曲線と使いやすさ Apr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

C/CからJavaScriptへ:すべてがどのように機能するか C/CからJavaScriptへ:すべてがどのように機能するか Apr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptとWeb:コア機能とユースケース JavaScriptとWeb:コア機能とユースケース Apr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScript in Action:実際の例とプロジェクト JavaScript in Action:実際の例とプロジェクト Apr 19, 2025 am 12:13 AM

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptエンジンの理解:実装の詳細 JavaScriptエンジンの理解:実装の詳細 Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Python vs. JavaScript:コミュニティ、ライブラリ、リソース Python vs. JavaScript:コミュニティ、ライブラリ、リソース Apr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

Python vs. JavaScript:開発環境とツール Python vs. JavaScript:開発環境とツール Apr 26, 2025 am 12:09 AM

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

JavaScript通訳者とコンパイラにおけるC/Cの役割 JavaScript通訳者とコンパイラにおけるC/Cの役割 Apr 20, 2025 am 12:01 AM

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

See all articles