ウェブブラウザはどのようにウェブページのJavaScriptコンテンツを処理しますか? JavaScriptコンテンツがDOMに解析されてレンダリングされていますか?ブラウザはどのようにJavaScriptを処理しますか?
仕様は必要ありませんが、その仕組みを知る必要があります。 JavaScriptのコンテンツをWebページで処理するプロセス全体を教えてください。
ウェブブラウザはどのようにウェブページのJavaScriptコンテンツを処理しますか? JavaScriptコンテンツがDOMに解析されてレンダリングされていますか?ブラウザはどのようにJavaScriptを処理しますか?
仕様は必要ありませんが、その仕組みを知る必要があります。 JavaScriptのコンテンツをWebページで処理するプロセス全体を教えてください。
ウェブページのセクションはブラウザのJavaScriptインタプリタによって処理されますが、ブラウザの本質的な部分である可能性がありますが、通常は別個のモジュールです(ChromeはV8を使用します; IEはJScriptを使用します。 FirefoxはSpiderMonkeyなどを使用します)。 HTMLパーサはscript
要素に到達
、パーサは読んで終了</script>
タグを通じてテキストを格納(またはsrc
属性経由で参照されたファイルを取得)されないことをすべて。その後、作成者がdefer
or async
attributesを使用していない限り、すべてのHTMLの解析とレンダリングが停止し、HTMLパーサーはスクリプトのテキストをJavaScriptインタプリタに渡します。 JavaScriptインタプリタは、window
オブジェクトのコンテキストでJavaScriptコードを解釈し、終了するとHTMLパーサーに戻ります。これにより、解析と表示が続けられます。このストップ・オール・アンド・ザ・ラン・ザ・ジャパンはなぜページの顕著な人々recommend putting scripts at the bottomが知覚された読み込み時間を改善するのかです。また、script
タグがという順序でで処理されることも意味します。これは、1つのスクリプトが別のスクリプトに依存している場合に重要になります。 defer
またはasync
属性が使用されている場合、スクリプトの実行は、後でそれをサポートするブラウザまで遅延させることができます。ページ上のすべてのスクリプトは、同じグローバル実行コンテキスト内で実行され、同じグローバル名前空間とメモリ領域を共有します(したがって、互いにやりとりすることができます)。
ページが解析されてレンダリングされると、さまざまなイベントが発生する可能性があります。 —ユーザーが何かをクリックしたり、ブラウザウィンドウのサイズを変更したり、マウスを要素に移動したりできます。 script
タグの結果として実行されたJavaScriptコードは、イベントが発生したときにブラウザがJavaScript内の関数を呼び出すようにこれらのイベントを「フック」することができます。これにより、JavaScriptは対話的になります —ユーザーがページ上の要素をクリックすると、ブラウザはJavaScriptインタプリタに、JavaScriptコード内で関数X
を実行するように指示します。
あなたが上見ることができるように、JavaScriptコードを実行することができる2つのやや異なる状況があります:ページの解析/レンダリング処理の間(defer
またはasync
属性を使用していないscript
要素が最初に処理されているときは) の後に解析/レンダリングプロセス(遅延スクリプト、イベントに応答して実行されるコード)が含まれます。パース/レンダリング処理中に実行されるJavaScriptは、document.write
関数を介してHTMLパーサにコンテンツを直接出力できます。パース/レンダリングが完了した後に実行されるJavaScriptはそれを行うことはできませんが、非常に強力なDOM HTML APIを使用してDOMとやりとりすることができます。
noscript
要素には注意が必要です。JavaScriptが有効になっているブラウザでは、noscript
要素は完全にスキップされます。 JavaScriptを使用しないブラウザまたはJavaScriptを無効にした場合、script
の要素は完全にスキップされ、代わりにnoscript
の要素が読み込まれます。これにより、ページがレンダリングされたときにブラウザでJavaScriptが有効になっている場合、または有効になっていない場合にのみ表示されるコンテンツを簡単に含めることができます。
推奨読書: