What is a Vue spa?

Vue SPAs: Nahtlose Web-Erlebnisse gestalten

31/01/2025

Rating: 4.66 (8612 votes)

In der heutigen digitalen Landschaft erwarten Benutzer schnelle, flüssige und reaktionsschnelle Interaktionen mit Websites und Anwendungen. Traditionelle Webanwendungen, die bei jeder Navigation eine vollständige Seitenneuladung erfordern, können diese Erwartungen oft nicht erfüllen. Hier kommen Single-Page Applications (SPAs) ins Spiel – eine revolutionäre Architektur, die das Surferlebnis grundlegend verändert. Insbesondere im Kontext von modernen JavaScript-Frameworks wie Vue.js haben SPAs ihren Siegeszug angetreten und bieten eine Performance und Benutzerfreundlichkeit, die an native Desktop-Anwendungen erinnert. Dieser Artikel beleuchtet, was eine SPA ist, wie Vue.js und sein offizieller Router Ihnen helfen, solche Anwendungen zu erstellen, und welche Vor- und Nachteile sie mit sich bringen.

What is a Vue spa?
In such SPAs, the "routing" is done on the client side, in the browser. A client-side router is responsible for managing the application's rendered view using browser APIs such as History API or the hashchange event. Vue is well-suited for building SPAs. For most SPAs, it's recommended to use the officially-supported Vue Router library.
Inhaltsverzeichnis

Was ist eine Single-Page-Anwendung (SPA)?

Eine Single-Page-Anwendung, oft als SPA abgekürzt, ist eine Webanwendung, die innerhalb eines einzigen HTML-Dokuments ausgeführt wird. Im Gegensatz zu herkömmlichen Websites, bei denen bei jeder Navigation eine neue HTML-Seite vom Server geladen wird, lädt eine SPA alle notwendigen HTML-, CSS- und JavaScript-Ressourcen bei der ersten Anfrage. Nach dem initialen Laden des Dokuments werden alle weiteren Interaktionen und Navigationen innerhalb der Anwendung dynamisch vom Client-seitigen JavaScript verwaltet. Das bedeutet, dass beim Klicken auf einen Link oder beim Navigieren zu einem anderen Bereich der Anwendung nicht die gesamte Seite neu geladen wird. Stattdessen werden nur die benötigten Daten abgerufen und der aktuelle Seiteninhalt im Browser aktualisiert. Dies führt zu einem deutlich flüssigeren und reaktionsschnelleren Benutzererlebnis, das sich anfühlt wie eine native Anwendung.

Das Kernprinzip einer SPA ist das Client-seitige Routing. Während bei traditionellen Anwendungen das Routing (also die Entscheidung, welche Inhalte basierend auf der URL angezeigt werden sollen) auf dem Server stattfindet, übernimmt bei einer SPA der Browser diese Aufgabe. JavaScript-Code im Browser fängt Navigationsereignisse ab, aktualisiert die URL mithilfe von Browser-APIs wie der History API oder dem hashchange-Ereignis und rendert die entsprechenden Komponenten oder Daten, ohne eine vollständige Seitenneuladung auszulösen. Dies ermöglicht eine nahtlose Übergangserfahrung, da der Benutzer den Eindruck hat, sich innerhalb derselben Seite zu bewegen, auch wenn sich der dargestellte Inhalt komplett ändert.

Server-seitiges vs. Client-seitiges Routing

Um die Vorteile von SPAs vollständig zu verstehen, ist es entscheidend, den Unterschied zwischen Server-seitigem und Client-seitigem Routing zu begreifen. Diese beiden Ansätze definieren, wie eine Webanwendung auf Benutzerinteraktionen und Navigationsanfragen reagiert.

Server-seitiges Routing

