La balise 3f1c4e4b6b16bbbd69b2ee476dc4f83a dans les navigateurs modernes est divisée en deux nouveaux types : classique et non bloquante. Voyons comment utiliser ces deux balises pour charger les pages le plus rapidement possible. 1. Où iront les scripts de blocage ? La version standard de la balise 3f1c4e4b6b16bbbd69b2ee476dc4f83a est souvent appelée balise de blocage. Ce terme doit être compris dans son contexte : lorsque les navigateurs modernes voient une balise de blocage 3f1c4e4b6b16bbbd69b2ee476dc4f83a, ils ignorent le point de blocage et continuent de lire le document et de télécharger d'autres ressources (scripts et feuilles de style). Mais le navigateur n’évaluera pas ces ressources au-delà du point d’étranglement jusqu’à ce que le script soit téléchargé et exécuté. Par conséquent, si un document Web comporte cinq balises 3f1c4e4b6b16bbbd69b2ee476dc4f83a de blocage dans sa balise 93f0f5c25f18dab9d176bd4f6de5d30e, l'utilisateur ne verra que le titre de la page jusqu'à ce que les cinq scripts soient téléchargés et exécutés. De plus, même si ces scripts s'exécutent, ils ne peuvent voir que la partie du document située avant le point de blocage. Si vous voulez voir tous les goodies en attente d'être chargés dans la balise 6c04bd5ca3fcae76e30b72ad730ca86d, vous devez lier un gestionnaire d'événements à un événement comme document.onreadystatechange. Pour les raisons ci-dessus, il est de plus en plus courant de placer des scripts à la fin de la balise 6c04bd5ca3fcae76e30b72ad730ca86d De cette façon, d'une part, les utilisateurs peuvent voir la page plus rapidement et, d'autre part, les scripts peuvent également accéder activement au DOM sans attendre que les événements se déclenchent. Pour la plupart des scripts, ce « déplacement » constitue une énorme amélioration. Mais tous les scripts ne sont pas créés égaux. Avant de parcourir le script, posez-vous 2 questions. Est-il possible que ce script soit appelé directement depuis le JavaScript en ligne dans la balise 6c04bd5ca3fcae76e30b72ad730ca86d La réponse est peut-être évidente, mais elle vaut quand même la peine d’être vérifiée. Ce script affectera-t-il l'apparence de la page rendue ? Les polices hôtes Typekit en sont un exemple. Si vous placez le script Typekit à la fin du document, le texte de la page sera rendu deux fois, immédiatement lors de la lecture du document, et de nouveau lors de l'exécution du script. Tant que l'une des réponses aux questions ci-dessus est oui, alors le script doit être placé dans la balise 93f0f5c25f18dab9d176bd4f6de5d30e, sinon il peut être placé dans la balise 6c04bd5ca3fcae76e30b72ad730ca86d est : </head> <body> <!-- content goes here --> <script src="bodyScripts.js"> Cela améliore considérablement les temps de chargement, mais sachez que cela peut donner à l'utilisateur la possibilité d'interagir avec la page avant le chargement de bodyScripts.js. 2. Chargement anticipé et exécution retardée des scripts Il est recommandé que la plupart des scripts soient placés dans 6c04bd5ca3fcae76e30b72ad730ca86d, car cela permettra aux utilisateurs de voir la page Web plus rapidement et d'éviter les frais généraux. de lier l'événement "ready" avant de manipuler le DOM. Mais cette approche présente également l'inconvénient que le navigateur ne peut pas charger ces scripts tant que le document entier n'a pas été chargé, ce qui peut constituer un goulot d'étranglement pour les documents volumineux envoyés via des connexions lentes. Idéalement, le script devrait être chargé en même temps que le document est chargé, et n'affecte pas le rendu du DOM. De cette façon, vous pouvez exécuter le script une fois que le document est prêt car les scripts ont déjà été chargés dans l'ordre des balises 3f1c4e4b6b16bbbd69b2ee476dc4f83a Si vous avez lu jusqu'ici, vous devez être impatient d'écrire un chargeur de script Ajax personnalisé pour répondre à de tels besoins ! Cependant, la plupart des navigateurs proposent une solution plus simple. Ajouter l'attribut defer équivaut à dire au navigateur : "Veuillez commencer à charger ce script maintenant, mais veuillez attendre que le document soit prêt et que tous les scripts précédents avec l'attribut defer aient fini de s'exécuter. Exécutez "Mettre un script différé dans la balise 93f0f5c25f18dab9d176bd4f6de5d30e du document apporte tous les avantages de placer le script dans la balise 6c04bd5ca3fcae76e30b72ad730ca86d, mais améliore également grandement la vitesse de chargement des documents volumineux ! L'inconvénient est que tous les navigateurs ne prennent pas en charge l'attribut defer. Cela signifie que si vous voulez vous assurer que votre script différé peut s'exécuter après le chargement du document, vous devez encapsuler tout le code du script différé dans une structure telle que $(document).ready de jQuery. L'exemple de page de la section précédente est amélioré comme suit : <script defer src="deferredScripts.js"> N'oubliez pas que l'encapsulation des deferredScripts est importante, de sorte que même si le navigateur ne prend pas en charge le defer, les deferredScripts le feront être exécuté après l'exécution de l'événement de préparation du document. Si le contenu principal de la page dépasse largement quelques kilo-octets, le prix en vaut largement la peine. 3. Chargement parallèle des scripts Si vous êtes un perfectionniste qui se soucie du temps de chargement des pages en millisecondes, alors différer peut être comme une sauce soja insipide. Vous ne voulez pas attendre que tous les scripts de report précédents soient terminés, et vous ne voulez certainement pas attendre que le document soit prêt avant d'exécuter ces scripts. Vous souhaitez simplement charger et exécuter ces scripts le plus rapidement possible. C'est pourquoi les navigateurs modernes fournissent l'attribut async. <script async src = "roadRunner.js"></pre><p>如果说defer 让我们想到一种静静等待文档加载的有序排队场景,那么async 就会让我们想到混乱的无政府状态。前面给出的那两个脚本会以任意次序运行,而且只要JavaScript 引擎可用就会立即运行,而不论文档就绪与否。<br>对大多数脚本来说,async 是一块难以下咽的鸡肋。async 不像defer那样得到广泛的支持。同时,由于异步脚本会在任意时刻运行,它实在太容易引起海森堡蚁虫之灾了(脚本刚好结束加载时就会蚁虫四起)。<br>当我们加载一些第三方脚本,而且也不在乎它们谁先运行谁后运行。因此,对这些第三方脚本使用async 属性,相当于一分钱没花就提升了它们的运行速度。<br>上一个页面示例再添加两个独立的第三方小部件,得到的结果如下:</p><pre class="brush:js;toolbar:false"><html> <head> <!-- metadata and stylesheets go here --> <script src="headScripts.js"> <script src="deferredScripts.js" defer>