Heim  >  Artikel  >  Web-Frontend  >  Eine kurze Analyse des CSS-Ladens und der Ladereihenfolge

Eine kurze Analyse des CSS-Ladens und der Ladereihenfolge

小云云
小云云Original
2017-12-26 09:20:032296Durchsuche

Dieser Artikel ist sehr gut für Grundschüler und Freunde geeignet. Dieser Artikel stellt hauptsächlich das Laden und die Ladereihenfolge von CSS sowie die Analyse der aufgetretenen Probleme vor. Der Artikel gibt Ihnen auch eine ergänzende Einführung in die Ladereihenfolge von HTML, CSS und js. Freunde in Not können darauf verweisen, ich hoffe, es kann allen helfen.

Übliche CSS-Ladereihenfolge

Im Allgemeinen wird unser CSS-Stylesheet an der Spitze platziert. Um Anfragen zu reduzieren, führen wir normalerweise das CSS zusammen und komprimieren es. Derzeit wird unser CSS im Allgemeinen wie folgt geladen:

<head>
  <link rel="stylesheet" href="/all-of-my-styles.css">
</head>
<body>
  …content…
</body>

Das ist in Ordnung, aber es gibt mehrere Leistungsprobleme, die wir weiter optimieren können:

Probleme:

Alle CSS Alle werden in einer Datei zusammengeführt und komprimiert und am Kopf der Seite geladen. Vielleicht verwenden wir auf dem ersten Bildschirm nur ein wenig CSS, laden aber das gesamte CSS in den Header, was zu unangemessenem Laden und Ressourcenverschwendung führt. Wenn das CSS sehr groß ist, wirkt sich dies erheblich auf die Ladegeschwindigkeit der Webseite und die Anzeigegeschwindigkeit des ersten Bildschirms aus.

Eine andere Denkweise

Wenn keine Zusammenführung und keine einzige CSS-Komprimierungsreferenz vorhanden ist, ist die Dateigröße kleiner, aber die Anzahl der Anforderungen ist größer. Nach Abwägung der beiden und Durchführung eines Leistungstestvergleichs stellten wir fest, dass die folgende Schreibmethode tatsächlich schneller ist, als das gesamte CSS im Kopf zu platzieren und alles auf einmal zu laden, und dass die Geschwindigkeit der ersten Bildschirmanzeige schneller ist:

<head>
</head>
<body>
  <!-- HTTP/2 push this resource, or inline it, whichever&#39;s faster -->
  <link rel="stylesheet" href="/site-header.css">
  <header>…</header>
  <link rel="stylesheet" href="/article.css">
  <main>…</main>
  <link rel="stylesheet" href="/comment.css">
  <section class="comments">…</section>
  <link rel="stylesheet" href="/about-me.css">
  <section class="about-me">…</section>
  <link rel="stylesheet" href="/site-footer.css">
  <footer>…</footer>
</body>

Aber es gibt immer noch Leistung, die optimiert werden kann!

Zum Beispiel:

Nur ​​die Kopfzeile und die Artikel werden auf dem ersten Bildschirm angezeigt, andere Module werden nicht auf dem ersten Bildschirm angezeigt. Dann können wir das CSS anderer Module vollständig asynchron laden. Wie lade ich asynchron?

Siehe unten

loadCSS und Preload

Zum Thema Preload werden wir zwei Artikel veröffentlichen, die jeder lesen kann:

1. Pass rel="preload " Inhalt vorladen: https://developer.mozilla.org/zh-CN/docs/Web/HTML/Preloading_content

2. W3-Dokumentation vorladen: https://www.w3.org/TR /preload /

Für einige CSS, die nicht auf dem ersten Bildschirm geladen werden, können wir es wie folgt schreiben:

<link rel="preload" href="path/to/haorooms.css" as="style" onload="this.rel=&#39;stylesheet&#39;">

um zu verhindern, dass der Browser js verbietet. wir können es auch wie folgt schreiben:

<link rel="preload" href="path/to/haorooms.css" as="style" onload="this.rel=&#39;stylesheet&#39;">

