您将如何在FirefoxOS,Tizen或任何其他移动纯JS解决方案中模拟内存映射文件?
该用例用于移动浏览器,您需要大量不适合RAM的数据,或者您不想为此浪费RAM,而是希望延迟加载它。
我发现的唯一是IndexedDB或该怎么办?还有更好的技巧或API吗?
嗯,Web SQL Database可能也是Android,Tizen或iOS上的解决方案。但是Firefox不支持(?)
更新:我是因为some experiments而问
最佳答案
首先,Web SQL不会像the specification中所述进行标准化,因此仅应将其用于基于WebKit/Blink的浏览器。
this queston中对脱机存储选项有一个很棒的概述,即使在该问题中考虑了 map 切片,我仍然认为它与您的用例有关。
我相信使用IndexedDB处理图形数据是正确的。从高层次来看,它是一个键值异步对象存储(请参阅Basic Concepts document)。对于您的用例,您可以在object store中索引图节点。例如,尽管LevelGraph库是为语义Web三元组构建的,但它仍将HeliosJS库存储在IndexedDB中。 synchronous API也值得一提,尽管它是内存中的图形数据库。
编辑:IndexedDB的当前API是异步的。规范中起草了pending patch for Gecko,只能在网络 worker 中使用。不幸的是,目前没有引擎实现此功能。有一个XHR2,但是我没有找到有关Blink或WebKit的任何计划,所以现在这不是一个有意义的选择。
可以通过Web API访问原始文件。您可以使用Blob加载(本地)文件作为二进制FileList and createObjectURL。不幸的是,XHR2主要是为流文件而不是随机访问而设计的,尽管您可以将数据拆分成多个文件并按需请求,但这可能会很慢。
目前,对文件的直接访问非常有限,recently killed主要用于直接文件用户输入(通过拖放或文件输入字段),FileSystem API为DeviceStorage,而FileHandle API是非标准和特权的(特定于Firefox OS) 。您还可以将文件存储在IndexedDB中,该文件针对Blob.slice进行了描述。但是,一旦您可以访问原始File对象,就可以使用great example of reading file chunks via upload form方法加载文件的块了-就是jDataView。
您可能还想看看ArrayBuffer库和 friend ,它通过更有效的localStorage简化了二进制数据的处理。
编辑:至于同步API,也可以考虑使用usually to 5 MB(又名DOM存储)。它也是一个键值存储,但是比IndexedDB更简单,更受限制:
通常,localStorage是有用的cookie替代品,但对于存储大量离线数据并没有真正的用处。
总结一下:
最后,您可以结合使用这两种方法,请牢记两个选项:
在所有情况下,您都可以(应该)使用ojit_a在后台处理数据操作和计算。
无论如何,GraphHopper看起来很棒,我们确实缺少用于Firefox OS的非平凡的脱机应用程序,所以祝您好运!
关于javascript - 内存映射等效于FirefoxOS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23296295/