Heim Web-Frontend js-Tutorial 浏览器加载、渲染和解析过程黑箱简析_javascript技巧

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

May 16, 2016 pm 05:47 PM
Browser wird geladen 渲染

用 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
Nach dem Login kopieren

很明显,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
Nach dem Login kopieren

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

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

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

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

最后总结下

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

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

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

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So rendern Sie eine orthogonale Draufsicht in Kujiale_Tutorial zum Rendern einer orthogonalen Draufsicht in Kujiale So rendern Sie eine orthogonale Draufsicht in Kujiale_Tutorial zum Rendern einer orthogonalen Draufsicht in Kujiale Apr 02, 2024 pm 01:10 PM

1. Öffnen Sie zunächst den Entwurfsplan, der in Kujiale gerendert werden soll. 2. Öffnen Sie dann das Rendering der Draufsicht im Rendering-Menü. 3. Klicken Sie dann in den Parametereinstellungen in der Renderoberfläche der Draufsicht auf Orthogonal. 4. Klicken Sie abschließend nach dem Anpassen des Modellwinkels auf Jetzt rendern, um die orthogonale Draufsicht zu rendern.

Ist das Rendern von Vue-Seiten synchron oder asynchron? Ist das Rendern von Vue-Seiten synchron oder asynchron? Dec 13, 2022 pm 07:26 PM

Das Rendern von Vue-Seiten erfolgt asynchron. Vue verwendet asynchrones Rendering, das die Leistung verbessern kann. Wenn keine asynchronen Aktualisierungen verwendet werden, wird die aktuelle Komponente bei jeder Datenaktualisierung neu gerendert. Aus Leistungsgründen aktualisiert Vue die Ansicht nach dieser Datenaktualisierungsrunde.

Vue-Fehler: V-HTML kann nicht korrekt zum Rendern dynamischen HTML-Codes verwendet werden. Wie kann das Problem behoben werden? Vue-Fehler: V-HTML kann nicht korrekt zum Rendern dynamischen HTML-Codes verwendet werden. Wie kann das Problem behoben werden? Aug 19, 2023 pm 12:27 PM

Vue-Fehler: V-HTML kann nicht korrekt zum Rendern dynamischen HTML-Codes verwendet werden. Wie kann das Problem behoben werden? Einführung: In der Vue-Entwicklung müssen wir häufig HTML-Code dynamisch rendern, um Rich-Text-Inhalte oder dynamisch generierte Benutzereingaben anzuzeigen. Vue stellt die v-html-Direktive zur Implementierung dieser Funktion bereit. Manchmal können jedoch Probleme auftreten, die dazu führen, dass dynamischer HTML-Code mit v-html nicht korrekt wiedergegeben werden kann. In diesem Artikel werden die Ursachen dieses Problems untersucht und Lösungen bereitgestellt. Problembeschreibung: Wenn wir in Vue v

v-for-Funktion in Vue3: perfekte Lösung zum Rendern von Listendaten v-for-Funktion in Vue3: perfekte Lösung zum Rendern von Listendaten Jun 19, 2023 am 08:04 AM

In Vue3 gilt v-for als die beste Methode zum Rendern von Listendaten. v-for ist eine Direktive in Vue, die es Entwicklern ermöglicht, ein Array oder Objekt zu durchlaufen und für jedes Element einen HTML-Code zu generieren. Die v-for-Direktive ist eine der mächtigsten Vorlagendirektiven, die Entwicklern zur Verfügung stehen. In Vue3 wurde die v-for-Anweisung weiter optimiert, wodurch sie einfacher zu verwenden und flexibler ist. Die größte Änderung der v-for-Direktive in Vue3 ist die Bindung von Elementen. Verwenden Sie in Vue2 die v-for-Direktive

Vue-Fehler: V-HTML kann nicht korrekt zum Rendern von HTML-Code verwendet werden. Wie kann das Problem behoben werden? Vue-Fehler: V-HTML kann nicht korrekt zum Rendern von HTML-Code verwendet werden. Wie kann das Problem behoben werden? Aug 26, 2023 am 11:25 AM