Um zu vermeiden, dass einige Browser das Handler-Attribut rel='stylesheet' erneut aufrufen, empfehlen wir generell die folgende Schreibweise:

<link rel="preload" href="path/to/haorooms.css" as="style" onload="this.onload=null;this.rel=&#39;stylesheet&#39;">
<noscript><link rel="stylesheet" href="path/to/haorooms.css"></noscript>

Für eine bessere Kompatibilität mit rel=preload können Sie LoadCSS verwenden, Github-Adresse: https://github.com/filamentgroup/loadCSS

Daher können Sie ohne Berücksichtigung von Browserkompatibilitätsproblemen (unter Berücksichtigung von Kompatibilitätsproblemen) verwenden LoadCss, hier keine weitere Demonstration), wir haben den obigen Code erneut optimieren:

<head>
  <link rel="stylesheet" href="/首屏加载css.css">
  <link rel="preload" href="/不是首屏加载的css.css" as="style" onload="this.onload=null;this.rel=&#39;stylesheet&#39;">
</head>
<body>
  <header>…</header>
  <main>…</main>
  <section class="comments">…</section>
  <section class="about-me">…</section>
  <footer>…</footer>
</body>

PS: Werfen wir einen Blick auf die Ladereihenfolge von HTML, CSS und JS

<head lang="en">
    <meta charset="utf-8">
    <title></title>
    <link rel="stylesheet" href="css/*.css">
    <script src="js/*.js></script>
</head>

Die Ladereihenfolge von DOM-Dokumenten erfolgt von oben nach unten. Sequentielles Laden; DOM wird in den Link-Tag geladen

Das Laden der CSS-Datei erfolgt parallel zum Laden des DOM Das heißt, der Dom lädt und baut weiter, wenn das CSS geladen wird, und der dabei angetroffene CSS-Stil oder IMG sendet eine Anfrage an den Server. Nachdem die Ressource zurückgegeben wurde, wird sie dem entsprechenden hinzugefügt Position im Dom;

2. Das DOM wird in das Skript-Tag geladen

Da die js-Datei nicht parallel zum DOM geladen wird, müssen Sie auf die gesamte js-Datei warten Wenn die JS-Skriptdatei zu groß ist, kann dies zu Verzögerungen bei der Anzeige der Browserseite führen. Dieser Effekt wird als „Blockierungseffekt“ bezeichnet zu einer sehr schlechten Benutzererfahrung;

Und diese Funktion ist auch der Grund, warum $(document).ready(function(){ am Anfang der js-Datei }) oder (function(){}) oder benötigt wird window.onload, das heißt, die js-Datei wird erst ausgeführt, nachdem das DOM-Dokument geladen wurde, sodass es keine Probleme gibt, z. B. dass der DOM-Knoten nicht gefunden werden kann.

js blockiert andere Der Grund dafür Das Laden von Ressourcen besteht darin, dass der Browser den DOM-Baum neu erstellen muss

Voraussetzung: js ist ein externes Skript;

Fügen Sie defer="ture" im Skript-Tag hinzu, wodurch js und DOM parallel geladen werden, nachdem die Seite geladen wurde, sodass keine Blockierung erfolgt Fügen Sie im Scirpt-Tag async="ture" hinzu. Dieses Attribut teilt dem Browser mit, dass die JS-Datei asynchron geladen und ausgeführt wird, das heißt, sie hängt nicht von anderen JS- und CSS-Dateien ab garantiert, aber es kann auch parallel zum DOM-Effekt geladen werden.

Wenn die Defer-Attribute gleichzeitig verwendet werden, ist das Defer-Attribut ungültig das Scipt-Tag nach dem Body-Tag, damit es zu keinen Ladekonflikten kommt.

Verwandte Empfehlungen:

Ladereihenfolge und Ausführung von HTML-, CSS- und JS-Dateien

Seitenladereihenfolge problem_html /css_WEB- ITnose


Detaillierte Einführung in die Ausführungsergebnisse der Ladereihenfolge von Klassen in Java

Das obige ist der detaillierte Inhalt vonEine kurze Analyse des CSS-Ladens und der Ladereihenfolge. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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