Maison interface Web js tutoriel 浏览器加载、渲染和解析过程黑箱简析_javascript技巧

浏览器加载、渲染和解析过程黑箱简析_javascript技巧

May 16, 2016 pm 05:47 PM
Chargement du navigateur 渲染

用 Fiddler 监控,在 IE6 下,资源下载顺序为:
ie6 timeline

很明显,下载顺序从上到下,文档流中先出现的资源先下载。在 IE8, Safari, Chrome 等浏览器下也类似。

Firefox 对下载顺序做了优化
firefox timeline
Firefox 会将 js, css 提前下载,而将图片等资源延迟到后面下载。

对于渲染,利用 Fiddler 将网速调慢,可以看到 css 下载后会马上渲染到页面,渲染和下载同步进行。js 的解析和运行,也类似。

对于 js 运行,以及页面加载相关事件的触发,特别做了测试。在 Firefox 下,打开测试页面:

[22:13:32.947] HTML Start[22:13:32.947] normal inline script run time[22:13:34.904] normal external script run time[22:13:35.775] [body] normal external script run time[22:13:35.789] [body end] normal external script run time[22:13:35.789] HTML End[22:13:35.791] deferred inline script run time[22:13:35.791] deferred external script run time[22:13:35.793] DOMContentLoaded[22:13:38.144] images[0] onload[22:13:38.328] images[1] onload[22:13:39.105] images[2] onload[22:13:39.105] images[3] onload[22:13:39.106] window.onload
Copier après la connexion

很明显,JS 的运行严格按照文档流中的顺序进行。其中 deferred 的脚本会在最后运行(注:Firefox 3.5 开始支持 defer,而且支持得很完美)。

再来看下 IE8,结果如下:

[22:33:56.806] HTML Start[22:33:56.826] normal inline script run time[22:33:57.786] normal external script run time[22:33:57.812] deferred inline script run time[22:33:57.816] document.readyState = interactive[22:33:57.934] [body] normal external script run time[22:33:58.310] [body end] normal external script run time[22:33:58.310] HTML End[22:33:58.346] deferred external script run time[22:33:58.346] images[0].readyState = loading[22:33:58.346] images[0].readyState = complete[22:33:58.346] images[0] onload[22:33:58.361] doScroll[22:33:58.451] images[1].readyState = loading[22:33:58.479] images[1].readyState = complete[22:33:58.479] images[1] onload[22:33:58.794] images[2].readyState = loading[22:33:58.854] images[2].readyState = complete[22:33:58.854] images[2] onload[22:33:58.876] images[3].readyState = loading[22:33:58.876] images[3].readyState = complete[22:33:58.876] images[3] onload[22:33:58.887] document.readyState = complete[22:33:58.888] window.onload
Copier après la connexion

可以看出,IE8 下,defer 只对 external 脚本有效,对 inline 脚本无效。另,与 DOMContentLoaded 最接近的是 doScroll. 这是 doScroll 被广泛用来模拟 DOMContentLoaded 的原因。小心:仅仅是模拟,细节上并不等价。

还可以得到一个有点意外的结果:放在 body 结束前的脚本,执行时,依旧最好放在 domready 事件中。无论在 Firefox 还是 IE 下,解析到 HTML End 时,并不代表 DOM 可以安全操作,特别是页面比较复杂时。

从上面数据中,也可以看出 YSlow 性能优化法则里,建议将样式置顶和脚本置底的根据。

有兴趣的可以进一步测试动态添加样式和脚本的情形,会稍有不同,但没有特别 surprise.

最后总结下

页面资源的下载顺序是从上到下的,文档流中先出现的资源先下载(注:存在并发,具体请参考 UA Profiler)。当某一样式下载完成时,会立刻渲染到页面(体现了层叠样式表中层叠在渲染时的含义)。当某一脚本下载完成时,也会立刻解析和运行。脚本的运行严格按照文档流中的顺序进行,deferred 的脚本会在正常脚本运行之后运行(Firefox 和 IE 下)。

特别需要留意:脚本运行时,会暂停该脚本之下所有资源的下载(因为脚本可能改变文档流,甚至跳转页面,浏览器的暂停策略是合理的)。要小心内联脚本,经常会阻塞后续下载。

好了,废话不多说。以上结果,建议各位亲自测试,反复测试,疯狂测试,一直到眼花缭乱稀里糊涂恍然大悟继续糊涂为止……

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment rendre une vue de dessus orthogonale dans Kujiale_Tutorial sur le rendu d'une vue de dessus orthogonale dans Kujiale Comment rendre une vue de dessus orthogonale dans Kujiale_Tutorial sur le rendu d'une vue de dessus orthogonale dans Kujiale Apr 02, 2024 pm 01:10 PM

1. Ouvrez d'abord le plan de conception à rendre dans Kujiale. 2. Ensuite, ouvrez le rendu de la vue de dessus dans le menu de rendu. 3. Cliquez ensuite sur Orthogonal dans les paramètres des paramètres de l'interface de rendu de la vue de dessus. 4. Enfin, après avoir ajusté l'angle du modèle, cliquez sur Rendu maintenant pour afficher la vue de dessus orthogonale.

Le rendu de la page vue est-il synchrone ou asynchrone ? Le rendu de la page vue est-il synchrone ou asynchrone ? Dec 13, 2022 pm 07:26 PM

