Heim Web-Frontend Front-End-Fragen und Antworten Unterstützt vue3.0 serverseitiges Rendering?

Unterstützt vue3.0 serverseitiges Rendering?

Dec 15, 2022 pm 02:47 PM
vue vue3 服务端渲染

vue3.0 unterstützt serverseitiges Rendering. Vue unterstützt das direkte Rendern von Komponenten in HTML-Strings auf der Serverseite, die Rückgabe an den Browser als serverseitige Antwort und schließlich die „Aktivierung“ (Hydratierung) des statischen HTML auf der Browserseite in einer interaktiven Clientanwendung. Eine vom Server gerenderte Vue-Anwendung kann als „isomorph“ oder „universal“ betrachtet werden, da der Großteil des Anwendungscodes sowohl auf dem Server als auch auf dem Client ausgeführt wird. Vorteile von Vue mit serverseitigem Rendering: Schnelleres Laden des ersten Bildschirms, einheitliches mentales Modell, besser SEO.

Unterstützt vue3.0 serverseitiges Rendering?

Die Betriebsumgebung dieses Tutorials: Windows7-System, DELL G3-Computer

Vue unterstützt standardmäßig serverseitiges Rendering (SSR). Die Aufgabe der Vue-Komponenten besteht darin, DOM im Browser zu generieren und zu bearbeiten. Vue unterstützt jedoch auch das direkte Rendern von Komponenten in HTML-Strings

Eine vom Server gerenderte Vue.js-Anwendung kann auch als „isomorph“ (Isomorph) oder „Universal“ (Universal) betrachtet werden, da der Großteil des Anwendungscodes auf beiden Servern ausgeführt wird und dem Client.

Warum serverseitiges Rendering (SSR) verwenden?

Einseitiges Rendering mit dem Client Im Vergleich zu SPA sind die Hauptvorteile von SSR:

    schnelleres Laden des ersten Bildschirms
  • : Dies ist besonders wichtig bei langsamen Netzwerkgeschwindigkeiten oder langsam laufenden Geräten. Der auf dem Server gerenderte HTML-Code muss nicht warten, bis das gesamte JavaScript heruntergeladen und ausgeführt wird, sodass Ihre Benutzer die vollständig gerenderte Seite schneller sehen , und der Datenabrufprozess wird auf der Serverseite beim ersten Besuch abgeschlossen, verglichen mit der vom Client. Get, möglicherweise eine schnellere Datenbankverbindung, was normalerweise zu höheren Kern-Webmetrikwerten, einer besseren Benutzererfahrung und für diese Anwendungen führt wobei „die Ladegeschwindigkeit des ersten Bildschirms in direktem Zusammenhang mit der Conversion-Rate steht“, kann dies von entscheidender Bedeutung sein Verwenden Sie dieselbe Sprache und dasselbe deklarative, komponentenorientierte mentale Modell, um die gesamte Anwendung zu entwickeln, ohne zwischen dem Backend-Vorlagensystem und dem Frontend-Framework hin und her zu wechseln.

    Bessere SEO: Suchmaschinen-Crawler können alles sehen gerenderte Seite direkt

  • Bei der Verwendung von SSR sind auch einige Kompromisse zu berücksichtigen:

    Einschränkungen in der Entwicklung können nur in bestimmten Lebenszyklus-Hooks verwendet werden Zur Verwendung in serverseitig gerenderten Anwendungen.
  • Mehr Anforderungen im Zusammenhang mit der Build-Konfiguration und Bereitstellung erfordern eine Umgebung, die die Ausführung des Node.js-Servers ermöglicht auf jedem statischen Dateiserver bereitgestellt werden.

Höhere Serverlast Das Rendern einer vollständigen Anwendung in Node.js ist CPU-intensiver als nur das Hosten statischer Dateien. Wenn Sie also mit hohem Datenverkehr rechnen, sollten Sie sich auf die entsprechende Serverlast einstellen eine solide Caching-Strategie.

  • Server Side Rendering (SSR) vs. Static Site Generation (SSG)
  • Static-Site Generation
  • (Static-Site Generation, abgekürzt als SSG), auch bekannt als

    Pre-Rendering

    , ist eine weitere beliebte Technik zum Erstellen schneller Websites. Wenn die zum serverseitigen Rendern einer Seite erforderlichen Daten für jeden Benutzer gleich sind, können wir sie nur einmal rendern und dies vorab während des Erstellungsprozesses tun, anstatt die Seite jedes Mal neu zu rendern, wenn eine Anfrage eingeht. Vorgerenderte Seiten werden generiert und als statische HTML-Dateien auf dem Server gehostet.
