OPFS 不在使用者的檔案系統裡,所以快,也所以找不到
一句話:OPFS 的檔案不會進到使用者的檔案系統。 往一邊推是「所以它快」,往另一邊推是「所以你在 Finder 裡找不到它」——兩個結論同一個根。
對照組:一般檔案為什麼慢
網頁透過 File System Access API(showOpenFilePicker() 那組)碰到的檔案,位於使用者自己的檔案系統——桌面、下載、Documents,Finder 打得開、可以拖給別的 app、可以寄給別人。
因為那是使用者的檔案,瀏覽器和 OS 就必須保護他,於是有三道機制:
| 機制 | 做什麼 |
|---|---|
| OS 的網路來源標記(Mark of the Web) | 從網路存下來的檔案會被標記,執行前多跳一次警告 |
| Safe Browsing | 原文的比喻是「雲端病毒掃描」 |
| 不就地寫入 | 寫檔時先寫暫存檔,通過所有安全檢查之後才換掉原檔 |
而且每個 write() 都是獨立的——幕後要開啟檔案、seek 到 offset、才寫入。原文的結論:在 macOS 上,檔案作業的速度仍相對緩慢。
OPFS 的快,是「不用做那三件事」
不是用了什麼黑魔法:不用透過 OS 確認檔案、不用經過 Safe Browsing、不用先寫暫存檔再換回原檔。
它能全部跳過,是因為那根本不是使用者的檔案,是網頁的。原文把這件事講得很直白:
由於使用者看不到 OPFS,因此不會出現權限提示,也不會進行 Safe Browsing 檢查。
但「看不到」不等於「沒落到磁碟」
這是最容易誤會的一半:
瀏覽器會將 OPFS 的內容持久化儲存到磁碟的某個地方,但你無法期望找到一對一對應的已建立檔案。OPFS 本來就不是設計成讓使用者看見的。(MDN)
所以:
- 資料確實寫在硬碟上——這有法遵含意,見 OPFS sync access handle 讓 SQLite 能在瀏覽器只讀用得到的 page
- 但連「一個 OPFS 檔案 = 一個真實檔案」都不能假設,瀏覽器怎麼擺是它的自由
「private」的意思是「對其他網站私有、對使用者不可瀏覽」,不是「不落地」。
要看裡面有什麼,只能問瀏覽器——見 怎麼查 OPFS 裡有哪些檔案。