Wie können Daten effizient in / aus chrome.storage.sync gespeichert / abgerufen werden?

8

Also schreibe ich eine Erweiterung, die es Leuten erlaubt, Farben aus Bildern im Web zu verfeinern und zu speichern. Es läuft gut, aber jetzt versuche ich zu konzeptualisieren, wie ich sie tatsächlich speichern und gelistete Objekte auflisten werde.

Soweit ich das beurteilen kann, erlaubt chrome.storage.sync () nur Objekte. Was bedeutet, dass ich so etwas tun müsste:

%Vor%

Das scheint unglaublich ineffizient zu sein, da ich jedes Mal, wenn ich eine Farbe aus der Favoritenliste hinzufügen oder entfernen möchte, das gesamte Array abrufen, das gewünschte Element ändern und das Array dann speichern muss. Ganz zu schweigen von dem Scannen eines Arrays nach einer Farbe, um zu sehen, ob es existiert oder nicht, könnte in einem großen Array sehr intensiv sein.

Letztendlich möchte ich etwas in der Art von

machen können %Vor%

Das scheint jedoch nicht möglich zu sein.

Ich würde gerne andere Ideen hören, wie der beste Weg dazu aussehen könnte.

    
Chris Sobolewski 19.06.2013, 20:18
quelle

2 Antworten

8

Die Schönheit von Javascript ist, dass alles lose als ein Objekt betrachtet wird. Auf Funktionen, Arrays und sogar Variablen kann als Objekt zugegriffen werden.

Sie könnten ein Array wie dieses erstellen,

%Vor%

Oder benutzen Sie vielleicht ein Array von leeren Funktionen,

%Vor%

Dann können diese Farben durch

erreicht werden %Vor%

oder

%Vor%

Obwohl Sie für jedes Objekt im Speicher einen bestimmten "Schlüssel" -Wert verwenden sollten, ist dies vielleicht ein besserer Weg.

Zum Beispiel

%Vor%

Oder für mehrere Farben

%Vor%

Ich denke, das könnte funktionieren, ich habe nicht versucht, mehrere Objekte mit einem API-Aufruf vorher zu speichern, aber Sie sollten den Punkt bekommen. Eine gute Möglichkeit, dies zu implementieren, besteht darin, ein leeres Array zu haben, das jedes Mal hinzugefügt wird, wenn der Benutzer eine Farbe findet, die er hinzufügen möchte. Dann kann die Erweiterung die Daten regelmäßig synchronisieren.

Sobald Sie eine Menge Tests durchgeführt haben und Ihr Synchronisierungsspeicher unübersichtlich ist, sollten Sie die Schlüssel, die Sie während der Entwicklung verwendet haben, im Auge behalten und daran denken, eine Batch-Datenentfernung durchzuführen. Es würde ungefähr so ​​aussehen:

%Vor%

Übrigens, um den synchron gespeicherten Wert abzurufen,

%Vor%     
David Freitag 19.06.2013 21:04
quelle
2

Ich war mir darüber auch nicht sicher, also machte ich ein kleines Beispiel.

manifest.json:

%Vor%

content-script.js:

%Vor%

Wenn Sie google.com aufrufen (und sich einloggen oder die matches in manifest.json in http ändern) und dann die Konsole öffnen, sehen Sie folgende Ausgabe:

%Vor%

Meine Schlussfolgerungen daraus waren, dass es nur möglich ist, Objekte auf oberster Ebene zu setzen. Selbst wenn Sie nur eine Eigenschaft ändern möchten, die tief in einem Top-Level-Objekt verschachtelt ist, müssen Sie das gesamte Objekt an set() übergeben.

    
Mitch 26.07.2015 09:29
quelle