Le rendu des pages Vue est asynchrone. Vue utilise le rendu asynchrone, ce qui peut améliorer les performances ; si les mises à jour asynchrones ne sont pas utilisées, le composant actuel sera restitué à chaque fois que les données sont mises à jour. Pour des raisons de performances, Vue mettra à jour la vue de manière asynchrone après cette série de mises à jour des données.

Erreur Vue : v-html ne peut pas être utilisé correctement pour restituer du code HTML dynamique. Comment le résoudre ? Erreur Vue : v-html ne peut pas être utilisé correctement pour restituer du code HTML dynamique. Comment le résoudre ? Aug 19, 2023 pm 12:27 PM

Erreur Vue : Impossible d'utiliser correctement v-html pour restituer du code HTML dynamique, comment le résoudre ? Introduction : Dans le développement de Vue, nous avons souvent besoin de restituer dynamiquement du code HTML pour afficher du contenu textuel riche ou des entrées utilisateur générées dynamiquement. Vue fournit la directive v-html pour implémenter cette fonction. Cependant, nous pouvons parfois rencontrer des problèmes qui ne permettent pas de restituer correctement le code HTML dynamique à l'aide de v-html. Cet article explorera les causes de ce problème et proposera des solutions. Description du problème : dans Vue, lorsque nous utilisons v

Erreur Vue : Impossible d'utiliser correctement v-html pour restituer le code HTML, comment le résoudre ? Erreur Vue : Impossible d'utiliser correctement v-html pour restituer le code HTML, comment le résoudre ? Aug 26, 2023 am 11:25 AM

Erreur Vue : Impossible d'utiliser correctement v-html pour restituer le code HTML, comment le résoudre ? Vue est un framework JavaScript populaire qui peut nous aider à créer des interfaces utilisateur interactives. Dans Vue, nous pouvons utiliser la directive v-html pour restituer le code HTML dans des modèles. Cependant, nous pouvons parfois rencontrer un problème : le code HTML ne peut pas être restitué correctement en utilisant v-html. Cet article décrit quelques causes courantes et solutions pour vous aider à résoudre ce problème. La première raison possible est que

Fonction v-for dans Vue3 : solution parfaite pour lister le rendu des données Fonction v-for dans Vue3 : solution parfaite pour lister le rendu des données Jun 19, 2023 am 08:04 AM

Dans Vue3, v-for est considéré comme le meilleur moyen de restituer les données d'une liste. v-for est une directive dans Vue qui permet aux développeurs de parcourir un tableau ou un objet et de générer un morceau de code HTML pour chaque élément. La directive v-for est l'une des directives de modèle les plus puissantes disponibles pour les développeurs. Dans Vue3, l'instruction v-for a été encore optimisée, la rendant plus facile à utiliser et plus flexible. Le plus gros changement de la directive v-for dans Vue3 est la liaison des éléments. Dans Vue2, utilisez la directive v-for

Comment utiliser Vue pour réaliser l'étalonnage et le traitement du rendu des images ? Comment utiliser Vue pour réaliser l'étalonnage et le traitement du rendu des images ? Aug 19, 2023 pm 07:53 PM

Comment utiliser Vue pour réaliser l'étalonnage et le traitement du rendu des images ? Présentation Dans le développement d'applications Web modernes, le traitement d'images est une exigence très courante. En utilisant Vue.js, un framework JavaScript populaire, il devient très simple et efficace d'implémenter l'étalonnage et le traitement du rendu des images. Cet article montrera comment implémenter le traitement d'étalonnage et de rendu d'image via Vue.js, et est accompagné d'exemples de code. Étape 1 : Créer une instance Vue Tout d'abord, nous devons créer une instance Vue pour gérer les données et la logique de l'image. en HT

Redessiner ou redistribuer : lequel a l'impact le plus critique sur la phase de rendu ? Redessiner ou redistribuer : lequel a l'impact le plus critique sur la phase de rendu ? Jan 26, 2024 am 10:16 AM

L’impact du redraw et du reflow sur la phase de rendu : qui est le plus important ? Lorsqu'une page Web est affichée, le navigateur effectue une série d'opérations dans un certain ordre pour afficher le contenu de la page. Parmi eux, le redessinage et la redistribution sont deux étapes importantes du processus de rendu. Cet article explorera l'impact du redessin et de la redistribution sur la phase de rendu et analysera leur importance. La signification et la différence entre redessiner et redistribuer Avant de comprendre l'impact du redessin et de la redistribution sur le rendu, comprenons d'abord leur signification et leur différence. Repeindre fait référence au moment où le style d'un élément change, mais cela n'affecte pas le

Maîtriser la mise en œuvre et le principe de fonctionnement du mode de rendu Canvas Maîtriser la mise en œuvre et le principe de fonctionnement du mode de rendu Canvas Jan 17, 2024 am 08:40 AM

Pour comprendre les principes et la mise en œuvre du mode de rendu Canvas, des exemples de code spécifiques sont nécessaires. Tout d'abord, nous devons préciser que Canvas est l'API de dessin fournie par HTML5, qui nous permet d'utiliser JavaScript dans le navigateur pour dessiner des graphiques, des animations et des objets. d'autres effets visuels. Le canevas peut être dessiné en utilisant deux modes de rendu : le mode de rendu 2D et le mode de rendu WebGL. Le mode de rendu 2D est le mode par défaut de Canvas. Il utilise le contexte 2D de l'élément Canvas en HTML5 pour dessiner des images.

See all articles