検索
ホームページウェブフロントエンドjsチュートリアルJavaScript 実行メカニズムに関する簡単な説明

JavaScript 実行メカニズムに関する簡単な説明

js はシングルスレッドですが、なぜ非同期操作を実行できるのでしょうか?

これは、ブラウザ (js のホスト環境) が何らかの方法で js に非同期属性を持たせるという事実に帰着します。

プロセスとスレッドを区別します:

プロセス: 実行中のアプリケーション。各プロセスには独自の独立したメモリ空間があります。たとえば、開いているブラウザはプロセスです。

スレッド: 独立したプロセスのサブセット。スレッドは共有メモリ空間で実行されます。

ブラウザはマルチプロセスです。以下に示すように:

#そして、ページが開かれるたびに、独立したプロセスが作成されます。プロセスには独自のマルチスレッドがあります。ブラウザが単一プロセスの場合、特定のページがクラッシュすると、ブラウザ全体に影響します。

ブラウザにはどのようなプロセスがあるか:

1. ブラウザ: ブラウザのメインプロセス (調整と制御を担当) があります。 1 つだけで、その機能は次のとおりです。

• ブラウザ インターフェイスの表示とユーザー対話を担当します。前方、後方など。

• 各ページの管理、他のプロセスの作成と破棄を担当します。

• レンダラー プロセスによって取得されたメモリにビットマップを描画し、ユーザーに提供します。インターフェイス

• ネットワーク リソース、ダウンロードなどの管理

##2. サードパーティのプラグイン プロセス: 各タイプのプラグインはプロセスに対応しており、このプロセスは、プラグインが使用されます

3 、GPU プロセス: 最大 1 つ、3D 描画などに使用されます。

4、

ブラウザ レンダリング プロセス (ブラウザ カーネル) (レンダラー) (レンダラー)、 は内部的にマルチスレッドです ) デフォルトでは、各タブ ページには 1 つのプロセスがあり、相互に影響しません。主な機能: ページのレンダリング、スクリプトの実行、イベント処理など。

ブラウザのレンダリング プロセス (ブラウザ カーネル) に含まれるスレッド:

1 、GUI レンダリング スレッド

• ブラウザ インターフェイスのレンダリング、HTML、CSS の解析、DOM ツリーと RenderObject ツリーの構築、レイアウトと描画などを担当します。

• インターフェイスを再描画 (Repaint) する必要がある場合、または何らかの操作によってリフローが発生した場合、このスレッドが実行されます。

GUI レンダリング スレッドは何も行わないことに注意してください。 JS エンジンとのスレッドは相互に排他的です。JS エンジンが実行されると、GUI スレッドは一時停止されます (凍結と同等)。GUI の更新はキューに保存され、JS エンジンがアイドル状態になるとすぐに実行されます。 2. JS エンジン スレッド (

「JavaScript エンジン」は通常、仮想マシンと呼ばれます。JS カーネルとも呼ばれ、JavaScript スクリプト プログラムの処理を担当します。(V8 エンジンなど) )

• JS エンジン スレッドは、JavaScript スクリプトの解析とコードの実行を担当します。

• JS エンジンは、タスク キュー内のタスクの到着を待機し、それらを処理します。タブ ページ (レンダラー プロセス) が実行されるたびに、JS プログラムを実行する JS スレッドは 1 つだけです。

• また、GUI レンダリング スレッドと JS エンジン スレッドは相互に排他的であるため、JS の実行時間が長すぎる場合にも注意してください。 、ページのレンダリングに一貫性がなくなり、ページのレンダリングと読み込みがブロックされます。

3. イベント トリガー スレッド

• JS エンジンではなくブラウザーに属し、イベント ループを制御するために使用されます (JS エンジン自体がビジー状態であることは理解できます。ブラウザは支援のために別のスレッドを開く必要があります)

