クライアント側の JavaScript プログラミングに精通している場合は、関数の実行を一定期間遅延できる setTimeout 関数と setInterval 関数を使用したことがあるかもしれません。たとえば、次のコードは Web ページに読み込まれると、1 秒後にページのドキュメントに「Hello there」を追加します。
setTimeout(function() {
document.write('
こんにちは。
');}, oneSecond);
setInterval(function() {
document.write('
こんにちは。
');}, oneSecond);
setTimeout 遅延関数を使用して を実行します
setTimeout は、指定された関数を将来 1 回実行するための実行計画を作成できます。次に例を示します。
; var timeout = setTimeout(function() {
console.log("タイムアウト!");
}、timeout_ms);
setTimeout は内部オブジェクトであるタイムアウト ハンドルを返します。これをパラメータとして使用して、タイマーをキャンセルすることができます。それ以外の場合、このハンドルは効果がありません。
clearTimeout を使用して実行計画をキャンセルします
タイムアウト ハンドルを取得したら、次のように、clearTimeout を使用して関数の実行計画をキャンセルできます。
; var timeout = setTimeout(function() {
console.log("タイムアウト!");
}, timeoutTime);
clearTimeout(タイムアウト);
この例では、タイマーはトリガーされず、「タイムアウト!」という言葉も出力されません。次の例のように、将来いつでも実行計画をキャンセルすることもできます。
var timeout = setTimeout(function A() {
console.log("タイムアウト!");
}、2000);
setTimeout(function B() {
}, 1000);
関数の繰り返し実行計画の作成とキャンセル
setInterval は setTimeout に似ていますが、指定された間隔で関数を繰り返し実行します。これを使用すると、プログラムを定期的にトリガーして、クリーニング、収集、ロギング、データ取得、ポーリングなど、繰り返し実行する必要があるタスクを完了できます。次のコードは、コンソールに毎秒「ティック」を出力します。
setInterval(function() {
console.log("tick");
}、ピリオド);
setInterval は、実行計画ハンドルを返します。これは、実行計画をキャンセルするための clearInterval のパラメータとして使用できます。
console.log("tick");
}, 1000);
// …
clearInterval(間隔);
process.nextTick を使用して、イベント ループの次のラウンドまで関数の実行を遅らせます
クライアント側の JavaScript プログラマは、setTimeout(callback,0) を使用してタスクを短期間遅延させることがあります。2 番目のパラメータは 0 ミリ秒で、保留中のイベントがすべて処理された後すぐに待機するように JavaScript ランタイムに指示します。このコールバック関数を実行します。この手法は、すぐに実行する必要のない操作の実行を遅らせるために使用されることがあります。たとえば、ユーザー イベントの処理後に、アニメーションの再生を開始したり、その他の計算を実行したりする必要がある場合があります。
Node では、文字通りの意味の「イベント ループ」と同様に、イベント ループはイベント キューを処理するループ内で実行され、イベント ループの作業プロセスの各ラウンドはティックと呼ばれます。
イベント ループが次の実行ラウンド (次のティック) を開始するたびに、コールバック関数を 1 回呼び出すことができます。これはまさに process.nextTick の原理であり、setTimeout と setTimeout は JavaScript ランタイム内の実行キューを使用します。イベントループを使用しません。
setTimeout(callback, 0) の代わりに process.nextTick(callback) を使用すると、キュー内のイベントが処理された直後にコールバック関数が実行されます。これは、JavaScript のタイムアウト キューよりもはるかに高速です (測定する CPU 時間)。 )。
次のように、イベント ループの次のラウンドまで関数を遅らせることができます:
process.nextTick(function() {
my_expensive_computation_function();
});
注: プロセス オブジェクトは、Node 内の数少ないグローバル オブジェクトの 1 つです。
イベントループのブロック
Node と JavaScript のランタイムはシングルスレッドのイベント ループを使用し、ループするたびに、関連するコールバック関数を呼び出してキュー内の次のイベントを処理します。イベントが実行されると、イベント ループは実行結果を取得して次のイベントを処理し、イベント キューが空になるまでこれが繰り返されます。いずれかのコールバック関数の実行に時間がかかる場合、その間、イベント ループは他の保留中のイベントを処理できなくなり、アプリケーションまたはサービスが非常に遅くなる可能性があります。
イベントを処理するときに、メモリに依存する関数やプロセッサに依存する関数が使用されると、イベント ループが遅くなり、大量のイベントが蓄積されて時間内に処理できなくなったり、キューがブロックされたりすることがあります。
イベント ループをブロックする次の例を見てください:
process.nextTick(function nextTick1() {
var a = 0;
while(true) {
;
}
});process.nextTick(function nextTick2() {
console.log("次のティック");
});
setTimeout(関数タイムアウト() {
console.log("タイムアウト");
}, 1000);
setTimeout を使用すると、コールバック関数が実行計画キューに追加されますが、この例ではキューに追加されません。これは極端な例ですが、プロセッサを大量に使用するタスクを実行すると、イベント ループがブロックされたり、速度が低下したりする可能性があることがわかります。
イベントループを終了します
process.nextTick を使用すると、重要ではないタスクをイベント ループの次のラウンド (ティック) に延期できます。これにより、イベント ループが解放され、他の保留中のイベントの実行を継続できるようになります。次の例を見てください。一時ファイルを削除する予定だが、データ イベントのコールバック関数がこの IO 操作を待機しないようにする場合は、次のように遅延できます。
stream.end("私の応答");
process.nextTick(function() {
fs.unlink("/path/to/file");
});
特定の I/O 操作 (ログ ファイルの解析など) を実行できる my_async_function という関数を設計し、それを定期的に実行できるようにする予定だとします。次のように setInterval を使用して実装できます。
var 間隔 = 1000;
setInterval(function() {
my_async_function(function() {
console.log('my_async_function が完了しました!');
},interval);//翻訳者注: 前の「,interval」は私が追加したもので、著者がタイプミスのために省略した可能性があります
訳者注: (以下の太字部分は訳者によって追加されたものであり、原書の内容ではありません)
コンテンツのこの部分の理解を容易にするために、作成者のコードを変更して実際に実行できるようにすることができます。
setInterval(function(){
(関数 my_async_function(){
setTimeout(function(){
console.log("1");
},5000);
},間隔);
このコードを実行して見てください。5 秒待つと、1 秒ごとに「hello」が出力されることがわかります。現在の my_async_function が実行された後 (5 秒かかります)、次の my_async_function を実行する前に 1 秒待機することが予想されます。各出力の間には 6 秒の間隔が必要です。この結果は、my_async_function がシリアルに実行されず、複数の関数が同時に実行されていることが原因で発生します。

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

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

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

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

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

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

メモ帳++7.3.1
使いやすく無料のコードエディター

ホットトピック









