據微信開發者發布,隨著文件系統本地存儲容量的不斷擴大,文件操作的流程與速度成為開發者們日益關注的重點。為了實現小程序 / 小游戲更高效、更原子化的文件操作效果,微信團隊新增 FD 接口,優化小程序用戶體驗:
支持一次打開文件即可多次讀 / 寫,減少重復操作
支持只讀 / 寫指定內容,減少無效讀寫
實現讀寫耗時降低 46%,提升體驗
FD 接口是什么
FD 接口是微信團隊新增的高性能、原子化的文件接口類型。對比原有文件接口,FD 接口不僅增加打開文件與關閉文件 2 個接口,而且更新代碼實現方式,快速提升小程序性能。
FD 接口有多強
FD 接口支持一次打開文件,即可進行多次讀 / 寫操作。對比原有文件接口每項操作均需要打開、寫入、關閉文件 3 個步驟,FD 接口實現一次打開文件,即可多次讀取、寫入文件,操作完成再關閉文件,減少重復操作。
FD 接口支持只讀 / 寫文件中指定內容。針對大文件操作場景,FD 接口的該項特性能夠減少無效讀寫,降低文件讀寫時間。 如下圖例子,原有文件接口需要全部讀 / 寫內容(如左下圖黃色高亮內容),FD 文件接口則支持只讀 / 寫指定內容(如右下圖黃色高亮內容),降低讀寫耗時。
以連續 100 次讀 + 寫同一個文件 (1MB) 的實驗為例,對比原有接口讀寫文件耗時,FD 接口在安卓端讀寫文件耗時降低 46%,在 iOS 端讀寫耗時降低 19%。
FD 接口怎樣用
FD 接口減少重復操作、減少無效讀寫,降低文件讀寫耗時。那么如何正確應用 FD 接口?
以打開文件、讀取文件內容、修改內容并寫入文件的過程為例,原有接口需要每次讀寫文件并且完整打開關閉。
// 獲取全局唯一的文件管理器
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 接口支持一次打開文件即可多次讀 / 寫,并且支持只讀 / 寫指定內容,實現文件讀寫耗時減少近 50%,提升用戶體驗。