react-router: Warum die Bevorzugung von browserHistory gegenüber hashHistory?

8

Ich bin relativ neu in React; Entschuldigung, wenn das eine wirklich naive Frage ist.

Was sind die technischen Vorteile für browserHistory , die sie gegenüber hashHistory bevorzugen? Gibt es zum Beispiel eine wesentliche Steigerung der Effizienz durch die Verwendung der Verlaufs-API ?

Die Dokumente geben an, dass browserHistory empfohlen , auch wenn dies auf Kosten von zusätzliche Server-Konfiguration und müssen Ihre Basis-URL für verschiedene Server fest codieren oder konfigurieren über Basisname .

hashHistory "funktioniert einfach", unabhängig von der Basis-URL, von der die Dateien geliefert werden. Keine Serverkonfiguration erforderlich. Bündeln Sie Ihre App, hosten Sie sie von einer beliebigen URL / Pfad auf einem Server, gut zu gehen.

Es könnte gut sein, wenn die Dokumentation ein wenig weiter geht, um zu erklären, warum es browserHistory empfohlen wird, obwohl es mit mehr Komplexität verbunden ist.

    
Clint Harris 26.01.2016, 13:40
quelle

3 Antworten

6

In einigen Fällen ist hashHistory in Ordnung - es sei denn, Sie beginnen mit der serverseitigen Logik, die eine vollständige URL der ursprünglichen Anforderung kennen muss.

  

Browser senden den #hash-Teil der URL nicht in HTTP-Anfragen.

Daher würde serverseitig (d. h. NodeJS) nicht wissen, was #hash in der URL war, als der Benutzer eine Seite anforderte.

Ein gutes Beispiel ist der Versuch, eine Seite zu laden, die eine Anmeldung erfordert (über oAuth usw.). Bevor der Benutzer zur Authentifizierung auf eine separate Website geleitet wird, teilt die serverseitige App dem Authentifizierungsanbieter mit, zu welcher URL der Benutzer nach einer erfolgreichen Anmeldung weitergeleitet wird (normalerweise wird die ursprüngliche URL wie bei den meisten Websites angefordert). Wenn Sie hashHistory verwenden würden, würde serverseitig nur die Bits vor dem # -Symbol kennen und würde den Benutzer auf die Hauptseite Ihrer App und nicht auf eine Unterseite umleiten Benutzer wollte laden.

Ich hoffe, das macht Sinn.

    
Romasato 10.02.2017 11:00
quelle
3

Ein Grund dafür, dass browserHistory gegenüber hashHistory bevorzugt wird, ist, dass es für die Bereitstellung und Produktion besser geeignet ist. HashHistory "funktioniert" durch Hinzufügen eines eindeutigen Schlüssels am Ende der URL und erstellt einen "Verlauf" dafür, indem er diese Schlüssel verwendet, um Ihre aktuelle Sitzung zu verfolgen.

browserHistory sieht ohne # viel sauberer aus, aber um dies einzurichten, müssen Sie Ihren Server so konfigurieren, dass er die URLs, die Sie bereitstellen wollen, verarbeiten kann.

Hoffe das hilft!

    
Benny 29.02.2016 03:38
quelle
2
  

Was sind die technischen Vorteile von browserHistory gegenüber hashHistory?

Es ermöglicht Ihnen, ein serverseitiges Fallback zu haben, welches:

  1. Erlaubt der ersten besuchten Seite, mit HTML zu initialisieren (anstatt alle Daten mit Ajax abzurufen), was eine bessere Leistung ergibt
  2. Bedeutet, die Seite funktioniert auch wenn JS fehlschlägt (dies ist auch besser für Suchmaschinen).

Dies kommt auf Kosten des Schreibens des serverseitigen Codes zum Erstellen von Seiten auf die gleiche Weise wie der clientseitige Code. Ohne das ist die Verwendung der History-API objektiv schlechter ... aber die URLs sind, sehr subjektiv, netter, so dass viele Leute es ohne die Serverseite sowieso machen.

    
Quentin 10.02.2017 11:05
quelle

Tags und Links