Wie würden Sie eine Memory-Mapped-Datei in FirefoxOS, Tizen oder einer anderen mobilen pure-JS-Lösung emulieren?
Der Anwendungsfall ist für einen mobilen Browser und Sie benötigen eine Menge Daten, die nicht in den RAM passen oder Sie möchten RAM dafür noch nicht verschwenden und es lieber faul laden.
Das einzige, was ich gefunden habe, ist IndexedDB oder was kann ich dagegen tun? Irgendwelche besseren Tricks oder APIs?
Hmmh es sieht aus wie Web SQL Datenbank könnte auch eine Lösung auf Android, Tizen oder iOS sein. Aber Firefox unterstützt es nicht (?)
Update : Ich frage wegen einige experimente
Zunächst einmal wird Web SQL niemals standardisiert, wie in der Spezifikation erklärt, also sollte es so sein nur für WebKit / Blink-basierte Browser berücksichtigt.
In this queston , obwohl die Kartenkacheln in dieser Frage berücksichtigt werden, denke ich, dass sie immer noch relevant für Ihren Anwendungsfall sind.
Ich glaube, dass Sie mit IndexedDB für die Diagrammdaten auf dem richtigen Weg sind. Auf einer höheren Ebene handelt es sich um einen asynchronen Schlüsselwert-Objektspeicher (siehe Dokument mit den Grundbegriffen ). Für Ihren Anwendungsfall können Sie Grafikknoten in einem Objektspeicher indizieren. Es gibt zum Beispiel die Bibliothek LevelGraph , die Diagrammdaten in IndexedDB speichert, obwohl sie für Semantic-Web-Triples erstellt wurde. HeliosJS ist ebenfalls erwähnenswert, obwohl es sich um eine speicherinterne Graphendatenbank handelt.
Bearbeiten: Die aktuelle API für IndexedDB ist asynchron. Es gibt eine synchrone API , die in der Spezifikation entworfen wurde und nur im Web verwendet werden könnte Arbeitskräfte. Leider implementiert derzeit keine Engine diese Funktion. Es gibt einen ausstehenden Patch für Gecko , aber ich habe keine Pläne für Blink oder WebKit gefunden ist jetzt keine sinnvolle Option.
Es ist möglich, über Web-APIs auf Raw-Dateien zuzugreifen. Sie können XHR2 verwenden, um eine (lokale) Datei als Binärdatei zu laden. Blob . Leider ist XHR2 hauptsächlich für das Streaming von Dateien und nicht für einen wahlfreien Zugriff gedacht, obwohl Sie die Daten in mehrere Dateien aufteilen und bei Bedarf anfordern könnten, aber das kann langsam sein. Der direkte Zugriff auf Dateien ist derzeit ziemlich begrenzt, FileList und createObjectURL werden hauptsächlich für direkte Dateibenutzereingaben verwendet ( durch Drag-and-Drop oder Datei-Eingabefeld), FileSystem API wurde kürzlich getötet, und die DeviceStorage ist nicht standardisiert und privilegiert (Firefox OS-spezifisch). Sie können auch Dateien in IndexedDB speichern, die für FileHandle API beschrieben sind. Sobald Sie jedoch Zugriff auf das rohe Dateiobjekt erhalten, können Sie das Blob verwenden. Slice Methode, um Teile der Datei zu laden - es gibt ein großes Beispiel zum Lesen von Datei-Chunks über Upload-Formular . Vielleicht möchten Sie auch jDataView Bibliothek & amp; Freunde, die die Handhabung von Binärdaten durch den effizienteren ArrayBuffer erleichtern.
Bearbeiten: Wie für die synchrone API localStorage (auch bekannt als DOM Storage) könnte ebenfalls berücksichtigt werden. Es ist auch ein Schlüssel-Wert-Speicher, aber viel viel einfacher und begrenzter als IndexedDB:
Im Allgemeinen ist localStorage ein nützlicher Ersatz für Cookies, aber zum Speichern großer Offline-Daten ist es nicht wirklich nützlich.
Um es zusammenzufassen:
Am Ende können Sie beide Ansätze kombinieren, beachten Sie dabei zwei Möglichkeiten:
In allen Fällen können (sollten) Sie Web Workers verwenden, um mit Daten zu arbeiten Manipulation und Berechnungen im Hintergrund.
Wie auch immer, GraphHopper sieht gut aus, uns fehlen solche nicht-trivialen Offline-Anwendungen für Firefox OS, also viel Glück!
Tags und Links javascript html5 tizen firefox-os gaia