検索
ホームページウェブフロントエンドjsチュートリアルJavaScriptでバックグラウンドタスクをスケジュールする方法

How to Schedule Background Tasks in JavaScript

コアポイント

  • JavaScriptは、一度に1つのタスクしか実行できないブロッキング言語です。これにより、長期にわたるスクリプトがブラウザを反応させないようにする可能性があります。ただし、それほど重要ではないバックグラウンドタスクを、ユーザーエクスペリエンスに直接影響を与えることなく実行するようにスケジュールすることができます。
  • requestIdleCallbackは、ブラウザがアイドル状態であるときに不必要なタスクをスケジュールできるAPIであり、requestAnimationFrameの機能と同様です。ブラウザがアイドル状態でなくても、タスクが設定されたタイム範囲内で実行されるように、タイムアウトオプションで使用できます。
  • requestIdleCallbackは、ブラウザのサポートが限られている実験機能であり、予測不可能な時間を実行したり、約束のタスクを解決するタスクには適していません。 DOMへの直接アクセスを必要とするサポートされていないブラウザーまたはタスクの場合、WebワーカーまたはsetTimeoutなどの代替案を使用できます。

JavaScriptの他のすべてを忘れた場合は、常にこれを覚えておいてください。ブラウザを機能させる魔法の処理ウィザードを想像してください。 HTMLのレンダリング、メニューコマンドへの応答、画面の描画、マウスのクリックの取り扱い、JavaScript関数の実行など、これはすべて単一のスプライトで処理されます。私たちのほとんどと同様に、エルフは一度に1つしかできません。エルフに多くのタスクを投げた場合、それらは大きなToDoリストに追加され、順番に処理されます。 Spriteがスクリプトタグに遭遇するか、JavaScript関数を実行する必要があるときに、他のすべてが停止します。コード(必要に応じて)がダウンロードされ、さらにイベントまたはレンダリングが処理される直前に実行されます。これは、スクリプトが何でもできるため、これが必要です。より多くのコードを読み込み、各DOM要素を削除し、別のURLにリダイレクトするなどです。 2つ以上のスプライトがあっても、最初のスプライトがコードを処理するときに他のスプライトが機能するのを停止する必要があります。これはブロックです。これが、長期にわたるスクリプトがブラウザを反応させない理由です。通常、コードがウィジェットとイベントハンドラーを初期化するため、JavaScriptをできるだけ早く実行する必要があります。ただし、以下など、ユーザーエクスペリエンスに直接影響しないバックエンドタスクがいくつかあります。

  • 分析データを記録します
  • ソーシャルネットワークにデータを送信します(または57の「共有」ボタンを追加します)
  • プレッチコンテンツ
  • プリプロセシングまたはプレレンダリングhtml

これらは時間的に批判的なタスクではありませんが、ページに応答性を維持するために、ユーザーがコンテンツをスクロールしたり対話したりしても実行しないでください。 1つのオプションは、別のスレッドで同時にコードを実行できるWebワーカーを使用することです。これは、プリフェッチと処理に最適ですが、DOMへの直接アクセスや更新を許可しません。独自のスクリプトでこれを回避できますが、Google Analyticsなどのサードパーティのスクリプトが必要ないことを保証することはできません。別の可能性は、setTimeoutなどです。ブラウザは、他のすぐに実行されたタスクが完了した後にsetTimeout(doSomething, 1);関数を実行します。実際、To Doリストの下部に配置されています。残念ながら、この機能は処理要件に関係なく呼び出されます。 doSomething()

requestIdleCallback

は、ブラウザの呼吸の瞬間に必須でないバックエンドタスクをスケジュールするように設計された新しいAPIです。次の塗り直しの前にアニメーションを更新するために関数を呼び出すrequestIdleCallbackを思い出させます。詳細については、requestAnimationFrameこちらをご覧ください。 requestAnimationFrameこのようにサポートするかどうかを確認できます

タイムアウト(ミリ秒単位)を使用してオプションオブジェクトパラメーターを指定することもできます。 requestIdleCallback これにより、ブラウザがアイドル状態であるかどうかに関係なく、機能が最初の3秒以内に呼び出されることが保証されます。

関数を1回だけ呼び出し、次のプロパティで締め切りオブジェクトを渡します。
if ('requestIdleCallback' in window) {
  // requestIdleCallback 受支持
  requestIdleCallback(backgroundTask);
} else {
  // 不支持 - 执行其他操作
  setTimeout(backgroundTask1, 1);
  setTimeout(backgroundTask2, 1);
  setTimeout(backgroundTask3, 1);
}

