Einige Optimierungsregeln für Browser-Webseiten Seitenoptimierung Statische Ressourcenkomprimierung Verwenden Sie Build-Tools (Webpack, Gulp), um statische Ressourcen von Webseiten wie Bilder, Skripts und Stile entsprechend zu komprimieren. CSS-Sprites, Base64-Inline-Bilder Kombinieren Sie die kleinen Symbole auf der Site zu einem Bild, verwenden Sie CSS, um die entsprechenden Symbole zu finden und zu erfassen; verwenden Sie Inline-Bilder entsprechend. Stile werden oben und Skripte unten platziert Die Seite wird schrittweise präsentiert. Wenn Sie den Stil oben platzieren, kann die Seite dem Benutzer schneller präsentiert werden. Wenn Sie das <script>-Tag oben platzieren, wird der Download von Ressourcen hinter der Seite blockiert. Verwenden Sie externes CSS und JS Mehrere Seiten verweisen auf gemeinsame statische Ressourcen und die Wiederverwendung von Ressourcen reduziert zusätzliche HTTP-Anfragen. Vermeiden Sie Bilder mit leerem Quellcode Vermeiden Sie unnötige HTTP-Anfragen. <!-- Bilder mit leerem Quellcode initiieren weiterhin HTTP-Anfragen--> <img src="" alt="Bild" /> Vermeiden Sie die Skalierung von Bildern in HTML Versuchen Sie die angegebene Größe des Bildes nach Bedarf zu nutzen, anstatt ein großes Bild zu laden und es anschließend zu verkleinern. <!-- Die tatsächliche Bildgröße beträgt 600 x 300, skaliert auf 200 x 100 in HTML --> <img src="/static/images/a.png" width="200" height="100" alt="bild" /> Vorladen Durch Festlegen des Preload-Attributs für die rel-Eigenschaft des Link-Tags kann der Browser Ressourcen vorladen, bevor der Haupt-Rendering-Mechanismus eingreift. Dieser Mechanismus kann Ressourcen früher abrufen und blockiert die Initialisierung der Seite nicht. <!DOCTYPE html> <html lang="de"> <Kopf> <meta charset="UTF-8"> <title>Dokument</title> <link ref="vorladen" href="style.css" as="style"> <link ref="vorladen" href="main.js" as="script"> <link ref="stylesheet" href="style.css"> </Kopf> <Text> <script src="main.js"></script> </body> </html> Im Beispiel werden CSS- und JS-Dateien vorab geladen und sofort aufgerufen, sobald sie beim nachfolgenden Rendern der Seite verwendet werden. Sie können den Typ angeben, um verschiedene Arten von Ressourcen zu laden.
Mit dieser Methode können durch Festlegen des Attributs „Crossorigin“ auch Ressourcen über mehrere Domänen hinweg vorgeladen werden. <link rel="preload" href="fonts/cicle_fina-webfont.woff2" as="Schriftart" type="font/woff2" crossorigin="anonym"> CSS Wähler Die Selektoren haben die folgende Prioritätsreihenfolge (von der höchsten zur niedrigsten):
h1 + p{ oberer Rand: 15px; } Wählt den Absatz aus, der unmittelbar nach einem h1-Element erscheint. Die h1- und p-Elemente haben ein gemeinsames übergeordnetes Element. Untergeordnete Selektoren h1 > stark {Farbe:rot;} Nachkommenselektoren h1 em {Farbe: rot;} Platzhalterselektor Attributselektoren *[Titel] {Farbe:rot;} img[alt] {border: 5px durchgezogenes Rot;} Pseudoklassen-Selektoren Erfahrung bei der Verwendung des Selektors:
Reduzieren Sie die Anzahl der Selektoren Basierend auf der Priorität des vorherigen Selektors sollten Sie versuchen, die Verschachtelung mehrerer Selektorebenen zu vermeiden, vorzugsweise nicht mehr als 3 Ebenen. .container .text .logo{ Farbe: rot; } /*Ändern in*/ .container .text-logo{ Farbe: rot; } Optimieren Sie Seitenstildateien und entfernen Sie nicht verwendete Stile Der Browser führt unnötige Stilanpassungen durch, was sich auf die Renderzeit auswirkt. Darüber hinaus wirken sich übermäßig große Stildateien auch auf die Ladegeschwindigkeit aus. Verwenden der CSS-Vererbung zur Reduzierung der Codemenge Durch die Verwendung der vererbbaren Eigenschaften von CSS legt das übergeordnete Element den Stil fest und das untergeordnete Element muss ihn nicht erneut festlegen. Zu den häufig vererbten Eigenschaften zählen: Farbe, Schriftgröße, Schriftfamilie usw.; zu den nicht vererbten Eigenschaften zählen: Position, Anzeige, Float usw. Wenn der Attributwert 0 ist, wird keine Einheit hinzugefügt Wenn der CSS-Attributwert 0 ist, ist keine Einheit erforderlich, um die Codemenge zu reduzieren. .text{ Breite: 0px; Höhe: 0px; } /*Ändern in*/ .text{ Breite: 0; Höhe: 0; } JavaScript Verwenden der Ereignisdelegierung Verwenden Sie die Ereignisdelegation, um Ereignisse an mehrere ähnliche DOM-Elemente zu binden. <ul id="Behälter"> <li Klasse="Liste">1</li> <li Klasse="Liste">2</li> <li Klasse="Liste">3</li> </ul> // Unsinniger Weg: Binden Sie das Klickereignis an jedes Element $('#container .list').on('click', function() { var text = $(dieser).text(); konsole.log(text); }); // Methode zur Ereignisdelegierung: Verwenden Sie den Ereignis-Bubbling-Mechanismus, um Ereignisse an das übergeordnete Element zu delegieren$('#container').on('click', '.list', function() { var text = $(dieser).text(); konsole.log(text); }); Es ist zu beachten, dass Ereignisse bei Verwendung der Ereignisdelegierung zwar an Dokumente delegiert werden können, dies jedoch unvernünftig ist. Zum einen kann es leicht zu Fehleinschätzungen von Ereignissen kommen und zum anderen ist die Sucheffizienz in der Bereichskette gering. Als Delegatobjekt sollte das nächstgelegene übergeordnete Element ausgewählt werden. Neben der besseren Leistung entfällt durch die Ereignisdelegation auch die Notwendigkeit, Ereignisse an dynamisch erstellte DOM-Elemente zu binden. DOMContentLoaded Sie können mit der Verarbeitung des DOM-Baums beginnen, nachdem die DOM-Elemente geladen wurden (DOMContentLoaded), ohne warten zu müssen, bis alle Bildressourcen heruntergeladen sind. // Natives JavaScript document.addEventListener("DOMContentLoaded", Funktion(Ereignis) { console.log("DOM vollständig geladen und analysiert"); }, FALSCH); // jQuery $(Dokument).bereit(Funktion() { console.log("bereit!"); }); // Eine vereinfachte Version von $(document).ready()$(function() { console.log("bereit!"); }); Vorladen und verzögertes Laden Vorladen Nutzen Sie die Leerlaufzeit des Browsers, um Ressourcen vorzuladen, die möglicherweise später verwendet werden, beispielsweise Bilder, Stile und Skripts. Bedingungsloses Vorladen Sobald Onload ausgelöst wird, erhalten Sie sofort die Ressourcen, die in Zukunft benötigt werden. Bildressourcen vorab laden. (3 Möglichkeiten zum Implementieren des Vorladens von Bildern). Vorladen basierend auf dem Benutzerverhalten Bestimmen Sie die möglichen Vorgänge des Benutzerverhaltens und laden Sie Ressourcen vorab, die in Zukunft möglicherweise benötigt werden.
Lazy Loading Mit Ausnahme der Inhalte oder Komponenten, die für die Seiteninitialisierung erforderlich sind, können alle anderen Elemente verzögert geladen werden, z. B. JS-Bibliotheken zum Ausschneiden von Bildern, Bilder, die sich nicht im sichtbaren Bereich befinden usw. Lazy Loading von Bildern. (Beurteilen Sie, ob sich das Bild im sichtbaren Bereich befindet. Wenn ja, weisen Sie dem Bild den tatsächlichen Pfad zu.) Vermeidung globaler Lookups Jede nicht lokale Variable, die mehr als einmal in einer Funktion verwendet wird, sollte zu einer lokalen Variable gemacht werden. Funktion updateUI(){ var imgs = document.getElementsByTagName("img"); für (var i=0, len=imgs.length; i < len; i++){ imgs[i].title = Dokument.Titel + " Bild " + i; } var msg = document.getElementById("msg"); msg.innerHTML = "Aktualisierung abgeschlossen."; } Die globale Dokumentvariable wird in der obigen Funktion oft verwendet, insbesondere in der For-Schleife. Daher ist es eine bessere Lösung, die globale Dokumentvariable als lokale Variable zu speichern und dann zu verwenden. Funktion updateUI(){ var doc = Dokument; var imgs = doc.getElementsByTagName("img"); für (var i=0, len=imgs.length; i < len; i++){ imgs[i].title = doc.title + " Bild " + i; } var msg = doc.getElementById("msg"); msg.innerHTML = "Aktualisierung abgeschlossen."; } Beachten Sie jedoch, dass im JavaScript-Code jede Variable, die nicht mit var deklariert ist, zu einer globalen Variable wird und eine unsachgemäße Verwendung zu Leistungsproblemen führt. Vermeiden Sie unnötige Immobilienanfragen Die Verwendung von Variablen und Arrays ist effizienter als der Zugriff auf Eigenschaften von Objekten, da das Objekt die Prototypenkette nach einer Eigenschaft mit diesem Namen durchsuchen muss. // Verwenden des Arrays var values = [5, 10]; var Summe = Werte[0] + Werte[1]; Alarm(Summe); // Verwenden von Objekten var values = { first: 5, second: 10}; var Summe = Werte.erste + Werte.zweite; Alarm(Summe); Im obigen Code werden Objekteigenschaften zur Berechnung verwendet. Das Nachschlagen einer oder zweier Eigenschaften verursacht keine Leistungsprobleme. Wenn jedoch mehrere Nachschlagevorgänge erforderlich sind, z. B. in einer Schleife, wird die Leistung beeinträchtigt. Beim Nachschlagen mehrerer Eigenschaften zum Abrufen eines einzelnen Werts, beispielsweise: var Abfrage = window.location.href.substring(window.location.href.indexOf("?")); Sollte unnötige Eigenschaftensuchen reduzieren, indem window.location.href als Variable zwischengespeichert wird. var url = fenster.standort.href; var Abfrage = url.substring(url.indexOf("?")); Funktionsdrosselung Angenommen, es gibt ein Suchfeld. Binden Sie das Ereignis „onkeyup“ an das Suchfeld, sodass jedes Mal, wenn die Maus angehoben wird, eine Anforderung gesendet wird. Durch den Einsatz von Drosselungsfunktionen kann sichergestellt werden, dass mehrere aufeinanderfolgende Operationen innerhalb einer festgelegten Zeit bei der Benutzereingabe nur eine Anfrage auslösen. <Eingabetyp="Text" ID="Eingabe" Wert="" /> // Ereignis binden document.getElementById('input').addEventListener('keyup', function() { Gas geben (Suche); }, FALSCH); //Logische Funktion function search() { console.log('suchen...'); } //Drosselungsfunktion function throttle(Methode, Kontext) { Zeitüberschreitung löschen(Methode.tId); Methode.tId = setTimeout(Funktion() { Methode.Aufruf(Kontext); }, 300); } Die Anwendungsszenarien von Drosselungsfunktionen sind nicht auf Suchfelder beschränkt. Drosselungsfunktionen sollten beispielsweise verwendet werden, um die Leistung beim Scrollen von Seiten, Onscroll und beim Strecken des Fensters bei der Größenänderung zu verbessern. Minimieren Sie die Anzahl der Anweisungen Die Anzahl der Anweisungen wirkt sich auch auf die Geschwindigkeit der Operationsausführung aus. Mehrere Variablendeklarationen zu einer zusammenführen // Mehrere Var-Deklarationen verwenden var count = 5; var Farbe = "blau"; var-Werte = [1,2,3]; var jetzt = neues Datum(); // Nach der Verbesserung var count = 5, Farbe = "blau", Werte = [1,2,3], jetzt = neues Datum(); Eine verbesserte Version wäre die Verwendung nur einer durch Kommas getrennten Var-Deklaration. Wenn viele Variablen vorhanden sind, ist die Verwendung nur einer Variablendeklaration viel schneller, als die Deklaration jeder Variablen einzeln. Verwenden von Array- und Objektliteralen Verwenden Sie Array- und Objektliterale anstelle einer Anweisung-für-Anweisung-Zuweisung. var-Werte = neues Array(); Werte[0] = 123; Werte[1] = 456; Werte[2] = 789; // Nach der Verbesserung var values = [123, 456, 789]; var Person = neues Objekt(); person.name = "Jack"; Person.Alter = 28; person.sayName = function(){ Alarm (dieser Name); }; // Verbesserte var person = { Name: "Jack", Alter: 28, sageName : Funktion(){ Alarm (dieser Name); } }; String-Optimierung Zeichenfolgenverkettung Frühere Browser optimierten die Methode zum Verketten von Zeichenfolgen mit Pluszeichen nicht. Da Zeichenfolgen unveränderlich sind, muss zum Speichern des Ergebnisses eine Zwischenzeichenfolge verwendet werden. Die häufige Erstellung und Zerstörung von Zeichenfolgen ist daher ineffizient. var text = "Hallo"; text+= " "; text+= "Welt!"; Durch das Hinzufügen der Zeichenfolge zum Array und das anschließende Aufrufen der Join-Methode des Arrays zum Konvertieren in eine Zeichenfolge wird die Verwendung des Additionsoperators vermieden. var arr = [], ich = 0; arr[i++] = "Hallo"; arr[i++] = " "; arr[i++] = "Welt!"; var text = arr.join(''); Moderne Browser haben die Zeichenkettenverkettung mit dem Additionsoperator optimiert, daher ist der Additionsoperator in den meisten Fällen immer noch die bevorzugte Wahl. Reduzieren Sie Reflows und Neulackierungen Der Browser-Rendering-Prozess umfasst Reflow und Neuzeichnen, was ein leistungsintensiver Prozess ist. Sie sollten darauf achten, Aktionen zu reduzieren, die Reflow und Neuzeichnen während Skriptvorgängen auslösen.
Welche Aktionen lösen einen Reflow oder eine Neulackierung aus?
Wie kann man den Umbruch und die Neuzeichnung reduzieren, um die Leistung von Webseiten zu verbessern? 1. Skriptoperationen an DOM-Elementen
2. Ändern Sie den Stil des Elements
3. Wenn Sie einem Element eine Animation hinzufügen, setzen Sie den CSS-Stil des Elements auf position:fixed oder position:absolute. Dadurch wird verhindert, dass das Element neu fließt, nachdem es den Dokumentfluss verlassen hat. 4. Verwenden Sie die Drosselungsfunktion (siehe oben), wenn Sie die Fenstergröße anpassen, Eingabefelder öffnen, Seiten scrollen usw. HTTP Browser-Cache Eine sinnvolle Einstellung des Browser-Cache ist eines der wichtigsten Mittel zur Webseiten-Optimierung. Ablaufdatum und Cache-Kontrolle Expires kommt von HTTP1.0 und Cache-Control kommt von HTTP1.1. Wenn beide gleichzeitig eingestellt sind, überschreibt Cache-Control Expires.
ETag und Last-Modified Sowohl ETag als auch Last-Modified werden vom Server in den Antwortheadern zurückgegeben, wobei ETag eine höhere Priorität hat als Last-Modified, was bedeutet, dass der Server dem ETag-Wert Priorität einräumt.
Starkes Caching und ausgehandeltes Caching Die Cache-Typen sind starker Cache und ausgehandelter Cache. Der Unterschied zwischen beiden besteht darin, dass der starke Cache keine Anfrage an den Server sendet, während der ausgehandelte Cache eine Anfrage sendet. Wenn die Übereinstimmung erfolgreich ist, wird 304 Not Modified zurückgegeben, und wenn die Übereinstimmung nicht erfolgreich ist, wird 200 zurückgegeben. Der Browser überprüft zuerst den starken Cache. Wenn der starke Cache keinen Treffer liefert, führt er eine Prüfung des ausgehandelten Caches durch. So konfigurieren Sie den Browser-Cache
Warum HTTP-Anfragen reduzieren? Maßnahmen zur Reduzierung von HTTP-Anfragen machen einen großen Teil der Leistungsoptimierung aus, wie z. B.: Verwendung von CSS-Sprites anstelle mehrerer Bildanforderungen, Vermeidung von Bildern mit leerem src, Verwendung von Inline-Bildern, Verwendung von extern verknüpftem CSS und JS, Caching usw. Der Vorgang von der Eingabe der URL bis zum Laden der Seite ist wie folgt:
Eine vollständige HTTP-Anfrage muss diese Prozesse durchlaufen, was zeit- und ressourcenintensiv ist, daher ist es notwendig, die Anzahl der Anfragen zu reduzieren. Quellen: Hochleistungs-Website-Erstellung vs. Hochleistungs-Website-Erstellung – Erweiterter Leitfaden Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. |
<<: Umfassende Analyse des MySql-Master-Slave-Replikationsmechanismus
>>: Beispiel für die Verwendung von CSS3 zum Anpassen des Stils eines Eingabe-Mehrfachauswahlfelds
Zu meistern: localStorage, Komponentenkapselung Ä...
1. Warum einen Index erstellen? (Vorteile) Dies l...
1. Hintergrund 1. Das Frontend verwendet vue + vu...
In diesem Artikel wird der spezifische Code von J...
Neuere Linux-Distributionen verfügen nicht mehr ü...
Über Win Docker-Desktop möchte ich mich mit der C...
Im vorherigen Artikel wurde erwähnt, dass die in ...
Inhaltsverzeichnis Vorwort 【Protokoll rückgängig ...
Beispielverwendung Code kopieren Der Code lautet w...
Vorwort Um Dateiberechtigungen im Terminal eines ...
Die Zeit der virtuellen VM Ware-Maschine CentOS s...
In diesem Artikelbeispiel wird der spezifische Co...
Das Docker-Repository selbst ist sehr langsam, ab...
Mininet Mininet ist eine leichtgewichtige, softwa...
1. Problem Es gibt eine Tabelle wie unten gezeigt...