4.7 忘掉文件系统

3.3节介绍了Emscripten提供的三种同步文件系统:MEMFSIDBFSNODEFS,它们各自的特性如下表:

特性 | MEMFS | IDBFS | NODEFS -|-|-|- 访问本地文件系统 | 否 | 否 | 是 使用内存模拟 | 是 | 是 | 否 支持持久化存储 | 否 | 是 | 是

NODEFS只能在Node.js中使用,因此在网页应用中不推荐使用文件系统最核心的原因在于:MEMFS/IDBFS都需要占用内存来模拟文件系统。

内存是非常珍贵的硬件资源,iOS设备的内存普遍不超过4GB,用内存模拟文件系统不论从哪个角度来说,都是非常奢侈的行为。

另外,虚拟文件系统的初始化所消耗的时间也是一个需要考量的因素,体积巨大的打包文件系统下载消耗较长的时间,这对于网页应用非常很不利。

笔者并不是说文件系统完全不能使用——使用IDBFS保存前端配置是可行的,某些快速原型使用虚拟文件系统也可以降低移植难度;但是在使用Emscripten开发网页应用模块的时候,需要特别留意32位的内存空间、低速的网络IO操作限制,这与开发本地应用时可使用的资源有数量级的差异。当所需操作的数据非常巨大的时候,最好采用按需加载、分级加载策略。

放弃文件系统后,我们只能使用网络IO作为主要的数据通路,第5章将作进一步的探讨。


书籍推荐