[WEB]スクリプトのロードポイント-async&defer


📙 ブラウザがHTMLを解析するとどうなりますか?


スクリプトのロードポイントを理解する前に、ブラウザがHTMLドキュメントを解析したときに発生したことを理解したほうがいいです.
  • 読み込みとデータスライスHTTPモジュールまたはファイルシステムに送信されたリソースフロー(リソースフロー)を読み出すことによって、DOM(Document Object Model)ツリーがパケットによって生成される.
  • CSSスタイルテクスチャ
    ドキュメント要素の表示方法を決定する要素をグループ化します.
  • レンダリングツリーの作成
    DOMツリーを作成するときに、フラクタルを使用してレンダーツリーを作成します.表示する順序とドキュメントのビジュアル要素として、正しい順序でコンテンツを描画するには、レンダーツリーと呼ばれる個別のツリー構造が必要です.
  • レイアウト
    レンダーツリーを生成するときに、各レンダーオブジェクトの位置とサイズを持つプロセスをレイアウトと呼びます.
  • 描画

  • 描画フェーズで、レンダーツリーをブラウズし、特定のメモリ領域にRGB値を入力するプロセスです.
  • パシン?


    ドキュメントの割り当ては、ドキュメントから読み込まれたデータを理解し、使用可能な形式に変換することを意味します.このような動作をする機能やプログラムを解析器と呼ぶ.
    ブラウザでHTMLドキュメントを分割した結果を、分割ツリー(parse tree)またはシンタックスツリー(syntax tree)と呼びます.

    📕 一般スクリプトのロード

    <!DOCTYPE html>
    <html lang="ko">
      <head>
        <meta charset="UTF-8" />
        <title>Title</title>
        <link rel="stylesheet" type="text/css" href="default.css" />
        <link rel="stylesheet" type="text/css" href="dark.css" />
        <script src="jquery.js"></script>
        <script src="main.js"></script>
      </head>
      <body>
        ...
      </body>
    </html>
    
    上記の文書をロードすると、ブラウザはまずHTMLをグループ化し、外部リソースCSS、JSファイルをロードする.
    DOMツリーが完了すると、イメージファイルまたは外部リソースがロードされ、すべての操作が完了します.
    ここで重要なのは、ブラウザがscriptを解析したときにどのようなことが起こるかということです.通常、インラインコードではJavaScriptがすぐに実行され、ファイルに渡されると、転送が完了したときに実行されます.問題は、ブラウザがJavaScriptをダウンロードして実行すると、以下のようにドキュメントのパケットが停止します.

    一方、CSSはDOMツリーを変更しないため、ドキュメントのグループ化を待つか停止することはありません.
    上のコードでは、スタイルをロードしてからスクリプトをロードしますが、スクリプトファイルをロードしてからスクリプトにスタイル情報を要求すると、エラーの結果、ユーザーエクスペリエンス(UX)が低下します.このような問題はよくないように見えるが、頻繁に発生している.
    そこで、上記のコードをbodyタグの末尾に置くことをお勧めします.以下に示します.
    <!DOCTYPE html>
    <html lang="ko">
      <head>
        <meta charset="UTF-8" />
        <title>Title</title>
        <link rel="stylesheet" type="text/css" href="default.css" />
        <link rel="stylesheet" type="text/css" href="dark.css" />
      </head>
      <body>
        ...
        <script src="jquery.js"></script>
        <script src="main.js"></script>
      </body>
    </html>
    

    📘 スクリプトロード方式async,defer


    asyncプロパティを使用する場合

    asyncプロパティを使用して、スクリプトファイルが非同期で実行できることを示します.つまり、ブラウザがasyncのプロパティを持つスクリプトタグに遭遇した場合、HTMLパケットは停止されず、スクリプトの実行準備ができたときに実行されます.
    <script async src="main.js"></script>

    スクリプトの実行順序はダウンロード完了時に決定されるので、実行順序が重要なスクリプトに対してasync属性を使用する場合は特に注意してください.

    deferプロパティを使用する場合

    deferプロパティは、ブラウザがHTMLパケットの終了時にスクリプトファイルを実行することを示します.
    <script defer src="main.js"></script>

    上の図のように、ブラウザがスクリプトのダウンロードを完了しても、スクリプトはすぐに実行されません.また、asyncとは異なり、呼び出しの順序で実行される.

    いつ使えばいいですか。


    これは、スクリプトの依存性によって非常に役立ちます.スクリプトに依存しないファイルを実行する場合は、asyncを適切に使用します.依存性と実行順序が重要な場合は、deferを使用すると便利です.

    ▼▼▼定理

  • ブラウザは、HTMLドキュメントを分割するときにスクリプトに遭遇し、分割を停止します.
  • スクリプトタグのasync、deferプロパティを使用して、スクリプトの実行順序を制御できます.
  • 📚 コメントリンク


    NAVER D 2-ブラウザはどのように動作しますか?