SSG behält die gleiche Leistung wie SSR-Anwendungen: Es bietet eine hervorragende Leistung beim Laden des ersten Bildschirms. Gleichzeitig ist es kostengünstiger und einfacher bereitzustellen als SSR-Anwendungen, da es statisches HTML und Ressourcendateien ausgibt. Das Schlüsselwort hier ist statisch: SSG kann nur für Seiten verwendet werden, die statische Daten verbrauchen, d. h. die Daten sind während der Erstellungszeit bekannt und ändern sich über mehrere Bereitstellungen hinweg nicht. Wenn sich die Daten ändern, müssen sie erneut bereitgestellt werden.

Wenn Sie SSR nur zur Optimierung der SEO einiger Marketingseiten (z. B. /, /about und /contact usw.) untersuchen, benötigen Sie möglicherweise SSG anstelle von SSR. SSG eignet sich auch hervorragend zum Erstellen inhaltsbasierter Websites wie Dokumentationsseiten oder Blogs. Tatsächlich wurde die Website, die Sie gerade lesen, statisch mit VitePress generiert, einem statischen Site-Generator von Vue.

Hallo Welt

Machen Sie sich bereit, serverseitiges Rendering in Aktion zu erleben. Serverseitiges Rendering (d. h. SSR) klingt kompliziert, aber ein einfaches Node-Skript kann diese Funktion in nur 3 Schritten erreichen:

// 步骤 1:创建一个Vue实例
var Vue = require('vue')
var app = new Vue({
  render: function (h) {
    return h('p', 'hello world')
  }
})

// 步骤 2: 创建一个渲染器
var renderer = require('vue-server-renderer').createRenderer()

// 步骤 3: 将 Vue实例 渲染成 HTML

renderer.renderToString(app, function (error, html) {
  if (error) throw error
  console.log(html)
  // => <p server-rendered="true">hello world</p>
})
Nach dem Login kopieren

Es ​​ist nicht schwierig. Natürlich ist dieses Beispiel einfacher als die meisten Anwendungen, um zu untersuchen, wie diese Funktionen funktionieren

Einfaches serverseitiges Rendering über den Express-Webserver

Ohne einen Webserver ist es schwierig, serverseitiges Rendering zu sagen, also lassen Sie uns sagen Mach es, fülle es auf. Wir werden eine sehr einfache serverseitige Rendering-Anwendung erstellen, die nur ES5 und keine anderen Build-Schritte oder Vue-Plugins verwendet.

Starten Sie eine App, die Benutzern mitteilt, wie viel Zeit sie auf einer Seite verbracht haben.

new Vue({
  template: &#39;<div>你已经在这花了 {{ counter }} 秒。</div>&#39;,
  data: {
    counter: 0
  },
  created: function () {
    var vm = this
    setInterval(function () {
      vm.counter += 1
    }, 1000)
  }
})
Nach dem Login kopieren

Um uns an das serverseitige Rendering anzupassen, müssen wir einige Änderungen vornehmen, damit es im Browser und Knoten gerendert werden kann:

  • Fügen Sie im Browser unsere Anwendungsinstanz zum globalen Kontext (Fenster) hinzu. , wir Es kann installiert werden.

  • In Node können wir durch den Export einer Factory-Funktion Anwendungsinstanzen für jede Anfrage erstellen.

Um dies umzusetzen, wird eine kleine Vorlage benötigt:

// assets/app.js
(function () { &#39;use strict&#39;
  var createApp = function () {
    // ---------------------
    // 开始常用的应用代码
    // ---------------------

    // 主要的Vue实例必须返回,并且有一个根节点在id "app"上,这样客户端可以加载它。

    return new Vue({
      template: &#39;<div id="app">你已经在这花了 {{ counter }} 秒。</div>&#39;,
      data: {
        counter: 0
      },
      created: function () {
        var vm = this
        setInterval(function () {
          vm.counter += 1
        }, 1000)
      }
    })

    // -------------------
    // 结束常用的应用代码
    // -------------------
  }
  if (typeof module !== &#39;undefined&#39; && module.exports) {
    module.exports = createApp
  } else {
    this.app = createApp()
  }
}).call(this)
Nach dem Login kopieren