- オプションのタイムアウトトリガーがtrueに設定されている場合、trueに設定
requestIdleCallback(backgroundTask, { timeout: 3000 });

requestIdleCallback - 実行可能タスクの残りのミリ秒を返す関数

  • didTimeoutタスクには、50ミリ秒以下の実行時間が割り当てられます。この制限を超えるタスクを停止することはありませんが、さらに処理をスケジュールするために
  • を再度呼び出す方が良いです。複数のタスクを順番に実行する簡単な例を作成しましょう。タスクは、関数の参照として配列に保存されます:
  • timeRemaining()
  • で実行すべきではないアクション

timeRemaining()ポール・ルイスがこのトピックに関する彼のブログ投稿で指摘しているように、あなたが実行する作品は片側に分割されるべきです。予測不可能な実行時間(DOMを操作するなど、requestIdleCallbackコールバックを使用して行うのが最適です)の場合は何のためにも機能しません。また、時間が残っていなくても、アイドルコールバックが完了した直後にコールバックが実行されるため、約束を解決(または拒否)するように注意する必要があります。

requestIdleCallbackブラウザサポート

requestIdleCallbackは実験機能であり、仕様はまだ変化しているため、APIの変更に遭遇したときは驚かないでください。 Chrome 47でサポートされています…これは2015年末までに利用できるはずです。また、オペラはこの機能をすぐに入手する必要があります。 MicrosoftとMozillaはどちらもAPIの使用を検討しており、有望に聞こえます。 Appleにはいつものようにニュースはありません。今日試してみたい場合は、Chrome Canary(前者ほど良くないが最新のクールな機能があるChromeの更新バージョン)を使用する最良の方法です。 Paul Lewis(上記)は、シンプルなrequestIdleCallbackシムを作成します。これはAPIの説明を実装しますが、ブラウザのアイドル検出動作をシミュレートできるポリフィルではありません。上記の例のようにsetTimeoutを使用する方法を使用しますが、オブジェクトの検出とコードフォーキングなしでAPIを使用する場合は良いオプションです。今日は限られたサポートがありますが、requestIdleCallbackは、Webパフォーマンスを最大化するのに役立つ興味深いツールかもしれません。しかし、あなたはどう思いますか?以下のコメントセクションであなたの考えを聞きたいです。

JavaScript(FAQ)

のスケジューリングバックエンドタスクの

FAQ

JavaScriptのバックグラウンドタスクAPIは何ですか?

JavaScriptの背景タスクAPIは、メインスレッドがアイドル状態であっても、開発者がバックグラウンドで実行されるタスクをスケジュールできる強力なツールです。このAPIは、メインスレッドをブロックせずにこれらのタスクを実行し、ユーザーエクスペリエンスの不良につながる可能性があるため、多くの計算またはネットワークリクエストを必要とするタスクに特に適しています。バックエンドタスクAPIは、最新のブラウザが提供するより大きなWeb APIの一部であり、従来の

またはsetTimeoutメソッドよりも、バックエンドタスクを処理するためのより効率的でパフォーマンス指向の方法を提供します。 setInterval

バックグラウンドタスクAPIは、

およびsetTimeoutとどのように異なりますか? setInterval

およびsetTimeout関数は、特定の遅延または定期的な間隔で実行するタスクをスケジュールするために使用されるJavaScriptの従来の方法です。ただし、これらのアプローチには、特にパフォーマンスの点でいくつかの制限があります。彼らはメインスレッドで実行されます。つまり、完了するのに時間がかかりすぎると、他のタスクをブロックし、ユーザーエクスペリエンスが悪い可能性があります。一方、バックグラウンドタスクAPIは、メインスレッドとは別にバックグラウンドでタスクを実行します。これは、メインスレッドのパフォーマンスに影響を与えることなく、より集中的なタスクを処理できることを意味します。 setInterval

すべてのブラウザでバックグラウンドタスクAPIを使用できますか?

バックエンドタスクAPIは、最新のブラウザが提供するWeb APIに比較的新しい追加であるため、すべてのブラウザーでサポートされない場合があります。プロジェクトでAPIを使用することを計画している場合、使用する予定のAPIの現在のサポートレベルを常に確認することが最善です。使用できるWebサイトは、さまざまなブラウザーのさまざまなAPIのサポートレベルに関する最新情報を提供します。

