Eine Anwendung schreiben, um offline zu arbeiten (Webanwendung)

8

Wenn Sie eine Anwendung schreiben, um offline und online zu arbeiten, ist es am besten, sie einmal zu schreiben, um offline zu arbeiten und der Online-Modus funktioniert genauso wie offline?

Lassen Sie uns zum Beispiel ein typisches Einkaufswagen-Beispiel sehen. Ein Einkaufswagen enthält Artikel und einen Kunden.

Wenn der Einkaufswagen geladen wird, sollte ich alle Artikel + Kunden im lokalen Speicher zwischenspeichern und diesen Datencache sowohl online als auch offline verwenden und den Cache nach Bedarf aktualisieren? Was sind Best Practices bei der Entwicklung einer Offline / Online-Hybrid-Webanwendung?

    
Chris Muench 30.04.2011, 15:41
quelle

1 Antwort

7

Das Schreiben einer Web-App zum Arbeiten im Online- / Offline-Modus ist wirklich sehr ähnlich dem Schreiben einer "normalen" servergesteuerten Web-App, mit der Ausnahme, dass Sie eine Datenzugriffsebene (DAL) zwischen Ihrer App haben und die Daten, die entweder auf dem Server (Online-Modus) oder den Daten des Browsers (Offline-Modus) gespeichert sind.

Abhängig von der Anwendung und den Anforderungen können Sie in einem von zwei Modi laufen: a.) Einen Cache-and-try-your-best-Modus oder b.) a load-everything-and-check-for-updates Modus.

Jeder dieser beiden Modi hat einige gute und einige schlechte Teile, und Sie können definitiv verschiedene Teile Ihrer Anwendung haben, die sich in die eine oder andere Richtung neigen.

Cache-and-try-your-best-Modus

Bei diesem Modus speichert die DAL Daten vom Server in den Datenspeicher des Browsers zwischen, während sie während des normalen Betriebs auf Daten zugreift. Im Offline-Modus versucht die DAL am besten, die Anforderungen der Benutzer zu erfüllen, aber es werden nur die zwischengespeicherten Daten verarbeitet, sodass einige Operationen möglicherweise nicht (oder nicht sofort) abgeschlossen werden können. Auf der anderen Seite gibt es eine minimale Startzeit, die darauf wartet, dass Daten geladen werden, aber auf der anderen Seite erfordert jede Aktion einen Servertreffer (falls verbunden) und dass Daten zwischengespeichert werden müssen. Die App muss auch für alle Operationen fehlschlagen, die aufgrund unvollständiger Daten nicht abgeschlossen werden können.

Laden Sie alles und überprüfen Sie den Aktualisierungsmodus

In diesem Fall lädt die DAL beim Start der App alle Daten, die die App benötigt, in den Browser. Wenn die App bereits geladen wurde, müssen alle Daten aktualisiert werden, um sicherzustellen, dass der Cache nicht veraltet ist. Auf der anderen Seite muss der Benutzer nicht lange darauf warten, Dinge zu tun, da alles eine lokale Operation ist, aber auf der anderen Seite, wenn es viele Daten gibt, könnte die Startzeit sein ziemlich lang.

In beiden Fällen müssen Sie mit veralteten Cacheproblemen fertig werden, und es werden persistente Offline-Operationen auf dem Server ausgeführt. Dies bedeutet, dass Sie beim Start und wahrscheinlich auch während der Ausführung der App regelmäßig mit dem Server synchronisieren müssen, um Ihre zwischengespeicherten Daten frisch zu halten und alle lokalen Zustände, die Sie möglicherweise mit dem Server haben, zu teilen dass der Rest der Welt die Updates von dieser Instanz der Anwendung sieht.

Das Fortsetzen von Operationen auf den Server, die aufgetreten sind, während sich die App im Offline-Modus befand, kann besonders schwierig sein, wenn die mit dieser Operation verbundenen Daten zwischen Aktualisierungen der App wechseln. Wenn beispielsweise ein zwischengespeicherter Banksaldo veraltet ist und viel mehr Geld anzeigt als der vom Server reflektierte "wahre" Status, könnte ein Benutzer das Konto überziehen, ohne es zu wissen. Dies ist ein extremes Beispiel, aber diese Art von operativer Kollisionserkennung muss vorhanden sein, um Updates zu behandeln, die ineinander laufen können.

Wenn Sie eine App haben, die sowohl online als auch offline sein kann, schreiben Sie die App im Allgemeinen so, dass die App selbst keine Rolle spielt. Eine untergeordnete Datenschicht abstrahiert alle Probleme und Ihre App muss nur wissen, wie sie damit umgehen muss, dass sie keine Informationen erhalten kann (was jede gute App, ob online oder offline, tun sollte).

>

Für einen Einkaufswagen haben Sie wahrscheinlich (oder hoffentlich?) WENIGER mehr Produkte als jeder einzelne Kunde wahrscheinlich in den Einkaufswagen legen wird. Das Laden aller von ihnen in jeden Browser ist mit großer Wahrscheinlichkeit eine riesige Verschwendung von Bandbreite und würde eine solche Verzögerung für Ihre Benutzer verursachen, dass die enormen Bandbreitenkosten und die verlorenen Verkäufe (aufgrund der langsamen Antwortzeiten) jedes Geschäft schnell sinken lassen würden. Laden Sie die Produkte bei Bedarf in die Browser-Daten, und wenn Sie möchten, können Sie andere Produkte laden, die "andere Benutzer auch gekauft haben", die mit den tatsächlich im Warenkorb enthaltenen Elementen verknüpft sind.

    
cdeszaq 04.05.2011, 20:26
quelle

Tags und Links