瞭解 Adobe 如何讓使用者在其經典 Photoshop 應用程式的網頁版上編輯大型檔案。
簡介
(這篇文章也有影片版本)。
2021 年,Adobe 與 Chrome 工程團隊合作,將 Photoshop 帶到網路上。這款軟體採用創新的 WebAssembly 用法,包括 SIMD、原始私人檔案系統中的高效能儲存空間、用於畫布的 P3 色彩空間,以及採用 Lit 的 Web 元件。在本文中,我們將著重於說明 Adobe Photoshop 工程師如何解決處理記憶體無法容納的大型檔案問題。在 WebAssembly 的情況下,Photoshop 如何處理大於 wasm32 的 32 位元位址空間檔案。
問題
開啟檔案進行編輯需要大量記憶體,遠超過開啟檔案進行查看所需的記憶體。由於 Photoshop 提供多種功能、用於數位設計和編輯的類型,以及使用者裝置的功能,因此在 Photoshop 中編輯的檔案通常需要的記憶體會超過使用者裝置的可用記憶體。
Photoshop 檔案格式會以無損壓縮方式儲存資料。讀取檔案或文件時,系統會解壓縮所有圖片資料,以便更有效率地處理。因此,所需記憶體量可能會比文件在磁碟或雲端儲存空間中使用的空間多出好幾倍。
Photoshop 支援非常大量的取消動作記錄。Photoshop 中的許多作業都是所謂的破壞性作業。也就是說,如果您進行編輯,例如使用筆刷繪圖,所產生的像素資料可能會與原始像素資料一樣大。在長時間的編輯工作階段中進行這些編輯作業,會產生大量像素資料,必須保留這些資料才能支援取消作業。因此,記錄可能會累積到數百 MB 或數 GB 的資料。
無論是電腦、行動裝置或瀏覽器,所有裝置和平台都會管理記憶體。有些裝置會比其他裝置提供更多記憶體給應用程式。記憶體容量也會因裝置而異,因為您在訂購新電腦或裝置時,會指定所需的 隨機存取記憶體 (RAM) 容量。這些平台中,許多也支援虛擬記憶體,可讓應用程式使用比實體可用記憶體更多的記憶體。這項支援功能會因作業系統和執行階段而異,例如 WebAssembly 可能無法輕易存取或供應用程式使用。此外,現代虛擬系統的上限很容易超過 Photoshop 的要求。
理想情況下,應用程式會使用所需的記憶體量。這通常可讓他們為使用者提供最佳效能。不過,如果使用過多記憶體,可能會遭到執行階段平台處罰,或耗盡記憶體,導致失敗。
在歷史上,Photoshop 需要解決的問題是,在早期 macOS 版本中編輯沖印解析度檔案,作業系統和所有應用程式的大小低至 1 MB。未壓縮的 CMYK 300 dpi 全頁圖片大約為 32 MB。
解決方案
為解決應用程式超出可用 RAM 容量的問題,Photoshop 實作了軟體虛擬記憶體系統 (VM)。Photoshop 會使用 VM 管理文件資料 (尤其是圖片資料)、所有復原記錄和狀態,以及目前指令的工作儲存空間。它也用於快取大型資料區塊 (例如筆刷說明),因此只需要從磁碟序列化一次。
舉例來說,VM 會以 Mipmap 表示法儲存圖片資料,這是一組以金字塔為基礎的圖塊,可提供低至高解析度的圖片資料。這樣一來,Photoshop 就能處理適當的解析度資料,在放大或查看預覽畫面時,回應速度會比縮小畫面時更快。
在應用程式初始化期間,Photoshop 會判斷可用的 RAM 容量。它會將一部分空間留給儲存在 VM 中的資料。透過標準 C++ 執行階段程式庫,可將剩餘的 RAM 用於其他應用程式需求。VM 記憶體可分割成多個「頁面」。每個頁面通常是裝置硬體頁面大小的倍數。用於圖片資料時,記憶體會以圖塊形式參照。圖塊是單一圖層的方形像素區域,包括幾何圖形邊界。資訊方塊會使用一或多個頁面。
Photoshop 會建立一或多個暫存檔案,為 VM 頁面提供磁碟式備份。這些暫存檔會儲存在原始私人檔案系統中。螢幕截圖顯示這類暫存檔案 (以黃色標示) 和其他檔案的檔案階層示例,這些檔案是在圖片編輯工作階段中產生。每個暫存檔案可包含多個 VM 頁面。當 VM 需要更多備份時,就會建立額外的暫存檔案。釋放頁面後,系統可將其在暫存檔案中的空間重複使用於新頁面。
處理圖像資料時,Photoshop 會重複執行圖塊,執行像素計算。每個計算都可參照多個資訊方塊。VM 負責確保目前迭代的來源和目的地圖塊位於記憶體中,並視需要從暫存檔案載入這些圖塊。同時,它可以將頁面刷到暫存檔案,以騰出記憶體空間。
結論
雖然 VM 的具體實作細節超出本文件的範圍 (且屬於 Adobe 專屬),但我們會提供解決方案的概略說明,讓您瞭解 Photoshop 如何處理大型檔案。原始私人檔案系統具有高效的檔案讀取和寫入權限,是解決方案的重要元件。
特別銘謝
這篇網誌文章由 Oliver Unter Ecker 和 Rachel Andrew 審查。特別感謝 Russell Williams 提供 Photoshop VM 的優異說明文件。