开发过微信小程序的,用微信小程序操作过文件的应该知道,微信有一组文件管理接口——FileSystemManager接口组,天下网吧了解到,近日官方升级了相关的接口到FD接口。FD接口是什么鬼?一起来看看:
官方介绍:
FD 接口是微信团队新增的高性能、原子化的文件接口类型。对比原有文件接口,FD 接口不仅增加打开文件与关闭文件 2 个接口,而且更新代码实现方式,快速提升小程序性能:
能力 | 原有接口 | FD 接口 |
打开文件 | 无 | open / openSync |
读取文件 | readFile / readFileSync | read / readSync |
写入文件 |
writeFile / writeFileSyncappendFile / appendFileSync |
write / writeSync |
截断文件 | truncate / truncateSync | ftruncate / ftruncateSync |
获取文件状态信息 | stat / statSync | fstat / fstatSync |
关闭文件 | 无 | close / closeSync |
- FD接口有多强-
FD 接口支持一次打开文件,即可进行多次读 / 写操作。对比原有文件接口每项操作均需要打开、写入、关闭文件 3 个步骤,FD 接口实现一次打开文件,即可多次读取、写入文件,操作完成再关闭文件,减少重复操作。
FD 接口支持只读 / 写文件中指定内容。针对大文件操作场景,FD 接口的该项特性能够减少无效读写,降低文件读写时间。 如下图例子,原有文件接口需要全部读 / 写内容(如左下图黄色高亮内容),FD 文件接口则支持只读 / 写指定内容(如右下图黄色高亮内容),降低读写耗时。
以连续 100 次读 + 写同一个文件 (1MB) 的实验为例,对比原有接口读写文件耗时,FD 接口在安卓端读写文件耗时降低 46%,在 iOS 端读写耗时降低 19%。
FD其实就是原来的FileSystemManager的相关接口的升级版,原来打开文件,修改文件内容,再保存文件的代码是这样的:
// 获取全局唯一的文件管理器 const fs = wx.getFileSystemManager() // 读取文件 data = fs.readFileSync(“FileA”) // 修改文件内容 data = modify(data) // 写入文件 fs.writeFileSync(“FileA”, data)
改用FD读写,是这样的:
// 获取全局唯一的文件管理器 const fs = wx.getFileSystemManager() // 打开文件 fd = fs.openSync(“FileA”) // 读取文件 fs.readSync({ fd, arrayBuffer, offset, length, position }) // 修改文件内容 data = modify(data) // 写入文件 fs.writeSync({ fd, data, offset, length, position }) // 关闭文件 fs.closeSync({fd: fd })
可以看出,变化并不大,FD方式多了一个打开文件的操作,相当于其他开发语言的获取文件句柄,然后可以重复,多次的对文件句柄进行读写操作,而不需要重新打开文件,这样自然提供了读写性能,特别适合在需要大量、高频读写文件时性能提升会很明显!
参考资料:
微信开发者公众号文章: