文件資源操作能力即可便于用戶在客戶端保存文件資源,并在下次啟動客戶端之后可以使用已保存的文件。
只要用戶不主動刪除小程序或小游戲,并保持一定的使用頻率,文件都可以一直被保留。
合理的使用文件系統(tǒng)能力來緩存資源文件,可以給開發(fā)者更好的使用體驗。
今天,我們來分享文件系統(tǒng)能力的小故事。
一、 文件系統(tǒng)的演進歷史
小程序在最早發(fā)布的版本中就已提供了最基礎(chǔ)的文件存儲和刪除接口:wx.saveFile、 wx.removeSavedFile ;
對于絕大部分的小程序來說,這兩個接口已經(jīng)能夠滿足開發(fā)者的需求。但對于小游戲來說,需要更完整的能力來做支撐。
因此,發(fā)布小游戲的時候我們便提供了一套更完整的文件管理系統(tǒng): FileSystemManager,其中主要包含了目錄管理、文件內(nèi)容讀寫等能力。
一、 文件系統(tǒng)的設(shè)計背景
文件系統(tǒng)能力是應(yīng)小游戲開發(fā)需求的迭代而逐步增強的。在小程序的場景下,很多時候只是需要把一個圖片或視頻資源緩存起來便可繼續(xù)使用,文件內(nèi)容與文件存儲的目錄結(jié)構(gòu)都不是開發(fā)者所關(guān)心的。
但是在小游戲場景下情況則不同——
一方面,小游戲除了有圖片和視頻文件、還有游戲引擎生成的配置文件,游戲需要能夠去讀取并理解配置文件的具體內(nèi)容;另一方面,游戲使用的資源文件會比普通小程序更多,若沒有內(nèi)容目錄管理的功能,維護成本會變高。除此之外,由于小游戲代碼包大小限制只有4MB (加上分包最多8MB),對于一些偏重的游戲,資源甚至容易超100MB。
因此在此大背景下,我們給文件系統(tǒng)主要增加了目錄管理、文件內(nèi)容讀寫等兩項接口——
目錄管理的需求場景是在使用游戲引擎時需要按目錄來管理資源文件,文件內(nèi)容讀寫的需求場景是在使用游戲引擎時需要讀取配置文件;同時,我們對小游戲類目的本地存儲容量的規(guī)范限制擴容到50MB。
開發(fā)者可能會疑惑,為什么在小程序的文件系統(tǒng)中會有一些功能相接近的接口?例如,想緩存一個文件,可以用 saveFile 或 copyFile ;再比如 removeSavedFile 和 unlink 都可以用來刪除一個文件。
上述情況的原因是我們在早期便提供了基礎(chǔ)的文件存儲接口 saveFile 和removeFile ,但不提供自定義目錄相關(guān)的能力,開發(fā)者調(diào)用 saveFile 之后只能得到微信返回到的一個隨機文件名。
小游戲應(yīng)運而生的同時也增強了對文件系統(tǒng)能力擴展的需求,為了保證向后兼容,我們保留了這批基礎(chǔ)接口,并在這個基礎(chǔ)上增加了目錄管理接口以及對應(yīng)的文件操作接口。因此,便出現(xiàn)了上述一些相似接口的情況。
二、 文件系統(tǒng)的優(yōu)勢—存儲隔離
有不少開發(fā)者詢問過關(guān)于文件存儲的問題,他們擔(dān)心文件內(nèi)容被其他小程序讀取到,也擔(dān)心多個登錄用戶之間的文件內(nèi)容會互相影響。為了保證用戶的隱私安全,也為了保證小程序的數(shù)據(jù)安全,本地文件存儲的一個重要規(guī)則便是保證隔離。
文件被存儲到本地后,會以小程序賬號和用戶賬號兩個不同的維度來區(qū)分和隔離。即:同個微信用戶使用不同小程序之間的文件存儲會互相隔離;不同微信用戶(在同一臺手機中)使用同個小程序時,不同用戶間的文件存儲也會互相隔離。
三、 適當?shù)拇鎯θ萘?span>
考慮到存儲的問題,我們規(guī)范了小游戲文件存儲的容量。普通小程序是10MB,小游戲則是50MB,當文件存儲超出限制時,寫入的文件會失敗。
功能上線以后,我們曾收到過若干寶貴意見與反饋,希望能提高容量限制。但在經(jīng)過反復(fù)論證與評估后,我們認為如果將文件存儲的容量再往上提,就會有用戶新增需要管理或清理手機存儲空間的需求,小程序和小游戲?qū)兊貌辉?span>“小”了。對于資源文件超過上述標準限制的小程序與小游戲,應(yīng)該合理地管理本地文件,及時清理不常用的文件,這樣在大多數(shù)情況下,手機存儲空間便能保證順暢。
更多關(guān)于小程序文件系統(tǒng)能力的信息,可查閱接口文檔(https://developers.weixin.qq.com/minigame/dev/tutorial/ability/file-system.html) 。
本文并非原創(chuàng),原文來自于公眾號微信開發(fā)者,作者link