Tach!
Der Storage wird pro Domain gehalten, oder?
Ja.
Mehrere Seiten einer Domain sind gleichzeitig offen, Mehrere XHRs laufen parallel.
Die XHRs innherhalb eines Tab sind nicht das Problem, Javascript im Browser ist erstmal single-threaded, wenn du nicht explizit mit Web Worker hantierst. Aber da solltest du vielleicht lieber das Speichern nur in einem der beiden (Web Worker vs. Forground Thread) ausführen und die Daten per Messages zum jeweils anderen schicken.
Ob Tabs separat laufen oder sich einen Thread oder Prozess oder was auch immer teilen, ist laut Internet browserspezifisch.
Innerhalb eines Tabs sorgt die Event Loop dafür, dass alles der Reihe nach ausgeführt wird und nicht ein anderes Event in deinen Eventhandler reingrätscht. Dabei gibt es das Problem des gleichzeitigen Zugriffs nicht, solange du deine Operationen nicht auf mehrere Eventhandler aufteilst.
Bleibt die Frage übrig, was mit in mehreren Tabs ausgeführten Websites ist. Das musst du dann mit deinem Anwedungsfall abstimmen, ob das ein Problem werden kann. Das ist ja dann nicht nur eine Frage des Zugriffs auf die Storage API. Du hast ja dann auch andere Daten im RAM (oder wo auch immer), die sich nicht abgleichen, wenn die Datenhaltung geändert wird.
Wenn es verschiede Dinge sind, die mit derselben Anwendung verwaltet werden sollen, dann könnte man da mit Catch-All-Subdomains den Anwendern beliebig viele "Namespaces" zur Verfügung stellen. Zum Beispiel, wenn es da ein Spiel gibt, das mehrere Spielstände anlegen kann, oder das man in mehreren Welten spielen kann, und man stellt eine Website zur Verfügung, mit der man zu diesem Spiel ein paar Daten verwalten kann, dann kann und sollte man je Spielstand oder Welt separiert vorgehen.
Eine andere Vorgehensweise wäre ein individueller Prefix für die Local-Storage-Daten. Das Internet weiß auch noch, dass der Session Storage je Tab separat ist. Die Frage ist nur, wie man einen individuellen Key bekommt, der sich nicht mitkopiert, wenn man Tabs dupliziert.
dedlfix.