4

ブラウザの仕組みとブラウザのレンダリングプロセスを読んだ後<script>でも、投稿が実際にはカバーしていないタグに遭遇したときのブラウザの解析プロセスについてまだ混乱しています。

主なプロセスは、次の図で説明されています。 ここに画像の説明を入力

単純なhtmlがあるとします

<html>
<head>
<link rel="stylesheet" href="main.css">
<script src="main.js"></script>
<link rel="stylesheet" href="another.css">
</head>
<body>
</body>
</html>

質問:

  1. ブラウザはシングル スレッドなので、HTML パーサーと CSS パーサーはどのように並行して動作しますか
  2. <script>HTML パーサーで、タグに遭遇すると、 js ファイルのダウンロードと実行が完了するまでブラウザが停止しますか? この例では、ブラウザはダウンロードして実行するanother.cssまでダウンロードしませんか?main.js
4

1 に答える 1

6

1: ブラウザーはシングルスレッドではありません。タスクマネージャーを監視すると、ブラウザーが実際に複数のスレッドを使用していることがわかります。ブラウザはhtmlページ用に1つのスレッドを予約し、新しいスレッドを作成する/スレッドを再利用して画像、css、およびjsをフェッチするため、メインのhtmlスレッドをブロックしないと思います。

2: HTML パーサーが<script src="main.js"></script>タグに遭遇すると、main.js をクライアントにダウンロードし、見つかった js コードを実行します。

通常、js の実行を停止することが最善の方法です。これが、通常、すべての js 機能を関数に入れ、htmlpage のすべての要素がロードされたときに js をトリガーする init または load 関数を用意する理由です。

<body onload="load()">これを行うには、load() が main.js の関数である body.onload-event に eventlistener をアタッチ します。

これを見てください:リンク

于 2013-10-31T11:08:16.270 に答える