• JS エンジンが setTimeOut (ブラウザ カーネルの他のスレッド (マウス クリック、AJAX 非同期リクエストなど) から送信されることもあります)、対応するタスクがイベント スレッドに追加されます。

• 対応するイベントがトリガー条件を満たした場合、対応するタスクがイベント スレッドに追加されます。トリガーされると、スレッドは保留キューの最後にイベントを追加し、JS エンジンによる処理を待ちます。

• 注: JS のシングルスレッド関係により、保留キュー内のイベントはJS エンジンによる処理を待機するためにキューに入れる必要があります (JS エンジンがアイドル状態のときに実行されます)

4. タイミング トリガー スレッド

• 伝説の setInterval と setTimeout が存在するスレッド

• ブラウザのタイミング カウンタは JavaScript エンジンによってカウントされません (JavaScript エンジンはシングルスレッドであるため、スレッドがブロックされた状態にある場合、タイミングの精度に影響します)

• したがって、別のスレッドを使用してタイミングを計り、タイミングをトリガーします (タイミングが完了すると、スレッドはイベント キューに追加され、実行前に JS エンジンがアイドル状態になるのを待ちます)

• W3C は HTML 標準で規定しており、setTimeout の 4ms 未満の時間間隔は 4ms としてカウントすることが規定されていることに注意してください。新しいスレッドリクエストはブラウザを通じて開かれます

• 状態変化が検出されたとき、コールバック関数が設定されている場合、非同期スレッドは状態変化イベントを生成し、コールバックをイベント キューに入れます。その後、JavaScript エンジンによって実行されます。

GUI レンダリング スレッドと JS エンジン スレッドは相互に排他的です:

JavaScript は DOM を操作できるため、DOM の属性を変更すると、これらの要素をインターフェイスで同時にレンダリングすると (つまり、JS スレッドと UI スレッドが同時に実行されます)、レンダリング スレッドの前後で取得された要素データが不一致になる可能性があります。したがって、予期しないレンダリング結果を防ぐために、ブラウザは GUI レンダリング スレッドと JS エンジンが相互に排他的な関係になるように設定し、JS エンジンが実行されると GUI スレッドが一時停止され、GUI の更新がファイルに保存されます。 JS エンジンまでキューに入れます。スレッドがアイドル状態になるとすぐに実行されます。

js の実行メカニズム: js はシングルスレッドです。関数が実行されるたびに、関数はスタックにプッシュされます。ただし、非同期操作がある場合は、ブラウザー スレッド (webAPI) が処理し、キューでは、メインスレッド(実行スタック)の実行が完了した時点で、タスクキューにタスクがあれば実行されます。

これが、次のコードが最初に b を出力し、次に a を出力する理由です。 settimeout 関数はタスク キューに配置され、console.log('b') がメイン スレッドになります。

setTimeout(() => {
   console.log('a');
}, 0);
console.log('b');

この記事は js チュートリアル 列から引用したものです。ぜひ学習してください。

以上がJavaScript 実行メカニズムに関する簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はcnblogsで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
JavaScriptはCで書かれていますか?証拠を調べるJavaScriptはCで書かれていますか?証拠を調べるApr 25, 2025 am 12:15 AM

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptの役割:WebをインタラクティブでダイナミックにするJavaScriptの役割:WebをインタラクティブでダイナミックにするApr 24, 2025 am 12:12 AM

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

CおよびJavaScript:接続が説明しましたCおよびJavaScript:接続が説明しましたApr 23, 2025 am 12:07 AM

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

Webサイトからアプリまで:JavaScriptの多様なアプリケーションWebサイトからアプリまで:JavaScriptの多様なアプリケーションApr 22, 2025 am 12:02 AM

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

Python vs. JavaScript:ユースケースとアプリケーションと比較されますPython vs. JavaScript:ユースケースとアプリケーションと比較されますApr 21, 2025 am 12:01 AM

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

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の実行効率を大幅に改善します。

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

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

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

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

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

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。