Beim Server-seitigen Routing, dem traditionellen Ansatz, sendet der Browser bei jeder Navigation (z.B. beim Klicken auf einen Link) eine neue Anfrage an den Server. Der Server verarbeitet diese Anfrage, generiert eine neue HTML-Antwort, die oft spezifisch für die angefragte URL ist, und sendet diese zurück an den Browser. Der Browser empfängt dann die neue HTML-Datei und lädt die gesamte Seite neu. Dieser Prozess ist vergleichbar mit dem Umblättern einer Seite in einem Buch: Jede neue Seite muss komplett neu geladen werden. Dies kann zu sichtbaren Ladezeiten und einem weniger flüssigen Erlebnis führen, insbesondere bei langsamen Netzwerkverbindungen.

Client-seitiges Routing

Im Gegensatz dazu, beim Client-seitigen Routing einer SPA, wird die erste Anfrage an den Server gesendet, um die gesamte Anwendung zu laden. Danach übernimmt das JavaScript im Browser die Kontrolle über die Navigation. Wenn ein Benutzer auf einen internen Link klickt, fängt das JavaScript dieses Ereignis ab. Es verhindert die standardmäßige Browser-Navigation, die eine vollständige Neuladung auslösen würde. Stattdessen wird die URL im Browser aktualisiert (ohne einen Server-Roundtrip), und das JavaScript lädt dynamisch die benötigten Daten oder Komponenten, um den relevanten Teil der Seite zu aktualisieren. Dieser Ansatz eliminiert die Notwendigkeit, die gesamte Seite neu zu laden, was zu einer deutlich schnelleren und reaktionsfreudigeren Benutzererfahrung führt.

How does Vue work?
All the necessary HTML, CSS and JavaScript codes are retrieved with a single page load. All the required resources are dynamically retrieved and added to the page. In Vue, when navigation happens, Vue uses Vue-router to check for the differences in the DOM and renders them on the page.

Die folgende Tabelle vergleicht die wesentlichen Unterschiede zwischen diesen beiden Routing-Ansätzen:

MerkmalServer-seitiges Routing (Traditionell)Client-seitiges Routing (SPA)
SeitenneuladungVollständige Neuladung bei jeder NavigationKeine vollständige Neuladung, nur Teilaktualisierungen
BenutzererlebnisPotenziell langsamer, sichtbare LadezeitenSchneller, flüssiger, reaktionsfreudiger
ServerlastHöher (Server generiert HTML für jede Anfrage)Geringer (Server liefert nur Daten/API-Endpunkte)
EntwicklungEngere Kopplung von Frontend und BackendKlare Trennung von Frontend (Client) und Backend (API)
SEO (Historisch)Einfacher zu indexieren (fertiges HTML)Herausfordernd (JavaScript-Rendering erforderlich)
Initiales LadenSchneller für erste Seite (kleineres HTML)Potenziell langsamer (größeres JavaScript-Bundle)
Offline-FähigkeitBegrenzt (benötigt Server für jede Seite)Besser (kann Inhalte cachen und offline arbeiten)

Vor- und Nachteile von SPAs

Wie jede Technologie haben auch Single-Page Applications ihre spezifischen Vor- und Nachteile. Eine fundierte Entscheidung für oder gegen eine SPA hängt stark von den Anforderungen des jeweiligen Projekts ab.