Da wir nun den Anwendungscode haben, fügen wir eine HTML-Datei hinzu.

<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
  <title>My Vue App</title>
  <script src="/assets/vue.js"></script>
</head>
<body>
  <div id="app"></div>
  <script src="/assets/app.js"></script>
  <script>app.$mount(&#39;#app&#39;)</script>
</body>
</html>
Nach dem Login kopieren

Beziehen Sie sich hauptsächlich auf die Dateien app.js und vue.js, die wir zuvor im Assets-Ordner erstellt haben. Wir haben eine Single-Page-Anwendung, die ausgeführt werden kann

Um dann serverseitiges Rendering zu implementieren, müssen wir eine hinzufügen Schritt auf der Serverseite.

// server.js
&#39;use strict&#39;

var fs = require(&#39;fs&#39;)
var path = require(&#39;path&#39;)

// 定义全局的Vue为了服务端的app.js
global.Vue = require(&#39;vue&#39;)

// 获取HTML布局
var layout = fs.readFileSync(&#39;./index.html&#39;, &#39;utf8&#39;)

// 创建一个渲染器
var renderer = require(&#39;vue-server-renderer&#39;).createRenderer()

// 创建一个Express服务器
var express = require(&#39;express&#39;)
var server = express()

// 部署静态文件夹为 "assets"文件夹
server.use(&#39;/assets&#39;, express.static(
  path.resolve(__dirname, &#39;assets&#39;)
))

// 处理所有的Get请求
server.get(&#39;*&#39;, function (request, response) {
  // 渲染我们的Vue应用为一个字符串
  renderer.renderToString(
    // 创建一个应用实例
    require(&#39;./assets/app&#39;)(),
    // 处理渲染结果
    function (error, html) {
      // 如果渲染时发生了错误
      if (error) {
        // 打印错误到控制台
        console.error(error)
        // 告诉客户端错误
        return response
          .status(500)
          .send(&#39;Server Error&#39;)
      }
      // 发送布局和HTML文件
      response.send(layout.replace(&#39;<div id="app"></div>&#39;, html))
    }
  )
})

// 监听5000端口
server.listen(5000, function (error) {
  if (error) throw error
  console.log(&#39;Server is running at localhost:5000&#39;)
})
Nach dem Login kopieren

Das ist es. Das gesamte Beispiel, klonen Sie es für ein ausführliches Experiment. Sobald es lokal ausgeführt wird, können Sie bestätigen, dass der vom Renderer ausgewählte Dienst tatsächlich ausgeführt wird, indem Sie mit der rechten Maustaste auf die Seite klicken und Seitenressourcen (oder ähnliches) auswählen. Im Text zu sehen:

<div id="app" server-rendered="true">You have been here for 0 seconds&period;</div>
Nach dem Login kopieren

statt:

<div id="app"></div>
Nach dem Login kopieren

Streaming-Antwort

Vue unterstützt auch Streaming-Rendering, wobei Webserver bevorzugt werden, die Streaming unterstützen. Ermöglicht das allgemeine Generieren und Schreiben von HTML in den entsprechenden Stream, anstatt alles auf einmal zu schreiben. Das Ergebnis ist, dass Anfragen schneller und ohne Nachteile bearbeitet werden!

Um den Anwendungscode im vorherigen Abschnitt für das Streaming-Rendering geeignet zu machen, können Sie server.get('*',...) einfach durch den folgenden Code ersetzen:

// 拆分布局成两段HTML
var layoutSections = layout.split('<div id="app"></div>')
var preAppHTML = layoutSections[0]
var postAppHTML = layoutSections[1]

// 处理所有的Get请求
server.get('*', function (request, response) {
  // 渲染我们的Vue实例作为流
  var stream = renderer.renderToStream(require('./assets/app')())

  // 将预先的HTML写入响应
  response.write(preAppHTML)

  // 每当新的块被渲染
  stream.on('data', function (chunk) {
    // 将块写入响应
    response.write(chunk)
  })

  // 当所有的块被渲染完成
  stream.on('end', function () {
    // 将post-app HTML写入响应
    response.end(postAppHTML)
  })

  // 当渲染时发生错误
  stream.on('error', function (error) {
    // 打印错误到控制台
    console.error(error)
    // 告诉客服端发生了错误
    return response
      .status(500)
      .send('Server Error')
  })
})
Nach dem Login kopieren

Das ist nicht komplizierter als das vorherige Version, und es könnte sogar für Sie funktionieren. Es ist nicht einmal ein neues Konzept. Wir haben Folgendes getan:

  • Den Ablauf aufbauen

  • HTML schreiben, bevor die Antwort angewendet wird

  • Den anzuwendenden HTML-Code auf die Antwort schreiben, sofern verfügbar

  • HTML am Ende der Antwort schreiben

  • Verarbeitung Eventuelle Fehler

Komponenten-Caching

Vues serverseitiges Rendering ist standardmäßig sehr schnell, aber Sie können die Leistung weiter verbessern, indem Sie gerenderte Komponenten zwischenspeichern. Dies gilt als erweiterte Funktion. Wenn jedoch die falsche Komponente zwischengespeichert wird (oder die richtige Komponente den falschen Inhalt hat), führt dies dazu, dass die App falsch gerendert wird. Besonderer Hinweis:

Komponenten, die Unterkomponenten enthalten, die vom globalen Status abhängen (z. B. Status von Vuex), sollten nicht zwischengespeichert werden. Wenn Sie dies tun, wird auch die Unterkomponente (eigentlich der gesamte Unterbaum) zwischengespeichert. Achten Sie daher besonders auf Situationen mit Slot-Fragmenten oder Unterkomponenten.

Einstellungen

Außerhalb von Warnsituationen können wir Komponenten mit der folgenden Methode zwischenspeichern.

Zunächst müssen Sie dem Renderer ein Cache-Objekt bereitstellen. Hier ist ein einfaches Beispiel mit lru-cache

var createRenderer = require(&#39;vue-server-renderer&#39;).createRenderer
var lru = require(&#39;lru-cache&#39;)

var renderer = createRenderer({
  cache: lru(1000)
})
Nach dem Login kopieren

, das bis zu 1000 unabhängige Renderings zwischenspeichert. Weitere Informationen zur Konfiguration des Zwischenspeicherns in Inhalten finden Sie unter lru-cache-Einstellungen

Anschließend können Sie für die Komponenten, die Sie zwischenspeichern möchten, Folgendes angeben:

  • einen eindeutigen Namen

  • eine serverCacheKey-Funktion, die A eindeutig zurückgibt Komponentenumfang

Beispiel:

Vue.component({
  name: &#39;list-item&#39;,
  template: &#39;<li>{{ item.name }}</li>&#39;,
  props: [&#39;item&#39;],
  serverCacheKey: function (props) {
    return props.item.type + &#39;::&#39; + props.item.id
  }
})
Nach dem Login kopieren

Ideale Komponente zum Caching

Jede reine Komponente kann sicher zwischengespeichert werden – dies soll sicherstellen, dass die Weitergabe derselben Daten an jede Komponente denselben HTML-Code erzeugt. Beispiele für diese Szenarien sind:

  • Statische Komponenten (versuchen Sie z. B. immer dasselbe HTML, damit die serverCacheKey-Funktion als „true“ zurückgegeben werden kann)

  • Listenkomponenten (bei großen Listen kann deren Zwischenspeicherung die Leistung verbessern)

  • Gemeinsame UI-Komponenten (wie Schaltflächen, Warnungen usw. – zumindest erhalten sie Daten über Requisiten statt über Slots oder Unterkomponenten)

Erklärung:

Jetzt sollten Sie die Grundkonzepte hinter der Serverseite verstehen Rendern. Der Build-Prozess, das Routing und Vuex haben jedoch jeweils ihre eigenen Überlegungen.

(Teilen von Lernvideos: Vuejs-Einführungs-Tutorial, Grundlegendes Programmiervideo)

Das obige ist der detaillierte Inhalt vonUnterstützt vue3.0 serverseitiges Rendering?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

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 verwenden Sie Bootstrap in Vue So verwenden Sie Bootstrap in Vue Apr 07, 2025 pm 11:33 PM

Die Verwendung von Bootstrap in Vue.js ist in fünf Schritte unterteilt: Startstrap installieren. Bootstrap in main.js. Verwenden Sie die Bootstrap -Komponente direkt in der Vorlage. Optional: benutzerdefinierter Stil. Optional: Verwenden Sie Plug-Ins.

So fügen Sie Funktionen zu Schaltflächen für Vue hinzu So fügen Sie Funktionen zu Schaltflächen für Vue hinzu Apr 08, 2025 am 08:51 AM

Sie können der VUE -Taste eine Funktion hinzufügen, indem Sie die Taste in der HTML -Vorlage an eine Methode binden. Definieren Sie die Methode und schreiben Sie die Funktionslogik in der VUE -Instanz.

So verwenden Sie Watch in Vue So verwenden Sie Watch in Vue Apr 07, 2025 pm 11:36 PM

Mit der Watch -Option in Vue.js können Entwickler auf Änderungen in bestimmten Daten anhören. Wenn sich die Daten ändert, löst sich eine Rückruffunktion aus, um Aktualisierungsansichten oder andere Aufgaben auszuführen. Zu den Konfigurationsoptionen gehören unmittelbar, die festlegen, ob ein Rückruf sofort ausgeführt werden soll, und Deep, das feststellt, ob Änderungen an Objekten oder Arrays rekursiv anhören sollen.

So verweisen Sie auf die JS -Datei mit Vue.js So verweisen Sie auf die JS -Datei mit Vue.js Apr 07, 2025 pm 11:27 PM

Es gibt drei Möglichkeiten, sich auf JS -Dateien in Vue.js zu beziehen: Geben Sie den Pfad direkt mit dem & lt; Skript & gt an. Etikett;; Dynamischer Import mit dem montierten () Lebenszyklushaken; und importieren über die Vuex State Management Library.

Was bedeutet VUE Multi-Page-Entwicklung? Was bedeutet VUE Multi-Page-Entwicklung? Apr 07, 2025 pm 11:57 PM

VUE Multi-Page-Entwicklung ist eine Möglichkeit, Anwendungen mithilfe des Vue.js-Frameworks zu erstellen, in dem die Anwendung in separate Seiten unterteilt ist: Code-Wartung: Die Aufteilung der Anwendung in mehrere Seiten kann das Verwalten und Wartungsbereich erleichtern. Modularität: Jede Seite kann als separates Modul für eine einfache Wiederverwendung und den Austausch verwendet werden. Einfaches Routing: Die Navigation zwischen Seiten kann durch einfache Routing -Konfiguration verwaltet werden. SEO -Optimierung: Jede Seite hat eine eigene URL, die SEO hilft.

So kehren Sie von Vue zur vorherigen Seite zurück So kehren Sie von Vue zur vorherigen Seite zurück Apr 07, 2025 pm 11:30 PM

VUE.JS hat vier Methoden, um zur vorherigen Seite zurückzukehren: $ router.go (-1) $ router.back () verwendet & lt; Router-Link to = & quot;/& quot; Komponentenfenster.history.back () und die Methodenauswahl hängt von der Szene ab.

So verwenden Sie Vue Traversal So verwenden Sie Vue Traversal Apr 07, 2025 pm 11:48 PM

Es gibt drei gängige Methoden für Vue.js, um Arrays und Objekte zu durchqueren: Die V-für-Anweisung wird verwendet, um jedes Element zu durchqueren und Vorlagen zu rendern; Die V-Bind-Anweisung kann mit V-für dynamisch Attributwerte für jedes Element verwendet werden. und die .MAP -Methode kann Array -Elemente in Neuarrays umwandeln.

Wie man zum Div von Vue springt Wie man zum Div von Vue springt Apr 08, 2025 am 09:18 AM

Es gibt zwei Möglichkeiten, Divelemente in Vue zu springen: Verwenden Sie Vue Router und fügen Sie Router-Link-Komponente hinzu. Fügen Sie den @click Event -Listener hinzu und nennen Sie dies. $ Router.push () Methode zum Springen.

See all articles