Hallo Henry,
Christian macht für die Wiederherstellung genau das: den Inhalt der Textarea in den localStorage legen. Aber immer nur den aktuellen Stand. Niemand schreibt hier Romane in einen Beitrag (der Text ist auch limitiert; wenn die Farbgebung des Zeichenzählers oben die Wahrheit sagt, muss die Länge eines Texts unter 0x3000 liegen, also maximal 12287 Zeichen).
Einen String dieser Länge in den localStorage zu kopieren ist gar nichts.
Die letzten 5 Versionen eines solchen Strings in den localStorage zu schreiben ist ebenfalls gar nichts.
Anders sieht es aus, wenn ich ein Forum mit vielen tausend Beiträgen habe und die Beiträge versionieren möchte. Das ist dann auch eine andere Aufgabenstellung mit anderen Anforderungen an Datenvolumen, Permanenz der Speicherung und Verarbeitungsdauer, und dafür wird sicherlich ein diff-Tool zum Einsatz kommen. Vielleicht sogar ein Kompressionstool, entweder selbst aufgerufen oder als interne Funktion der DB.
Wieder anders sieht es in einer Textverarbeitung aus. Da kann ein Dokument schnell mal viele MB groß sein, und man möchte möglicherweise 1000 UNDO-Schritte speichern. Oder einfach alle, seit dem Öffnen des Dokuments, bis der RAM voll ist. Da kann man keine vollständigen Snapshots machen, es ist auch nicht sinnvoll. Die meisten Änderungen in einer Textverarbeitung sind ja sehr lokal und bestehen zumeist aus der Eingabe eines einzigen Zeichens. In solchen Fällen speichert die Textverarbeitung nur kurze Infos darüber, was sie am Text geändert hat, und zwar nicht per stumpfem DIFF, sondern unter Ausnutzung ihres Wissens darüber, was sie gerade getan hat. Jede Operation, die in der Textverarbeitung ausgeführt wird, weiß was sie tut, und weiß, wie das rückgängig zu machen ist. Man kann also pro Änderung eine passende und kompakte Undo-Information auf den Undo-Stack legen. Dafür eine passende Datenstruktur zu finden ist gar nicht so einfach, in dieser struct muss mit jedem Bit gegeizt werden, denn wenn ich 10.000 Zeichen schreibe, möchte ich ja nicht 200.000 Bytes Undo-Informationen mit mir herumschleppen. Ich brauche also eine Variantenstruktur mit variabler Größe, damit der Großteil der Undo-Infos mit einigen wenigen Bytes auskommt. Wird dann ein Undo-Schritt durchgeführt, weiß die Textverarbeitung ebenfalls, was sie gerade tut, und kann auch dafür eine Undo-Information erstellen und auf den Redo-Stack schieben.
Rolf
sumpsi - posui - obstruxi