Vorteile von SPAs

  • Hervorragende Benutzererfahrung (UX): Dies ist der vielleicht größte Vorteil. Da keine vollständigen Seitenneuladungen erfolgen, fühlt sich die Navigation blitzschnell und nahtlos an. Dies verbessert die Interaktion und Bindung des Benutzers erheblich. Die Anwendung reagiert sofort auf Eingaben, was ein Gefühl von Flüssigkeit vermittelt.
  • Weniger Serverlast: Nach dem initialen Laden der Anwendung muss der Server nur noch Daten (oft im JSON-Format über APIs) statt ganzer HTML-Seiten liefern. Dies reduziert die Serverlast und den Netzwerkverkehr erheblich, was zu Kosteneinsparungen und einer besseren Skalierbarkeit führen kann.
  • Bessere Trennung der Belange: SPAs erzwingen eine klare Trennung zwischen Frontend (Benutzeroberfläche und Client-Logik) und Backend (Datenbank und API-Logik). Dies ermöglicht es Entwicklerteams, unabhängig voneinander zu arbeiten und fördert eine modulare Architektur.
  • Schnellere Entwicklung: Mit modernen Frameworks wie Vue.js und den dazugehörigen Tools können Entwickler Komponenten wiederverwenden und die Entwicklung von Benutzeroberflächen beschleunigen. Die klare API-Schnittstelle zwischen Frontend und Backend vereinfacht die Zusammenarbeit.
  • Caching-Möglichkeiten: SPAs können viele ihrer Ressourcen (HTML, CSS, JavaScript) lokal im Browser cachen. Dies bedeutet, dass bei wiederholten Besuchen die Anwendung noch schneller geladen wird und sogar offline funktionieren kann, wenn entsprechende Service Worker implementiert sind.

Nachteile von SPAs

  • SEO-Herausforderungen: Historisch gesehen war die Suchmaschinenoptimierung (SEO) ein großer Nachteil von SPAs. Da die Inhalte dynamisch von JavaScript gerendert werden, hatten Suchmaschinen-Crawler Schwierigkeiten, diese Inhalte zu finden und zu indexieren. Obwohl moderne Crawler besser mit JavaScript umgehen können, ist es für kritische SEO-Anwendungen oft ratsam, serverseitiges Rendering (SSR) oder Prerendering in Betracht zu ziehen, um sicherzustellen, dass die Inhalte für Suchmaschinen leicht zugänglich sind. Das Initialisieren der App kann für Crawler eine Hürde darstellen.
  • Abhängigkeit von JavaScript: Eine SPA funktioniert nur, wenn JavaScript im Browser aktiviert ist. Benutzer, die JavaScript deaktiviert haben (was selten ist, aber vorkommen kann), können die Anwendung nicht nutzen. Dies ist eine kritische Einschränkung, die bei der Zielgruppenanalyse berücksichtigt werden muss.
  • Potenziell längere initiale Ladezeit: Da die gesamte Anwendung (oder ein Großteil davon) beim ersten Laden heruntergeladen werden muss, kann die initiale Ladezeit einer SPA länger sein als die einer traditionellen Website, die nur das Minimum für die erste Seite lädt. Dies kann durch Techniken wie Code-Splitting und Lazy Loading gemildert werden.
  • Erhöhter Client-seitiger Ressourcenverbrauch: SPAs verlagern einen Großteil der Verarbeitungslogik in den Browser. Dies kann den Arbeitsspeicher und die CPU des Client-Geräts stärker beanspruchen, insbesondere bei komplexen Anwendungen oder älteren Geräten.
  • Sicherheitsbedenken: Da SPAs viel Logik auf dem Client ausführen, müssen Entwickler besonders auf Sicherheit achten, insbesondere in Bezug auf Cross-Site Scripting (XSS) und die Speicherung sensibler Daten im Browser.

Vue.js und SPAs: Die Rolle von Vue Router

Vue.js ist ein progressives JavaScript-Framework, das sich hervorragend für den Bau von Single-Page Applications eignet. Seine reaktive Natur und das komponentenbasiertes Modell machen es zum idealen Kandidaten für dynamische Benutzeroberflächen. Für das Routing in Vue.js-basierten SPAs gibt es eine offizielle und empfohlene Lösung: die Vue Router-Bibliothek.

Vue Router ist die Brücke, die die URL im Browser mit den in Vue gerenderten Komponenten verbindet. Er ermöglicht es Ihnen, zu definieren, welche Vue-Komponente für einen bestimmten URL-Pfad angezeigt werden soll. Wenn sich die URL ändert, stellt Vue Router sicher, dass die entsprechende Komponente im dafür vorgesehenen Bereich der Anwendung angezeigt wird, ohne die gesamte Seite neu zu laden.

