検索
ホームページウェブフロントエンドjsチュートリアルJavaScriptの非同期loading_javascriptスキルの簡単な分析

はしがき

JavaScript スクリプトの読み込みで多くの問題に遭遇したことがあるかと思います。主にいくつかの点で——

1> 同期スクリプトと非同期スクリプトによって引き起こされるファイルの読み込み、ファイルの依存関係、および実行順序の問題
2> 同期スクリプトと非同期スクリプトによって引き起こされるパフォーマンスの最適化の問題


スクリプトの読み込みに関連するすべての側面を完全に理解することは、実際的な問題の解決に役立つだけでなく、パフォーマンスの最適化を把握して実装するのにも役立ちます。

まず、スクリプト タグ コードを確認します—


コードをコピー コードは次のとおりです:



の上に配置すると、すべてのページのレンダリング作業がブロックされ、スクリプトがロードされて実行されるまでユーザーは「死の白い画面」状態になります。 の最後にあるスクリプトでは、クライアント側のレンダリングが実行されるべき場所に、効果のないコントロールと空のボックスが散在する、活気のない静的ページのみが表示されます。テストケースを取得する -

コードをコピーします コードは次のとおりです:





非同期読み込みスクリプト



私はコンテンツです

JavaScriptの非同期loading_javascriptスキルの簡単な分析


その中で、test.js の内容—


コードをコピー コードは次のとおりです:

alert('私はヘッドのスクリプトコードです。ここでjsを実行すると、ボディのコンテンツのレンダリングが開始されます!');


アラートが一時停止ポイントであり、この時点ではページが空白であることがわかります。ただし、この時点でページ全体がロードされていることに注意してください。本文に特定の src 属性を持つタグ (上記の img タグなど) が含まれている場合、ブラウザは関連コンテンツのロードをすでに開始しています。つまり、js エンジンとレンダリング エンジンの動作タイミングは相互に排他的であることに注意してください (書籍によっては、これを UI スレッドと呼んでいます)。

したがって、ページの見栄えを良くし、使いやすくするスクリプトはすぐにロードし、後でロードできるスクリプトは後でロードする必要があります。

1. スクリプトの実行の遅延

ページの

タグの最後にスクリプトを配置することがますます一般的になってきています。このようにして、ユーザーはページをより速く表示できる一方で、スクリプトはロードされた DOM 要素を直接操作できるようになります。ほとんどのスクリプトにとって、この「移動」は大きな改善です。ページモデルは次のとおりです——


コードをコピー コードは次のとおりです:












これにより、ページのレンダリング時間が大幅に短縮されますが、bodyScript が読み込まれる前にユーザーがページを操作する機会が得られる可能性があることに注意してください。その理由は、ドキュメント全体が読み込まれるまでブラウザはこれらのスクリプトを読み込むことができないためです。これが、低速接続で送信される大きなドキュメントのボトルネックになる可能性があります。

理想的には、スクリプトの読み込みはドキュメントの読み込みと同時に行われ、DOM のレンダリングに影響を与えないようにする必要があります。この方法では、スクリプトは <script> タグの順序ですでに読み込まれているため、ドキュメントの準備ができたらスクリプトを実行できます。 </script>

この要件を満たすために defer を使用できます。つまり、


コードをコピー コードは次のとおりです:



defer 属性を追加することは、ブラウザに「このスクリプトのロードを今すぐ開始してください。ただし、ドキュメントの準備ができ、defer 属性を持つ以前のすべてのスクリプトの実行が完了するまで待ってから実行してください」と伝えることと同じです。

このように、head タグに遅延スクリプトを配置すると、body タグにスクリプトを配置した場合のすべての利点が得られ、大きなドキュメントの読み込み速度も大幅に向上します。この時のページモードは——


コードをコピー コードは次のとおりです:












ただし、すべてのブラウザーが defer をサポートしているわけではありません (一部の最新のブラウザーでは、defer が宣言されている場合、内部スクリプトは document.write および DOM レンダリング操作を実行しません。IE4 はすべて defer 属性をサポートしています)。つまり、ドキュメントのロード後に遅延スクリプトを実行できるようにするには、すべての遅延スクリプト コードを jQuery の $(document).ready などの構造にカプセル化する必要があります。訪問者のほぼ 97% が並列読み込みのメリットを享受し、残りの 3% は依然として完全に機能する JavaScript にアクセスできるため、これには価値があります。

2. スクリプトの完全な並列化

スクリプトの読み込みと実行を 1 段階速くします。遅延スクリプトが次々に実行されるのを待ちたくありません (遅延という言葉は、ドキュメントが読み込まれるのを静かに待つという順序立てたキューのシナリオを思い出させます)。これらのスクリプトを実行する前にドキュメントの準備ができるまで待ちたいと考えています。できるだけ早くロードして、できるだけ早くこれらのスクリプトを実行したいと考えています。ここで HTML5 の async 属性が思い浮かびますが、これは混沌とした無秩序であることに注意してください。

たとえば、まったく無関係な 2 つのサードパーティ スクリプトをロードします。これらのスクリプトがなくてもページは問題なく動作します。どちらが最初に実行され、どちらが最後に実行されるかは気にしません。したがって、これらのサードパーティ スクリプトで async 属性を使用することは、一銭も費やすことなく実行速度を向上させることと同じです。

async 属性は HTML5 の新機能です。この関数は defer に似ており、スクリプトのダウンロード中に DOM レンダリングを可能にします。ただし、スクリプトはダウンロード後できるだけ早く実行されます (つまり、JS エンジンはアイドル状態になるとすぐに実行されます)。スクリプトが順番に実行されるという保証はありません。これらは onload イベントの前に完了します。

Firefox 3.6、Opera 10.5、IE 9、および最新の Chrome と Safari はすべて、async 属性をサポートしています。 async と defer を同時に使用できるため、IE 4 以降のすべての IE は非同期読み込みをサポートしますが、async は defer を上書きすることに注意してください。

すると、この時のページモデルは以下の通りです——

コードをコピーします コードは次のとおりです:













声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
es6数组怎么去掉重复并且重新排序es6数组怎么去掉重复并且重新排序May 05, 2022 pm 07:08 PM

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

JavaScript的Symbol类型、隐藏属性及全局注册表详解JavaScript的Symbol类型、隐藏属性及全局注册表详解Jun 02, 2022 am 11:50 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

原来利用纯CSS也能实现文字轮播与图片轮播!原来利用纯CSS也能实现文字轮播与图片轮播!Jun 10, 2022 pm 01:00 PM

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

JavaScript对象的构造函数和new操作符(实例详解)JavaScript对象的构造函数和new操作符(实例详解)May 10, 2022 pm 06:16 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

JavaScript面向对象详细解析之属性描述符JavaScript面向对象详细解析之属性描述符May 27, 2022 pm 05:29 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

javascript怎么移除元素点击事件javascript怎么移除元素点击事件Apr 11, 2022 pm 04:51 PM

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

整理总结JavaScript常见的BOM操作整理总结JavaScript常见的BOM操作Jun 01, 2022 am 11:43 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

20+道必知必会的Vue面试题(附答案解析)20+道必知必会的Vue面试题(附答案解析)Apr 06, 2021 am 09:41 AM

本篇文章整理了20+Vue面试题分享给大家,同时附上答案解析。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境