Erkennen Sie die Anwendungsversionsänderung auf einer einzelnen Seitenanwendung
-
23-12-2019 - |
Frage
Heute wurde hier eine Frage angehoben und ich habe keine offensichtliche Antwort.
gehen davon aus, dass wir alle Ressourcendateien (CSS und JavaScript) verketten und abbauen und sie in der "Master-Seite" deklarieren.
Auf einer mehrseitigen App, wenn eine CSS-Datei ändert, wird er auf der nächsten vollständigen Seitenlast aufgeladen.
Auf einer einzelnen-Seite-App kann der Benutzer tagelang funktionieren und niemals die Hauptseite aufladen, in der die CSS-Dateien deklariert werden.Der Benutzer sieht niemals die Änderungen an, bis ein Strg-F5 ausgegeben wird.
Ich bin sicher, dass jemand schon daran gedacht hat und eine Erfahrung mitzuteilen, um zu teilen :)
Für mich ist für mich keine Option.Erstens, weil es überkill ist und zweitens, weil nicht alle meine Kunden die Technologie unterstützen.Derselbe Grund gilt für alle Websockets-Rückfällige ... Ich werde meine Server nicht immer wieder schlagen.
Also, irgendwelche Ideen?:)
BTW, wir verwenden Angularjs, wenn dies für eine bestimmte Lösung helfen kann.
danke!
Lösung
Ich habe das gleiche Problem. Meine Lösung, die kennzeichnet und möglicherweise nicht auf Ihre Kriterien antwortet:
Wenn ich meine Front-App und meine Server-App verpackte, teile ich eine Konfigurationsdatei mit der aktuellen Version der Front-App.
Frontseite: 75% meiner Routen ändern sich implizit ein Webservice anrufen (Routenänderung auflösen). Also füge ich jedes Mal, wenn ich meinen Server anrufe, einen benutzerdefinierten HTTP-Header (oder einen GET / POST-PARAM) mit der Client-Version der Front-App.
serverseite: Ich vergleichen Sie die Front-App-Version (das in dem Browser des Benutzers, der letztzeitiger Benutzer erfrischt / geladen hat, der Spa geladen ist) mit der Front-App-Version der freigegebenen Konfigurationsdatei:
- .
- Wenn Version übereinstimmt: Ich tue nichts.
- Wenn die Version nicht übereinstimmt, senden Sie einen benutzerdefinierten HTTP-Status-Fehlercode (z. B. 418)
dann vorderseite: Ich habe einen Antwortinterzeptor hinzugefügt, der einen beliebigen 418-Fehlercode abfängt und eine Kraftauffrischung der gesamten App
durchführendas ist es. Grundsätzlich ist das Ereignis, das "Überprüfen", wenn die Front-App-Version die neueste ist, ein Routenänderung (das a WS über AJAX ruft). Sie könnten jedoch ein unendliches $-Intervall hinzufügen, das jeweils 5 Minuten ein dediziertes WS anruft ... Ich kann bei Bedarf einen gewünschten Code hinzufügen.
hoffe das hilft;)
Andere Tipps
Angenommen, Sie verwenden Angularjs 'Routing über $ Route Service und Provider, können Sie mit dem generationspoLDICETAGCODE-Ereignis verwenden, um eine Serveranforderung auszuführen, wenn er signifikante Änderungen vorliegen, die geändert werden müssen. Wenn es dann gibt, können Sie ein Window.Location.Reload () tun, um die Seite neu zu aktualisieren und alle aktualisierten Ressourcen und HTMLs zu erhalten.
Der folgende Prozess kann in Abhängigkeit davon geändert werden, wie Sie es implementieren möchten:
$routeChangeSuccess
.
Ich beschloss, auch hier meine endgültigen Gedanken als Antwort hinzuzufügen:
Wir gingen jetzt für eine reduzierte Lösung.
Da wir einen "Proxy-Service" haben, der (erneut für jetzt wieder ist), der einzige, der mit dieser Anwendung interagiert, haben wir die Anwendungsversion auf dem HTTP-Header aller Antworten hinzugefügt.Wenn wir eine neuere Version erhalten, erscheint ein Popup, der den Benutzer benachrichtigt, und eine vollständige Seitenaktualisierung wird ausgegeben ...
Diese Lösung funktioniert nicht für Anwendungen, die keinen eigenen "privaten" Service haben.