Kernkomponenten: RouterLink und RouterView

Vue Router stellt zwei Schlüsselkomponenten bereit, die für die Navigation und das Rendering in einer SPA unerlässlich sind:

  • <RouterLink>: Dies ist die primäre Komponente für die Erstellung von Navigationslinks in Ihrer Vue SPA. Anstatt herkömmliche <a>-Tags zu verwenden, nutzen Sie <RouterLink>. Der große Vorteil ist, dass Vue Router das Klicken auf diese Links abfängt und die URL im Browser ändert, ohne eine vollständige Seitenneuladung auszulösen. Er kümmert sich auch um die korrekte URL-Generierung, das Encoding und das Setzen von aktiven Klassen, um den aktuell ausgewählten Link hervorzuheben. Dies ist ein entscheidender Baustein für das nahtlose SPA-Erlebnis.
  • <RouterView>: Diese Komponente dient als Platzhalter und Ankerpunkt in Ihrem Template. Sie weist Vue Router an, wo die Komponente gerendert werden soll, die dem aktuell aktiven URL-Pfad entspricht. Egal, welche Route aktiv ist, die entsprechende Ansichts-Komponente wird innerhalb des <RouterView>-Tags angezeigt. Sie können mehrere <RouterView>-Instanzen für verschachtelte Routen oder benannte Ansichten verwenden, um komplexe Layouts zu erstellen. Die Position dieser Komponente ist ausschlaggebend für das Layout Ihrer Anwendung.

Die Router-Instanz erstellen und konfigurieren

Um Vue Router in Ihrer Anwendung zu verwenden, müssen Sie zunächst eine Router-Instanz erstellen. Dies geschieht in der Regel in einer separaten Datei (z.B. src/router/index.js) und wird dann in Ihrer Hauptanwendungsdatei importiert. Die Erstellung erfolgt mit der Funktion createRouter():

import { createRouter, createWebHistory } from 'vue-router'

Innerhalb von createRouter() konfigurieren Sie die Routen Ihrer Anwendung in einem Array von Objekten. Jedes Routenobjekt definiert einen path (den URL-Pfad) und eine component (die Vue-Komponente, die für diesen Pfad gerendert werden soll). Zum Beispiel:

const routes = [ { path: '/', component: HomeView }, { path: '/ueber-uns', component: AboutView }, ]