バックグラウンドタスクAPIを使用して、バックグラウンドで実行されているタスクをスケジュールする方法は?

バックグラウンドタスクAPIを使用してタスクをスケジュールするには、requestIdleCallbackメソッドを使用できます。このメソッドは、コールバック関数を最初のパラメーターとして取得します。これは、ブラウザーがアイドル状態のときに実行されます。基本的な例は次のとおりです

if ('requestIdleCallback' in window) {
  // requestIdleCallback 受支持
  requestIdleCallback(backgroundTask);
} else {
  // 不支持 - 执行其他操作
  setTimeout(backgroundTask1, 1);
  setTimeout(backgroundTask2, 1);
  setTimeout(backgroundTask3, 1);
}
スケジュールされたバックグラウンドタスクをキャンセルするにはどうすればよいですか?

メソッドを使用してスケジュールされたバックグラウンドタスクをキャンセルする必要がある場合は、

メソッドを使用できます。この方法では、IDをそのパラメーターとしてrequestIdleCallbackで返します。例は次のとおりです。cancelIdleCallback requestIdleCallback タイムアウトオプションの使用は

requestIdleCallback(backgroundTask, { timeout: 3000 });
ですか?

のタイムアウトオプションは、requestIdleCallback

の最大時間(ミリ秒単位で)を指定します。ブラウザは、アイドル状態でなくても、コールバックを実行する前に待機する必要があります。これは、バックグラウンドタスクが特定の時間枠内で実行する必要がある場合に役立ちます。

requestIdleCallbackバックグラウンドタスクのエラーを処理する方法は?

バックグラウンドタスクAPIを使用してスケジュールされたバックグラウンドタスクでのエラーの処理エラーは、他のJavaScriptコードのエラーの処理に似ています。 Try/Catchブロックを使用して、タスクの実行中に発生するエラーをキャッチできます。例は次のとおりです。

node.jsでバックグラウンドタスクAPIを使用できますか?

// 要运行的函数数组
var task = [
  background1,
  background2,
  background3
];

if ('requestIdleCallback' in window) {
  // requestIdleCallback 受支持
  requestIdleCallback(backgroundTask);
} else {
  // 不支持 - 尽快运行所有任务
  while (task.length) {
    setTimeout(task.shift(), 1);
  }
}

// requestIdleCallback 回调函数
function backgroundTask(deadline) {
  // 如果可能,运行下一个任务
  while (deadline.timeRemaining() > 0 && task.length > 0) {
    task.shift()();
  }

  // 如果需要,安排进一步的任务
  if (task.length > 0) {
    requestIdleCallback(backgroundTask);
  }
}
バックエンドタスクAPIは、最新のブラウザが提供するWeb APIの一部であるため、node.jsではデフォルトでは使用できません。ただし、ワーカースレッドや子プロセスの使用など、node.jsでバックグラウンドタスクを実行する他の方法があります。

約束でバックグラウンドタスクAPIを使用できますか?

バックグラウンドタスクAPIは約束を返さないため、Async/awaitで直接使用することはできません。ただし、非同期のコンテキストで使用する必要がある場合は、

メソッドを約束に包むことができます。例は次のとおりです。

requestIdleCallbackバックエンドタスクAPIのいくつかのユースケースは何ですか?

window.requestIdleCallback(() => {
  // 您的后台任务在此处
});
バックグラウンドタスクAPIは、メインスレッドをブロックせずにこれらのタスクを実行できるため、多くの計算またはネットワークリクエストを必要とするタスクに役立ちます。ユースケースのいくつかの例には、APIからのデータの取得と処理、複雑な計算の実行、またはユーザーインタラクションに基づいてUIの更新が含まれます。

以上がJavaScriptでバックグラウンドタスクをスケジュールする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
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サーバーを作成します。

Python vs. Javascript:どの言語を学ぶべきですか?Python vs. Javascript:どの言語を学ぶべきですか?May 03, 2025 am 12:10 AM

PythonまたはJavaScriptの選択は、キャリア開発、学習曲線、エコシステムに基づいている必要があります。1)キャリア開発:Pythonはデータサイエンスとバックエンド開発に適していますが、JavaScriptはフロントエンドおよびフルスタック開発に適しています。 2)学習曲線:Python構文は簡潔で初心者に適しています。 JavaScriptの構文は柔軟です。 3)エコシステム:Pythonには豊富な科学コンピューティングライブラリがあり、JavaScriptには強力なフロントエンドフレームワークがあります。

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

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール