gpt4 book ai didi

javascript - FirefoxOS 的内存映射等价物

转载 作者:太空狗 更新时间:2023-10-29 13:51:13 27 4
gpt4 key购买 nike

您将如何在 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 图 block ,我认为它仍然与您的用例相关。

我相信您使用 IndexedDB 处理图形数据是正确的。在高层次上,它是一个键值异步对象存储(参见 Basic Concepts document )。对于您的用例,您可以在 object store 中索引图节点。 .例如,LevelGraph在 IndexedDB 中存储图形数据的库,尽管它是为语义 Web 三元组构建的。 HeliosJS还值得一提的是,尽管它是一个内存中的图数据库。

编辑: IndexedDB 的当前 API 是异步的。有 synchronous API在规范中起草,只能在网络 worker 中使用。不幸的是,目前没有引擎实现此功能。有一个pending patch for Gecko , 但我没有找到任何 Blink 或 WebKit 的计划,所以它现在不是一个有意义的选择。

可以通过 Web API 访问原始文件。你可以使用 XHR2将(本地)文件加载为二进制文件 Blob .不幸的是,XHR2 主要是为流式文件而不是随机访问而设计的,尽管您可以将数据拆分为多个文件并按需请求它们,但这可能很慢。目前对文件的直接访问非常有限,FileList and createObjectURL主要用于直接文件用户输入(通过拖放或文件输入字段),文件系统 API 为 recently killed , 和 DeviceStorage是非标准的和特权的(特定于 Firefox 操作系统)。您还可以将文件存储在 IndexedDB 中,这在 FileHandle API 中有描述。 .但是,一旦您设法访问原始文件对象,就可以使用 Blob.slice加载文件 block 的方法——有一个great example of reading file chunks via upload form .您可能还想看看 jDataView library & friends,它通过更高效的 ArrayBuffer 简化了二进制数据的处理.

编辑:至于同步 API,localStorage (又名 DOM 存储)也可以考虑。它也是一个键值存储,但比 IndexedDB 简单得多,限制也更多:

  • 存储空间有限,usually to 5 MB
  • 每个域/应用程序只有一个 localStorage(您可以在 IndexedDB 中有多个命名对象存储)。
  • 只能存储字符串。

总的来说,localStorage 是有用的 cookie 替代品,但对于存储大量离线数据并不是很有用。


总结一下:

  • IndexedDB 是最简单且广泛可用的选项,但它可能速度慢、效率低或在处理非常大的数据时会达到内存限制;此外,目前只有异步 API 是可能的。
  • 在没有用户交互的情况下很难获得原始文件访问权限,而且 API 不稳定且不标准。

最后,您可以结合这两种方法,想到两个选项:

  • 使用XHR2对大文件进行分 block 解析,并将解析后的节点存储到IndexedDB中
  • 将大文件存储到 IndexedDB(通过 XHR),使用 FileHandle.getFile加载文件对象和 Blob.slice阅读其内容。

在所有情况下,您都可以(应该)使用 Web Workers在后台处理数据操作和计算。

无论如何,GraphHopper 看起来很棒,我们真的缺少 Firefox OS 的这种非平凡的离线应用程序,祝你好运!

关于javascript - FirefoxOS 的内存映射等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23296295/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com