Vue-Fehler: V-HTML kann nicht korrekt zum Rendern von HTML-Code verwendet werden. Wie kann das Problem behoben werden? Vue ist ein beliebtes JavaScript-Framework, das uns beim Erstellen interaktiver Benutzeroberflächen helfen kann. In Vue können wir die v-html-Direktive verwenden, um HTML-Code in Vorlagen zu rendern. Allerdings kann es manchmal zu einem Problem kommen: Der HTML-Code kann mit v-html nicht korrekt gerendert werden. In diesem Artikel werden einige häufige Ursachen und Lösungen beschrieben, die Ihnen bei der Lösung dieses Problems helfen sollen. Der erste mögliche Grund ist, dass die

Wie kann ich mit Vue eine Bildkorrektur und Rendering-Verarbeitung erreichen? Wie kann ich mit Vue eine Bildkorrektur und Rendering-Verarbeitung erreichen? Aug 19, 2023 pm 07:53 PM

Wie kann ich mit Vue eine Bildkorrektur und Rendering-Verarbeitung erreichen? Überblick Bei der Entwicklung moderner Webanwendungen ist die Bildverarbeitung eine sehr häufige Anforderung. Mit Vue.js, einem beliebten JavaScript-Framework, wird die Implementierung der Bildkorrektur und Rendering-Verarbeitung sehr einfach und effizient. Dieser Artikel zeigt, wie Sie die Bildkorrektur und Rendering-Verarbeitung über Vue.js implementieren, und enthält Codebeispiele. Schritt 1: Erstellen Sie eine Vue-Instanz. Zuerst müssen wir eine Vue-Instanz erstellen, um die Daten und die Logik des Bildes zu verwalten. im HT

Neuzeichnen vs. Reflow: Welches hat einen kritischeren Einfluss auf die Rendering-Phase? Neuzeichnen vs. Reflow: Welches hat einen kritischeren Einfluss auf die Rendering-Phase? Jan 26, 2024 am 10:16 AM

Die Auswirkungen von Neuzeichnen und Reflow auf die Rendering-Phase: Wer ist wichtiger? Beim Rendern einer Webseite führt der Browser eine Reihe von Vorgängen in einer bestimmten Reihenfolge aus, um den Seiteninhalt anzuzeigen. Unter diesen sind Neuzeichnen und Reflow zwei wichtige Schritte im Renderprozess. In diesem Artikel werden die Auswirkungen von Neuzeichnen und Reflow auf die Rendering-Phase untersucht und ihre Bedeutung analysiert. Die Bedeutung und der Unterschied zwischen Neuzeichnen und Reflow Bevor wir die Auswirkungen von Neuzeichnen und Reflow auf das Rendern verstehen, wollen wir zunächst ihre Bedeutung und ihren Unterschied verstehen. Repaint bezieht sich auf Änderungen des Stils eines Elements, hat jedoch keine Auswirkungen auf das Element

Beherrschen Sie die Implementierung und das Funktionsprinzip des Canvas-Rendering-Modus Beherrschen Sie die Implementierung und das Funktionsprinzip des Canvas-Rendering-Modus Jan 17, 2024 am 08:40 AM

Um die Prinzipien und die Implementierung des Canvas-Rendering-Modus zu verstehen, sind spezifische Codebeispiele erforderlich. Zunächst müssen wir klarstellen, dass Canvas die von HTML5 bereitgestellte Zeichen-API ist, die es uns ermöglicht, JavaScript im Browser zum Zeichnen von Grafiken, Animationen usw. zu verwenden andere visuelle Effekte. Canvas kann in zwei Rendering-Modi gezeichnet werden: 2D-Rendering-Modus und WebGL-Rendering-Modus. Der 2D-Rendering-Modus ist der Standardmodus von Canvas. Er verwendet den 2D-Kontext des Canvas-Elements in HTML5, um Bilder zu zeichnen.

See all articles