Komponente zur Leistungsoptimierung für den ersten Vue-BildschirmImplementieren Sie einfach eine Vue-Komponente zur Leistungsoptimierung für den ersten Bildschirm. Moderne Browser bieten viele neue Schnittstellen. Ohne die IE-Kompatibilität zu berücksichtigen, können diese Schnittstellen den Arbeitsaufwand beim Schreiben von Code und bei der Leistungsoptimierung erheblich reduzieren. Um den IE zu berücksichtigen, können wir natürlich auch eine Sicherung dafür bereitstellen, wenn wir Komponenten kapseln. Die in diesem Artikel beschriebene Komponente zur Leistungsoptimierung für den ersten Bildschirm verwendet hauptsächlich die beiden Schnittstellen IntersectionObserver und requestIdleCallback. beschreibenBetrachten wir zunächst das Szenario des ersten Bildschirms. Wenn ein erster Bildschirm hauptsächlich zur Anzeige erstellt wird, werden normalerweise mehr Ressourcen wie Bilder geladen. Wenn wir nicht alle Ressourcen laden möchten, wenn der Benutzer ihn öffnet, sondern möchten, dass der Benutzer vor dem Laden der Komponente zur entsprechenden Position scrollt, können wir die Schnittstelle IntersectionObserver wählen. Natürlich können wir auch das Onscroll-Ereignis verwenden, um einen Listener zu erstellen, aber die Leistung kann schlechter sein. Es gibt auch einige Komponenten, von denen wir hoffen, dass sie geladen werden müssen, aber wir möchten nicht, dass sie synchron geladen werden, wenn die Seite initialisiert wird. Auf diese Weise können wir asynchrone Methoden wie Promise und setTimeout verwenden. Wenn wir jedoch die Priorität des Ladens dieser Komponente verringern möchten, können wir die Schnittstelle requestIdleCallback in Betracht ziehen. Der relevante Code befindet sich im Zweig vue--first-screen-optimization von https://github.com/WindrunnerMax/webpack-simple-environment. KreuzungsbeobachterDie Schnittstelle IntersectionObserver, die zur API Intersection Observer gehört, bietet eine Methode zum asynchronen Beobachten des Schnittpunktstatus eines Zielelements mit seinem Vorgängerelement oder dem Dokumentansichtsfenster der obersten Ebene. Das Vorgängerelement und das Ansichtsfenster werden als Wurzeln bezeichnet. Das heißt, die API IntersectionObserver kann automatisch beobachten, ob das Element sichtbar ist. Da das Wesen der Sichtbarkeit darin besteht, dass das Zielelement und das Ansichtsfenster einen Schnittpunktbereich erzeugen, wird diese API als Schnittpunktbeobachter bezeichnet. Kompatibilität https://caniuse.com/?search=IntersectionObserver. const io = neuer IntersectionObserver(Rückruf, Option); // Beginnen Sie mit der Beobachtung io.observe(document.getElementById("example")); // Beobachtung beenden io.unobserve(element); // Schließen Sie den Beobachter io.disconnect();
Darüber hinaus wird bei der Ausführung der Callback-Funktion ein Objektparameter „IntersectionObserverEntry“ übergeben, der folgende Informationen bereitstellt.
{ Zeit: 3893,92, rootBounds: ClientRect { unten: 920, Höhe: 1024, links: 0, rechts: 1024, oben: 0, Breite: 920 }, boundingClientRect: ClientRect { // ... }, Kreuzungsrechteck:ClientRechteck { // ... }, Schnittmenge: 0,54, Ziel: Element } AnfrageIdleCallbackDie Methode requestIdleCallback kann eine Funktion akzeptieren, die während der Leerlaufzeit des Browsers aufgerufen wird. Dadurch können Entwickler Hintergrundarbeiten und Arbeiten mit niedriger Priorität an der Hauptereignisschleife durchführen, ohne verzögerte Schlüsselereignisse wie Animationen und Eingabeantworten zu beeinträchtigen. Funktionen werden im Allgemeinen in der Reihenfolge „First-In-First-Out“ ausgeführt. Wenn die Rückruffunktion ein Ausführungstimeout angibt, ist es möglich, die Ausführungsreihenfolge zu unterbrechen, um die Funktion vor dem Timeout auszuführen. Kompatibilität https://caniuse.com/?search=requestIdleCallback. const handle = window.requestIdleCallback(Rückruf[, Optionen]);
erreichenTatsächlich geht es beim Schreiben von Komponenten hauptsächlich darum, herauszufinden, wie diese beiden Haupt-APIs verwendet werden. Konzentrieren wir uns zunächst auf IntersectionObserver. Da wir die dynamische Komponente <component /> verwenden müssen, müssen wir beim Übergeben von Werten an sie das Formular asynchrones Laden der Komponente () => import("component") verwenden. Beim Abhören können Sie erwägen, den Listener nach Abschluss des Ladevorgangs oder nach Verlassen des Sichtbereichs usw. zu zerstören. Dies ist hauptsächlich eine strategische Angelegenheit. Wenn die Seite zerstört wird, muss der Intersection Observer getrennt werden, um Speicherlecks zu verhindern. Die Verwendung von requestIdleCallback ist relativ einfach. Sie müssen nur die Rückruffunktion ausführen, die der asynchronen Verarbeitung von Promise.resolve().then ähnelt. Hier ist eine einfache Implementierungslogik. Normalerweise besteht die Verwendung des Observers darin, zuerst ein Div als Platzhalter zu verwenden und dann den Container des Platzhalters im Observer zu überwachen. Wenn sich der Container im Ansichtsfenster befindet, laden Sie die relevanten Komponenten. Der relevante Code befindet sich im Zweig vue--first-screen-optimization von https://github.com/WindrunnerMax/webpack-simple-environment. Bitte versuchen Sie, Yarn für die Installation zu verwenden. Sie können die Datei yarn.lock verwenden, um die Version zu sperren und Abhängigkeitsprobleme zu vermeiden. Nach dem Ausführen mit npm run dev können Sie die Reihenfolge sehen, in der diese vier Lazy-Loading-Komponenten in der Konsole erstellt werden. Unter ihnen muss der Lazy-Loading-Beobachter von A warten, bis die Ladeseite gerendert ist und vor dem Laden als im sichtbaren Bereich liegend beurteilt wird, sodass sie direkt auf dem ersten Bildschirm angezeigt werden kann. Das Lazy-Loading von D erfordert das Verschieben der Bildlaufleiste, bis der externe Container von D in der Ansicht erscheint, bevor er angezeigt wird. Mit anderen Worten wird die D-Komponente nicht geladen, wenn sie nicht nach unten gescrollt wird. Darüber hinaus können Attrs und Listener über Komponentenparameter und Komponentenereignisse an die Lazy-Loading-Komponente übergeben werden, was $attrs und $listeners ähnelt. An diesem Punkt wurde die Lazy-Loading-Komponente einfach implementiert. <!-- App.vue --> <Vorlage> <div> <Abschnitt>1</Abschnitt> <Abschnitt> <div>2</div> <Lazy-Load-Funktion :lazy-component="Beispiel" Typ="Beobachter" :component-params="{ Inhalt: 'Beispiel A' }" :Komponentenereignisse="{ 'Testereignis': Testereignis, }" ></lazy-load> </Abschnitt> <Abschnitt> <div>3</div> <Lazy-Load-Funktion :lazy-component="Beispiel" Typ="Leerlauf" :component-params="{ content: 'Beispiel B' }" :Komponentenereignisse="{ 'Testereignis': Testereignis, }" ></lazy-load> </Abschnitt> <Abschnitt> <div>4</div> <Lazy-Load-Funktion :lazy-component="Beispiel" Typ="faul" :component-params="{ Inhalt: 'Beispiel C' }" :Komponentenereignisse="{ 'Testereignis': Testereignis, }" ></lazy-load> </Abschnitt> <Abschnitt> <div>5</div> <Lazy-Load-Funktion :lazy-component="Beispiel" Typ="Beobachter" :component-params="{ Inhalt: 'Beispiel D' }" :Komponentenereignisse="{ 'Testereignis': Testereignis, }" ></lazy-load> </Abschnitt> </div> </Vorlage> <script lang="ts"> importiere { Komponente, Vue } von „vue-property-decorator“; importiere LazyLoad aus "./components/lazy-load/lazy-load.vue"; @Komponente({ Komponenten: { LazyLoad }, }) exportiere Standardklasse App erweitert Vue { geschütztes Beispiel = () => import("./components/example/example.vue"); geschütztes Testereignis (Inhalt: Zeichenfolge) { konsole.log(Inhalt); } } </Skript> <style lang="scss"> @import "./common/styles.scss"; Körper { Polsterung: 0; Rand: 0; } Abschnitt { Rand: 20px 0; Farbe: #fff; Höhe: 500px; Hintergrund: $color-blue; } </Stil> Frage des Tages https://github.com/WindrunnerMax/EveryDay siehe
ZusammenfassenDies ist das Ende dieses Artikels über die Leistungsoptimierungskomponente für den ersten Bildschirm des Vue-Projekts. Weitere relevante Inhalte zur Leistungsoptimierungskomponente für den ersten Bildschirm von Vue finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
>>: Detaillierte Erläuterung der Fallstricke beim Mischen von MySQL-Order-By und Limit
Übergeben Sie einfach benutzerdefinierte Paramete...
Vorwort Wenn CSS die Grundfertigkeit der Front-En...
Verwandte Systemaufrufe für Dateioperationen erst...
Inhaltsverzeichnis Datenvolumen Anonyme und benan...
Vorwort Fixieren Sie den Fußzeilenbereich unten. ...
SQL-Fuzzy-Abfrageanweisung Die allgemeine Fuzzy-A...
【Hintergrund】 Mir ist beim Lernen kürzlich etwas ...
Inhaltsverzeichnis Über Maxwell Konfiguration und...
>>>>>SSH-Tutorial zur Installation...
Speicher-Engine Was ist eine Datenbank-Speicher-E...
Inhaltsverzeichnis 1. Vorverarbeitung 2. Vorbehan...
Dieser Artikel beschreibt die MySQL-Integritätsbe...
Vorwort MySQL 8.0.13 unterstützt nun den Index-Sk...
Inhaltsverzeichnis Migrationstools Anwendungstran...
In diesem Artikel wird der spezifische JavaScript...