Heutzutage ist die Anwendungsentwicklung grundsätzlich von Front-End und Back-End getrennt. Zu den gängigen Front-End-Frameworks gehören SPA, MPA usw., sodass die Lösung des Seiten-Renderings und der Zeit für weiße Bildschirme zum Hauptanliegen wird. Webpack kann bei Bedarf geladen werden, wodurch die Größe des Codes reduziert wird, der auf dem ersten Bildschirm geladen werden muss. Durch den Einsatz von CDN-Technologie, statischem Code und anderen Caching-Technologien können die Lade- und Renderzeit reduziert werden. Problem : Allerdings besteht auf der Homepage weiterhin das Problem langer Lade- und Rendering-Wartezeiten. Wie können wir also die Zeit des ersten weißen Bildschirms aus visueller Sicht verkürzen? Skelettbildschirm : Beispiel: Schreiben Sie den Effekt, den Sie anzeigen möchten, tatsächlich unter den Container id=app in der Vorlagendatei. Nach new Vue (Option) wird der Inhalt unter der ID ersetzt (zu diesem Zeitpunkt wurde der von Vue kompilierte und generierte Inhalt möglicherweise noch nicht bereitgestellt. Denn bei Verwendung von new Vue wird eine Reihe von Initialisierungen durchgeführt, was ebenfalls einige Zeit in Anspruch nimmt). Dies kann die Zeit des weißen Bildschirms optisch verkürzen So implementieren Sie den Skeleton-Bildschirm1. Direkt unter der Vorlagendatei id=app container, schreiben Sie den Effekt-HTML, den Sie anzeigen möchten 2. Zeigen Sie das Bild direkt unter dem Vorlagendatei-ID = App-Container an 3. Verwenden Sie das von vue ssr bereitgestellte Webpack-Plugin 4. Statischen Skelett-Bildschirm automatisch generieren und einfügen Die Mängel von Methode 1 und Methode 2: Der Anzeigeeffekt ist für verschiedene Eingänge gleich, was es unmöglich macht, für verschiedene Eingänge flexibel unterschiedliche Stile anzuzeigen. Methode 3 kann bei verschiedenen Eingängen unterschiedliche Effekte anzeigen. (Im Wesentlichen wird zuerst eine JSON-Datei über SSR generiert und dann der Inhalt der JSON-Datei in den ID=App-Container der Vorlagendatei eingefügt.) Lösung 1: Schreiben Sie das HTML, das Sie anzeigen möchten, direkt unter den Vorlagendatei-ID=App-ContainerSchreiben Sie den Inhalt in die Vorlagendatei im Stammverzeichnis, wie im roten Kreis gezeigt. Öffnen Sie das Projekt in Ihrem Browser Der Anzeigeeffekt vor dem Aufruf von New Vue (nur ein einfacher Effekt, bitte keine Kritik, wenn er Ihnen nicht gefällt): Sie können den Inhalt unter dem Container mit der ID=App in den Elementen sehen. Dabei handelt es sich um den von uns eingefügten Skelett-Bildschirmeffekt-Inhalt. Nach dem Anpassen des neuen Vue wird der Inhalt unter dem Container id=app durch den von Vue kompilierten Inhalt ersetzt. Lösung 2: Anzeige des Bildes direkt unter der Vorlagendatei id=app-Container (dieses wird nicht angezeigt)Lösung 3: Verwenden Sie das von Vue SSR bereitgestellte Webpack-Plugin: Verwenden Sie die VUE-Datei, um den Skelettbildschirm zu vervollständigenBasierend auf Lösung 1 wird der Skelett-Bildschirmcode extrahiert. Anstatt Code in die Vorlagendatei zu schreiben, wird der Effektcode in die Vue-Datei geschrieben, die leicht zu verwalten ist. 1. Erstellen Sie einen Skeleton-Ordner im Stammverzeichnis und erstellen Sie die Dateien App.vue (Stammkomponente, ähnlich wie App.vue im Vue-Projekt), home.skeleton.vue (Code zum Anzeigen des Skeleton-Bildschirmeffekts auf der Startseite, ähnlich der im Vue-Projekt geschriebenen Routing-Seite), skeleton-entry.js (Einstiegsdatei ähnlich der Einstiegsdatei des Vue-Projekts), plugin/server-plugin.js (das Paket vue-server-renderer stellt das Server-Plugin-Plug-In bereit, kopieren Sie den Code daraus) home.skeleton.vue (Code zum Anzeigen des Skelett-Bildschirmeffekts auf der Homepage) <Vorlage> <div Klasse="Skelett-Home"> <div>Wird geladen...</div> </div> </Vorlage> <Stil> .skeleton-home { Breite: 100vw; Höhe: 100vh; Hintergrundfarbe: #eaeaea; } </Stil> App.vue (Stammkomponente) <Vorlage> <div id="app"> <!-- Stammkomponente--> <home style="display:none" id="homeSkeleton"></home> </div> </Vorlage> <Skript> Home aus „./home.skeleton.vue“ importieren Standard exportieren{ Komponenten: heim } } </Skript> <Stil> #app { Schriftfamilie: „Avenir“, Helvetica, Arial, serifenlos; -webkit-font-smoothing: Kantenglättung; -moz-osx-font-smoothing: Graustufen; Textausrichtung: zentriert; Farbe: #2c3e50; } *{ Polsterung: 0; Rand: 0; } </Stil> skeleton-entry.js (Eintragsdatei) //Eintragsdatei Vue von 'vue' importieren App aus „./App.vue“ importieren lass Skelett = neues Vue({ rendern(h) { return h(App) } }) Standardskelett exportieren plugin/server-plugin.js (vue-server-renderer-Paket stellt Server-Plugin-Plug-in bereit) „streng verwenden“; /* */ var isJS = function (Datei) { return /\.js(\?[^.]+)?$/.test(Datei); }; var ref = erfordern('Kreide'); var rot = ref.rot; var gelb = ref.gelb; var Präfix = "[vue-server-renderer-webpack-plugin]"; var warn = exports.warn = function (msg) { return console.error(red((Präfix + " " + msg + "\n"))); }; var tip = exports.tip = Funktion (msg) { return console.log(gelb((Präfix + " " + msg + "\n"))); }; var validieren = Funktion (Compiler) { wenn (Compiler.Optionen.Ziel !== 'Knoten') { warnen('webpack-Konfiguration ‚Ziel‘ sollte „Knoten“ sein.'); } wenn (Compiler.Optionen.Ausgabe && Compiler.Optionen.Ausgabe.Bibliotheksziel !== 'commonjs2') { warnen('webpack-Konfiguration ‚output.libraryTarget‘ sollte „commonjs2“ sein.'); } wenn (!compiler.options.externals) { Tipp( 'Es wird empfohlen, Abhängigkeiten im Server-Build auszulagern für ' + „Bessere Build-Leistung.“ ); } }; var VueSSRServerPlugin = Funktion VueSSRServerPlugin (Optionen) { wenn (Optionen === void 0) Optionen = {}; diese.Optionen = Objekt.Zuweisen({ Dateiname: „vue-ssr-server-bundle.json“ }, Optionen); }; VueSSRServerPlugin.prototype.apply = Funktion anwenden (Compiler) { var dies$1 = dies; validieren (Compiler); compiler.plugin('emit', Funktion (Kompilierung, cb) { var stats = Zusammenstellung.getStats().toJson(); var entryName = Objekt.keys(stats.entrypoints)[0]; var entryAssets = stats.entrypoints[entryName].assets.filter(isJS); wenn (entryAssets.length > 1) { neuen Fehler werfen ( "Serverseitiges Bundle sollte eine einzelne Eintragsdatei haben. " + „Vermeiden Sie die Verwendung von CommonsChunkPlugin in der Serverkonfiguration.“ ) } var entry = Eintragsassets[0]; wenn (!Eintrag || Typ des Eintrags !== 'Zeichenfolge') { neuen Fehler werfen ( ("Eintrag \"" + entryName + "\" nicht gefunden. Haben Sie die richtige Eingabeoption angegeben?") ) } var Bündel = { Eintrag: Eintrag, Dateien: {}, Karten: {} }; stats.assets.forEach(Funktion (Asset) { wenn (asset.name.match(/\.js$/)) { bundle.files[asset.name] = Zusammenstellung.assets[asset.name].source(); } sonst wenn (asset.name.match(/\.js\.map$/)) { bundle.maps[asset.name.replace(/\.map$/, '')] = JSON.parse(compilation.assets[asset.name].source()); } // nichts anderes für den Server ausgeben lösche compilation.assets[asset.name]; }); var json = JSON.stringify(bundle, null, 2); var Dateiname = this$1.Optionen.Dateiname; Zusammenstellung.assets[Dateiname] = { Quelle: Funktion () { return json; }, Größe: Funktion () { return json.Länge; } }; cb(); }); }; module.exports = VueSSRServerPlugin; 2. Erstellen Sie eine Skeleton-Bildschirm-Build-Konfigurationsdatei: build/webpack.skeleton.conf.js. Diese Datei arbeitet mit dem Vue-Server-Renderer-Plug-In zusammen, um den App.vue-Inhalt in einer einzigen Datei im JSON-Format zusammenzufassen. „streng verwenden“ const Pfad = require('Pfad') const nodeExternals = erfordern('webpack-node-externals'). const VueSSRServerPlugin = erfordern('../skeleton/plugin/server-plugin') modul.exporte = { // Dadurch kann Webpack dynamische Importe auf eine für Node geeignete Weise verarbeiten. // Und auch beim Kompilieren von Vue-Komponenten, // Weisen Sie „vue-loader“ an, serverorientierten Code zu liefern. Ziel: "Knoten", // Unterstützung für Quellzuordnungen für das Bundle-Renderer-Devtool bereitstellen: 'source-map', // Verweisen Sie auf den Eintrag in der Servereintragsdatei der Anwendung: path.resolve(__dirname, '../skeleton/skeleton-entry.js'), Ausgabe: { Pfad: path.resolve(__dirname, '../skeleton'), // Verzeichnis der generierten Dateien publicPath: '/skeleton/', Dateiname: '[name].js', libraryTarget: 'commonjs2' // Dies weist das Server-Bundle an, Node-Style-Exporte zu verwenden }, Modul: { Regeln: { Test: /\.vue$/, Lader: „vue-loader“, Optionen: Compileroptionen: { preserveWhitespace:false } } }, { Test: /\.css$/, verwenden: ['vue-style-loader', 'css-loader'] } ] }, Leistung: Hinweise: falsch }, // https://webpack.js.org/configuration/externals/#function // https://github.com/liady/webpack-node-externals // Anwendungsabhängigkeitsmodule externalisieren. Kann Server-Builds beschleunigen, // und erstelle eine kleinere Bundle-Datei. Externe: nodeExternals({ // Externalisieren Sie nicht die Abhängigkeiten, die Webpack verarbeiten muss. // Sie können hier weitere Dateitypen hinzufügen. Beispielsweise werden *.vue-Raw-Dateien nicht verarbeitet, // Sie sollten auch abhängige Module, die „global“ ändern (wie etwa Polyfills), auf die Whitelist setzen. Allowlist: /\.css$/ }), // Dies ist ein Plugin, das die gesamte Ausgabe des Servers // in einer einzigen JSON-Datei zusammenfasst. // Wenn der Dateiname nicht konfiguriert ist, lautet der Standarddateiname „vue-ssr-server-bundle.json“. Plugins: [ neues VueSSRServerPlugin({ Dateiname: „skeleton.json“ }) ] } 3. Verwenden Sie webpack-cli, um die Datei webpack.skeleton.conf.js auszuführen, um die Datei skeleton.json zu generieren und sie im Skeleton-Ordner abzulegen Schreiben und führen Sie den Befehl in der Datei package.json aus: create-skeleton "Skripte": { "Skelett erstellen": "webpack --progress --config build/webpack.skeleton.conf.js", "fill-skeleton": "Knoten ./skeleton/skeleton.js" } Führen Sie den Befehl auf der Konsole aus: npm führt „create-skeleton“ aus Im Skeleton-Ordner befindet sich eine zusätzliche Datei „skeleton.json“. 4. Fügen Sie den generierten Skeleton.json-Inhalt in die index.html (Vorlagendatei) im Stammverzeichnis ein. 1) Erstellen Sie eine neue Datei skeleton.js im Ordner skeleton //Füge den generierten Skeleton.json-Inhalt in die Vorlagendatei ein const fs = require('fs') const { lösen } = erfordern ('Pfad') const createBundleRenderer = require('vue-server-renderer').createBundleRenderer // Skelett.json lesen und Inhalt schreiben, wobei skeleton/index.html als Vorlage verwendet wird const renderer = createBundleRenderer(resolve(__dirname, '../skeleton/skeleton.json'), { Vorlage: fs.readFileSync(auflösen(__dirname, '../skeleton/index.html'), 'utf-8') }) // Schreibe den Inhalt der vorherigen Vorlage in die Vorlagendatei 'index.html' im Stammverzeichnis renderer.renderToString({}, (err, html) => { wenn (Fehler) { returniere console.log(err) } console.log('Rendern abgeschlossen!') fs.writeFileSync('index.html', html, 'utf-8') }) 2) Fügen Sie den Ausführungsbefehl hinzu: fill-skeleton "fill-skeleton": "Knoten ./skeleton/skeleton.js" 3) Führen Sie diesen Befehl auf der Konsole aus, und der Inhalt der Datei skeleton.json wird in die Vorlagendatei index.html im Stammverzeichnis eingefügt. Referenzartikel:Verwenden von Vue SSR zur Skeleton-Screen-Injektion: https://www.cnblogs.com/goloving/p/11397371.html Implementierung eines Skeleton-Bildschirms in Vue: http://www.360doc.com/content/20/0709/11/21412_923150401.shtml Fallstricke beim Vue SSR-Rendering: https://blog.csdn.net/chen801090/article/details/105974987/ Dies ist das Ende dieses Artikels über die Verwendung des Skeleton-Bildschirms in einem Vue-Projekt. Weitere relevante Inhalte zum Vue-Skeleton-Bildschirm 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:
|
<<: Beispiel für die Bereitstellung einer Laravel-Anwendung mit Docker
>>: Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.7.20 (Win10)
Direkt codieren: Wählen Sie „bigint unsigned“ als...
TeamCenter12 gibt das Kontokennwort ein und klick...
Projektszenario: 1. Einschränkungen beim Hochlade...
Der datetime-Typ wird normalerweise zum Speichern...
Nachdem ich viele Schwierigkeiten überwunden hatte...
Weitere spannende Inhalte finden Sie unter https:...
Inhaltsverzeichnis 1. Browserunterstützung 2. Exp...
Verwenden Sie Nginx, um einen Tomcat9-Cluster zu ...
Diese beiden Attribute werden häufig verwendet, i...
In diesem Artikelbeispiel wird der spezifische Ja...
Was ist ein Generator? Ein Generator ist ein Code...
Inhaltsverzeichnis VARCHAR- und CHAR-Typen Abschl...
Rasterlayout Dem übergeordneten Element hinzugefü...
Manchmal möchten wir, dass die Textfelder im Formu...
Ein einfacher cooler Effekt, der mit CSS3-Animati...