Emscripten:IDBFS比MEMFS的RAM效率高吗?

Emscripten:IDBFS比MEMFS的RAM效率高吗?,emscripten,Emscripten,我正在使用emcc--preload file命令为我的WebAssembly游戏打包数据,该命令将数据放入MEMFS,并将其保存在RAM中,直到网页关闭 游戏通常会打开一个文件,读取它的内容,关闭它,再也不会接触该文件,它不使用mmap 在首次发布时将所有游戏数据下载到IndexedDB/Emscripten IDBFS会更节省内存吗?web浏览器是否将整个IndexedDB加载到RAM中,是否在IDBFS中的文件关闭后释放RAM 我的目标硬件是iPhoneXS上的Safari,内存为2GB,

我正在使用
emcc--preload file
命令为我的WebAssembly游戏打包数据,该命令将数据放入MEMFS,并将其保存在RAM中,直到网页关闭

游戏通常会打开一个文件,读取它的内容,关闭它,再也不会接触该文件,它不使用
mmap

在首次发布时将所有游戏数据下载到IndexedDB/Emscripten IDBFS会更节省内存吗?web浏览器是否将整个IndexedDB加载到RAM中,是否在IDBFS中的文件关闭后释放RAM


我的目标硬件是iPhoneXS上的Safari,内存为2GB,游戏数据约为60MB。

正如您所提到的,MEMFS是一个内存中的“文件系统”,可以在任何浏览器中使用。IndexedDB是一个合适的数据库,它的最佳使用案例是存储大量数据(超过RAM的容量)

通常情况下,当应用程序或网站首次加载时,需要进行大量API调用、身份验证和其他工作。每次打开应用程序时都这样做不是最佳选择,因此IndexedDB可以用作加速重复访问的方法。这样,最新的应用程序状态可以存储在IndexedDB中,然后应用程序可以在后台同步(请参阅)

如果你认为你的游戏可以从中受益,那么你可以考虑使用它。然而,如果你认为你也可以这样做的话,我会建议你,因为IndexedDB有一些细微差别

在IOS上的safari的特定情况下,您不能在IndexedDB中存储
blob
s。但是,您可以将
blob
转换为
ArrayBuffer
,但您还必须将MIME类型存储在缓冲区旁边,以便正确进行转换(因为
ArrayBuffer
没有MIME类型,但
blob
有MIME类型)

写入IndexedDB中的存储器也可能失败。这可能是由于多种原因造成的。可能用户正在使用私有模式,或者他们没有足够的磁盘空间

如果用户清除手机上的缓存,IndexedDB数据也可能会被清除。你可能需要处理这个问题

我在过去使用IndexedDB时遇到过一些这样的错误,这可能会让我头疼。我推荐Memfs

至于IDBFS的实现细节,它可能在浏览器和平台之间保持不变,也可能不保持不变。但是,我可以肯定的是,除非您在第一个应用程序中保存了大量需要计算的数据,否则请尝试分析memfs,如果它工作得足够好,那么您可以继续使用它