これは、フロントエンドの面接でよくある質問の 1 つです。 HTML、JS、パフォーマンスに関する面接対象者の知識をテストします。
これはフロントエンドのインタビューの質問シリーズの質問 #1 です。準備をレベルアップしたい場合、または常に最新情報を入手したい場合は、FrontendCamp へのサインアップを検討してください。
script タグは、HTML ページに JavaScript を追加するために使用されます。インライン スクリプトまたは外部スクリプトの可能性があります。
<body> <!-- Some code before it --> <script> console.log("This is an inline script."); </script> <script src="https://example.com/external-script.js" /> <!-- Some code after it --> </body>
HTML の解析中にブラウザが script タグを検出すると、HTML 解析が停止され、JS スクリプトの実行が開始されます。インラインの場合はすぐに実行が開始されますが、外部スクリプトの場合はダウンロードされてから実行されます。
この間、JS スクリプトがダウンロードされて実行されると、HTML 解析がブロックされます。ブラウザが JS スクリプトの実行を完了した場合にのみ再開できます。
ここで何が間違っているのかわかりますか?これにより、エンド ユーザーにパフォーマンスの問題が発生します。大量のスクリプトがある場合、またはスクリプトの実行に時間がかかる場合、ユーザーはページのコンテンツを長時間見ることができなくなります。
これを正確に解決するために、async と defer という 2 つの属性があります。
async 属性が存在する場合、スクリプトは HTML の解析と並行してダウンロードされ、利用可能になるとすぐに実行されます。
複数のスクリプトで async 属性が使用されている場合、実行順序は HTML に表示される順序と異なる場合があります。最初に利用可能なスクリプトが最初に実行されます。
<body> <!-- Some code before it --> <script async src="https://example.com/external-script.js" /> <!-- Some code after it --> </body>
defer 属性が存在する場合、スクリプトは HTML 解析と並行して (非同期と同様に) ダウンロードされますが、HTML 解析が完了した後、DOMContentLoaded を起動する前に実行されます。
複数のスクリプトが defer 属性を使用する場合、非同期とは異なり、実行順序は維持されます。
<body> <!-- Some code before it --> <script defer src="https://example.com/external-script.js" /> <!-- Some code after it --> </body>
MDN: スクリプト要素
フロントエンドキャンプ
以上が非同期と遅延について理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。