Ein weiterer wichtiger Parameter ist die history-Option. Sie steuert, wie Vue Router die URLs im Browser verwaltet:

  • createWebHistory(): Dies ist der empfohlene Modus für die meisten SPAs. Er verwendet die HTML5 History API, um „saubere“ URLs ohne Hash-Zeichen (z.B. yourdomain.com/ueber-uns) zu ermöglichen. Dieser Modus erfordert eine Serverkonfiguration, um alle Anfragen an Ihre index.html zu leiten, damit das Client-seitige Routing funktionieren kann.
  • createWebHashHistory(): Dieser Modus verwendet das Hash-Zeichen (#) in der URL (z.B. yourdomain.com/#/ueber-uns). Er funktioniert ohne spezielle Serverkonfiguration, da Änderungen am Hash-Teil der URL keine vollständige Seitenneuladung auslösen. Er ist nützlich für Umgebungen, in denen keine Serverkonfiguration möglich ist, wird aber oft als weniger ästhetisch empfunden.
  • createMemoryHistory(): Dieser Modus wird hauptsächlich für serverseitiges Rendering oder Testumgebungen verwendet, da er die Browser-URL komplett ignoriert und eine interne URL-Historie verwaltet.

Den Router in der Vue-Anwendung registrieren

Nachdem die Router-Instanz erstellt wurde, muss sie als Plugin in Ihrer Vue-Anwendung registriert werden. Dies geschieht durch Aufrufen von .use(router) an Ihrer Vue-Anwendungsinstanz, bevor Sie die Anwendung mounten:

createApp(App).use(router).mount('#app')

Durch diese Registrierung werden die <RouterLink>- und <RouterView>-Komponenten global verfügbar gemacht, und die globalen Eigenschaften $router (die Router-Instanz selbst) und $route (das aktuelle Routenobjekt) werden in allen Komponenten zugänglich. Für die Composition API bietet Vue Router auch Composables wie useRouter() und useRoute(), die den Zugriff auf diese Objekte ermöglichen.

Einrichtung einer Vue SPA mit Vue CLI

Die einfachste Methode, eine Vue SPA mit integriertem Vue Router zu starten, ist die Verwendung des Vue CLI (Command Line Interface) oder des neueren Vite. Der Vue CLI bietet eine interaktive Oberfläche, um ein neues Projekt mit den gewünschten Funktionen zu konfigurieren.

Schritt-für-Schritt-Konzept

  1. Vue CLI installieren: Wenn Sie Vue CLI noch nicht installiert haben, können Sie dies global über npm tun: npm install -g @vue/cli.
  2. Neues Projekt erstellen: Erstellen Sie ein neues Projekt mit vue create spa-app.
  3. Funktionen auswählen: Der CLI wird Sie auffordern, ein Preset auszuwählen. Wählen Sie „Manually select features“ (manuelle Funktionsauswahl).
  4. Router auswählen: Navigieren Sie mit den Pfeiltasten und wählen Sie „Router“ (Leertaste zum Auswählen) aus den verfügbaren Funktionen aus. Bestätigen Sie mit Enter.
  5. Vue-Version und History-Modus: Wählen Sie die gewünschte Vue.js-Version (z.B. Vue 3). Anschließend werden Sie gefragt, ob Sie den History-Modus für Vue Router verwenden möchten. Wählen Sie „Yes“ für saubere URLs oder „No“ für Hash-basierte URLs (createWebHistory vs. createWebHashHistory).
  6. Projektinitialisierung: Der CLI erstellt nun das Projekt, installiert die Abhängigkeiten und konfiguriert Vue Router automatisch.
  7. Projekt starten: Navigieren Sie in das Projektverzeichnis (cd spa-app) und starten Sie die Entwicklungsserver mit npm run serve. Ihre Vue SPA ist nun unter localhost:8080 (oder einem anderen Port) verfügbar.

Die App-Struktur verstehen

Nach der Erstellung des Projekts werden Sie eine typische Vue-Anwendungsstruktur vorfinden:

  • src/main.js: Dies ist der Einstiegspunkt Ihrer Anwendung. Hier wird die Vue-App-Instanz erstellt, die Root-Komponente App.vue importiert und der Router (.use(router)) registriert, bevor die App gemountet wird.
  • src/App.vue: Dies ist die übergeordnete Root-Komponente Ihrer Anwendung. In ihrem Template finden Sie typischerweise die <RouterLink>-Komponenten für die Navigation (z.B. Home, Über uns) und die <RouterView>-Komponente, die als Platzhalter für die gerenderten Ansichtskomponenten dient.
  • src/router/index.js: Diese Datei ist das Herzstück Ihres Routings. Hier wird die Router-Instanz mit createRouter() erstellt. Sie importiert die Ansichtskomponenten (z.B. HomeView.vue, AboutView.vue aus src/views) und definiert das Array der Routen, das jeden Pfad einer spezifischen Komponente zuordnet. Wenn Sie eine neue Seite hinzufügen möchten, erstellen Sie einfach eine neue Vue-Komponente unter src/views, importieren diese in src/router/index.js und fügen ein neues Routenobjekt zum routes-Array hinzu.

Durch diese Struktur ist es einfach, neue Seiten und Navigationspfade zu Ihrer Anwendung hinzuzufügen und ein komplexes Routing-Schema zu verwalten, das die Grundlage für eine leistungsstarke Single-Page-Anwendung bildet.

How does vue router use a srcset=
tags?" width="1000" height="420"/> Instead of using regular tags, we use the custom component RouterLink to create links. This allows Vue Router to change the URL without reloading the page, handle URL generation, encoding, and various other features. We'll go into more detail about RouterLink in later sections of the guide.

Häufig gestellte Fragen (FAQs)

Warum sollte ich eine Single-Page-Anwendung (SPA) verwenden?

SPAs bieten ein überlegenes Benutzererlebnis durch schnelle, nahtlose Navigation ohne Seitenneuladungen. Sie sind ideal für Anwendungen, die eine hohe Interaktivität erfordern, wie Dashboards, soziale Netzwerke oder Online-Editoren. Sie verbessern die Reaktionsfähigkeit und können die Serverlast reduzieren, da der Server nur noch Daten und keine kompletten HTML-Seiten liefern muss.

Was ist der Hauptunterschied zwischen <RouterLink> und einem normalen <a>-Tag?

Ein normales <a>-Tag löst bei einem Klick eine vollständige Seitenneuladung aus, indem es eine neue Anfrage an den Server sendet. <RouterLink> hingegen ist eine spezielle Komponente von Vue Router, die Klicks abfängt. Sie verhindert die vollständige Neuladung und nutzt stattdessen die History API des Browsers, um die URL zu aktualisieren und die entsprechende Vue-Komponente dynamisch zu rendern. Dies ermöglicht das flüssige, SPA-typische Navigationsverhalten.

Ist SEO immer noch ein Problem für SPAs?

Historisch gesehen ja, da Suchmaschinen-Crawler Schwierigkeiten hatten, von JavaScript gerenderte Inhalte zu indexieren. Moderne Crawler sind jedoch deutlich besser darin geworden. Für kritische SEO-Anforderungen wird oft serverseitiges Rendering (SSR) mit Frameworks wie Nuxt.js oder Prerendering für statische Inhalte eingesetzt. Diese Techniken ermöglichen es, die Vorteile einer SPA mit einer optimalen Indexierbarkeit durch Suchmaschinen zu kombinieren.

Benötige ich immer Vue Router, wenn ich eine SPA mit Vue.js erstelle?

Für die meisten komplexen Single-Page-Anwendungen mit mehreren Ansichten und Navigation ist Vue Router die offizielle und empfohlene Lösung. Wenn Sie jedoch nur sehr einfaches Routing benötigen und keine vollwertige Router-Bibliothek einbinden möchten, können Sie auch dynamische Komponenten in Vue in Kombination mit der Browser History API (z.B. über das hashchange-Ereignis) verwenden, um grundlegendes Client-seitiges Routing von Grund auf zu implementieren. Für eine robuste und wartbare Anwendung ist Vue Router jedoch die beste Wahl.

Was sind die verschiedenen „History-Modi“ in Vue Router?

Die History-Modi legen fest, wie Vue Router die URLs im Browser verwaltet. createWebHistory() ist der Standard und verwendet die HTML5 History API für „saubere“ URLs ohne Hash-Zeichen (z.B. /about). Dieser Modus erfordert eine Serverkonfiguration. createWebHashHistory() verwendet URLs mit einem Hash-Zeichen (z.B. /#/about), funktioniert ohne Serverkonfiguration, ist aber optisch weniger ansprechend. createMemoryHistory() ist für serverseitiges Rendering oder Testumgebungen gedacht und verwaltet eine interne Historie ohne Einfluss auf die Browser-URL.

Wenn du andere Artikel ähnlich wie Vue SPAs: Nahtlose Web-Erlebnisse gestalten kennenlernen möchtest, kannst du die Kategorie Wellness besuchen.

Go up