Hier erfahren Sie, wie es Adobe gelungen ist, Nutzern die Bearbeitung selbst der größten Dateien in der Webversion der legendären Photoshop-App zu ermöglichen.
Einführung
(Dieser Artikel ist auch als Video verfügbar.)
2021 hat Adobe gemeinsam mit dem Chrome-Entwicklungsteam eine Version von Photoshop im Web veröffentlicht. Die Software nutzt WebAssembly innovativ mit Funktionen wie SIMD, Hochleistungsspeicher im origin private file system, dem P3-Farbraum für Canvas und Webkomponenten mit Lit. In diesem Artikel möchten wir uns darauf konzentrieren, wie das Entwicklungsteam von Adobe Photoshop das Problem gelöst hat, mit Dateien zu arbeiten, die größer sind als der Arbeitsspeicher. Und im Fall von WebAssembly, wie Photoshop mit Dateien arbeitet, die größer als der 32-Bit-Adressraum von wasm32 sind.
Das Problem
Das Öffnen einer Datei zur Bearbeitung erfordert viel Arbeitsspeicher, deutlich mehr als das Öffnen einer Datei zur Ansicht. Die in Photoshop bearbeiteten Dateien erfordern aufgrund der vielen Funktionen der Software, der Arten von digitalem Design und der Bearbeitung, für die sie verwendet wird, sowie der Funktionen der Nutzergeräte oft mehr Arbeitsspeicher als auf dem Gerät verfügbar ist.
Im Photoshop-Dateiformat werden Daten mit verlustfreier Komprimierung gespeichert. Wenn eine Datei oder ein Dokument gelesen wird, werden alle Bilddaten dekomprimiert, um eine effizientere Verarbeitung zu ermöglichen. Daher kann der erforderliche Arbeitsspeicher um ein Vielfaches größer sein als der Speicherplatz, den ein Dokument auf dem Laufwerk oder im Cloud-Speicher belegt.
Photoshop unterstützt einen sehr großen Undo-Verlauf. Viele Vorgänge in Photoshop sind sogenannte zerstörerische Vorgänge. Das bedeutet, dass durch eine Bearbeitung wie das Malen mit einem Pinsel neue Pixeldaten entstehen, die genauso groß sein können wie die ursprünglichen Pixeldaten. Wenn Sie diese Änderungen in einer langen Bearbeitungssitzung vornehmen, entstehen große Mengen an Pixeldaten, die für rückgängige Aktionen gespeichert werden müssen. So kann der Verlauf auf mehrere hundert Megabyte oder viele Gigabyte anwachsen.
Geräte und Plattformen, ob Computer, Mobilgeräte oder Browser, verwalten den Arbeitsspeicher. Einige sind großzügiger als andere, was die Menge des für Anwendungen verfügbaren Arbeitsspeichers angeht. Die Speichermenge variiert auch von Gerät zu Gerät, wie Sie wissen, wenn Sie einen neuen Computer oder ein neues Gerät bestellen und die gewünschte Menge Random-Access Memory (RAM) angeben. Viele dieser Plattformen unterstützen auch virtuellen Arbeitsspeicher, wodurch eine Anwendung mehr Arbeitsspeicher nutzen kann, als physisch verfügbar ist. Diese Unterstützung variiert je nach Betriebssystem und Laufzeit. Wie bei WebAssembly ist sie möglicherweise nicht für alle Anwendungen zugänglich oder nutzbar. Außerdem haben moderne virtuelle Systeme Obergrenzen, die von den Photoshop-Anforderungen leicht überschritten werden.
Idealerweise sollten Anwendungen so viel Arbeitsspeicher wie nötig nutzen. So können sie ihren Nutzern in der Regel die beste Leistung bieten. Wenn sie jedoch zu viel Arbeitsspeicher verbrauchen, werden sie möglicherweise von der Laufzeitplattform bestraft oder der Arbeitsspeicher geht zur Neige, was zu Fehlern führt.
Das ursprüngliche Problem, das Photoshop lösen musste, war die Bearbeitung von Dateien mit Druckauflösung in frühen Versionen von macOS, die nur 1 MB für das Betriebssystem und alle Anwendungen hatten. Ein Vollseitenbild mit 300 dpi im CMYK-Farbmodus hat unkomprimiert eine Größe von etwa 32 MB.
Die Lösung
Um das Problem zu beheben, dass die App den verfügbaren RAM überschreitet, wurde in Photoshop ein virtuelles Arbeitsspeichersystem (VM) implementiert. Photoshop verwendet die VM, um Dokumentdaten, insbesondere Bilddaten, den gesamten Rückgängig-Verlauf und den Status sowie den Arbeitsspeicher für den aktuellen Befehl zu verwalten. Außerdem wird es zum Caching großer Datenblöcke wie Pinselbeschreibungen verwendet, sodass sie nur einmal von der Festplatte serialisiert werden müssen.
Als Beispiel für einen der von der VM verwalteten Aspekte werden Bilddaten mit einer Mipmap-Darstellung gespeichert. Dabei handelt es sich um eine pyramidenförmige Anordnung von Kacheln, die Bilddaten in einer Vielzahl von niedrigen bis hohen Auflösungen bereitstellen. So kann Photoshop mit den entsprechenden Auflösungsdaten arbeiten, um bei herangezoomtem Bild oder in der Vorschau schneller zu reagieren als bei herausgezoomtem Bild.
Während der Anwendungsinitialisierung ermittelt Photoshop, wie viel RAM verfügbar ist. Dabei wird ein Teil für Daten reserviert, die in der VM gespeichert werden sollen. Der verbleibende RAM ist über die Standard-C++-Laufzeitbibliothek für andere Anwendungsanforderungen verfügbar. Der Arbeitsspeicher der VM ist in Seiten unterteilt. Jede Seite ist in der Regel ein Vielfaches der Hardware-Seitengröße des Geräts. Bei der Verwendung für Bilddaten wird auf den Arbeitsspeicher als Kacheln verwiesen. Eine Kachel ist ein quadratischer Pixelbereich einer einzelnen Ebene, einschließlich der Geometriegrenzen. Eine Kachel belegt eine oder mehrere Seiten.
Photoshop erstellt eine oder mehrere Auslagerungsdateien, um eine laufwerkbasierte Sicherung für VM-Seiten bereitzustellen. Diese temporären Dateien werden im privaten Dateisystem des Ursprungs gespeichert. Der Screenshot zeigt eine beispielhafte Dateihierarchie einer solchen temporären Datei (gelb hervorgehoben) und anderer Dateien während einer Bildbearbeitungssitzung. Jede Scratch-Datei kann viele VM-Seiten enthalten. Wenn die VM mehr Unterstützung benötigt, werden zusätzliche Auslagerungsdateien erstellt. Wenn Seiten freigegeben werden, kann ihr Speicherplatz in einer Auslagerungsdatei für neue Seiten wiederverwendet werden.
Bei der Verarbeitung von Bilddaten durchläuft Photoshop die Kacheln und führt Pixelberechnungen durch. Jede Berechnung kann auf mehrere Kacheln verweisen. Die VM ist dafür verantwortlich, dass sich die Quell- und Zielkacheln für die aktuelle Iteration im Arbeitsspeicher befinden. Sie werden bei Bedarf aus Scratch-Dateien geladen. Gleichzeitig kann er Seiten in die Auslagerungsdateien auslagern, um Speicherplatz freizugeben.
Ergebnisse
Die konkreten Implementierungsdetails der VM würden den Rahmen dieses Dokuments sprengen (und sind außerdem urheberrechtlich geschützt). Mit der allgemeinen Beschreibung der Lösung können Sie jedoch nachvollziehen, wie Photoshop mit großen Dateien umgehen kann. Das private Quelldateisystem mit seinem hochleistungsfähigen Lese- und Schreibzugriff auf Dateien ist eine Schlüsselkomponente der Lösung.
Danksagungen
Dieser Blogpost wurde von Oliver Unter Ecker und Rachel Andrew geprüft. Besonderer Dank geht an Russell Williams für seine hervorragende Dokumentation zur Photoshop-VM.