在Transformers.js中試驗提出的跨域儲存API
本文介紹了跨域儲存(COS)API提案,該API允許Web應用跨域共享大型檔案(如AI模型和Wasm執行時),透過加密雜湊而非URL標識檔案,從而避免重複下載和儲存。文章以Transformers.js為例,展示了當前瀏覽器快取隔離導致的問題,以及COS如何透過雜湊標識、可升級的訪問控制和安全完整性檢查來解決這些問題。
在Web開發中,Transformers.js庫讓開發者能夠透過任務特定的管道輕鬆在Web應用中使用Transformer模型。例如,建立自動語音識別(ASR)管道只需幾行程式碼。然而,當多個不同來源的Web應用使用相同的AI模型或Wasm執行時檔案時,瀏覽器會因快取隔離而重複下載和儲存這些資源,造成頻寬和儲存浪費。
Chrome等瀏覽器透過網路隔離鍵(由頂級站點和當前框架站點組成)來隔離快取,即使資源URL完全相同也不會命中快取。這意味著,如果兩個不同來源的應用都使用同一份Wasm執行時檔案,每個應用都必須獨立下載和快取。例如,一個簡單的ASR模型(Xenova/whisper-tiny.en)在跨域時會導致177 MB的重複下載。更糟糕的是,即使是不同的AI模型,如果它們共享相同的Wasm執行時(如4.7 MB的ort-wasm-simd-threaded.asyncify.wasm),也會被重複下載和快取。
為此,有人提出了跨域儲存(COS)API。該API引入navigator.crossOriginStorage介面,允許應用透過加密雜湊而非URL標識檔案,實現跨域共享。當應用需要資源時,先嚐試透過雜湊從COS中獲取;若失敗,則從網路下載並寫入COS供後續使用。由於雜湊相同,不同來源的應用可以共享同一份快取。
COS還提供了精細的訪問控制:origins: '*'表示全域性共享;指定具體源列表則限制訪問;省略origins則僅同站點可用。訪問許可權只能升級(從限制到開放),不能降級,以防止惡意篡改。另外,寫入檔案時瀏覽器會自動驗證雜湊是否匹配,確保資料的完整性。
儘管COS目前仍處於早期提案階段,尚未被任何瀏覽器原生實現,但開發者可以透過安裝官方擴充套件來注入polyfill進行實驗。該API的潛力在於解決AI模型和Wasm執行時等大型資源的跨域重複快取問題,提高Web應用的效能和儲存效率。