Hier erfahren Sie, wie Adobe es geschafft hat, dass Nutzer selbst die größten Dateien in der Webversion der bekannten Photoshop-App bearbeiten können.
Einführung
(Dieser Artikel ist auch als Video verfügbar.)
2021 hat Adobe gemeinsam mit dem Chrome-Entwicklungsteam eine Version von Photoshop für das Web entwickelt. Die Software nutzt WebAssembly auf innovative Weise mit Funktionen wie SIMD, leistungsstarkem Speicher im ursprungsbezogenen privaten Dateisystem, dem P3-Farbraum für Canvas und Webkomponenten mit Lit. In diesem Artikel möchten wir uns darauf konzentrieren, wie die Entwickler von Adobe Photoshop das Problem gelöst haben, mit Dateien zu arbeiten, die größer sind als der verfügbare Arbeitsspeicher. Und im Fall von WebAssembly wird beschrieben, 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 benötigen oft mehr Speicherplatz, als ein Nutzer auf seinem Gerät zur Verfügung hat. Das liegt an den vielen Funktionen der Software, den Arten von digitalem Design und Bearbeitung, für die sie verwendet wird, und den Funktionen der Nutzergeräte.
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 benötigte Arbeitsspeicher um ein Vielfaches höher sein als der Speicherplatz, den ein Dokument auf der Festplatte oder im Cloud-Speicher belegt.
Photoshop unterstützt einen sehr großen Rückgängig-Verlauf. Viele Vorgänge in Photoshop sind sogenannte destruktive Vorgänge. Wenn Sie beispielsweise mit einem Pinsel malen, werden neue Pixeldaten erstellt, die genauso groß wie die ursprünglichen Pixeldaten sein können. Wenn Sie diese Änderungen in einer langen Bearbeitungssitzung vornehmen, fallen große Mengen an Pixeldaten an, die für die Unterstützung von Rückgängig-Vorgängen gespeichert werden müssen. Daher kann der Verlauf mehrere Hundert Megabyte oder viele Gigabyte an Daten umfassen.
Geräte und Plattformen, sei es Computer, Mobilgeräte oder Browser, verwalten alle den Arbeitsspeicher. Einige sind großzügiger als andere, was die Menge an Speicherplatz angeht, die sie Anwendungen zur Verfügung stellen. Die Menge an Arbeitsspeicher 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 an Arbeitsspeicher (RAM) angeben. Viele dieser Plattformen unterstützen auch virtuellen Speicher, sodass eine Anwendung mehr Speicher verwenden kann, als physisch verfügbar ist. Diese Unterstützung variiert je nach Betriebssystem und Laufzeit. Im Fall von WebAssembly ist sie möglicherweise nicht ohne Weiteres für Anwendungen zugänglich oder nutzbar. Darüber hinaus haben moderne virtuelle Systeme Obergrenzen, die durch die Anforderungen von Photoshop leicht überschritten werden.
Im Idealfall würden Anwendungen nur so viel Arbeitsspeicher verwenden, wie sie benötigen. So können sie ihren Nutzern in der Regel die beste Leistung bieten. Wenn sie jedoch zu viel Arbeitsspeicher verwenden, werden sie möglicherweise von der Laufzeitplattform bestraft oder es kann zu Arbeitsspeichermangel kommen, was zu Fehlern führt.
Zur Information: Das ursprüngliche Problem, das Photoshop lösen musste, war die Bearbeitung von Dateien mit Druckauflösung auf frühen Versionen von macOS, die nur 1 MB für das Betriebssystem und alle Anwendungen hatten. Ein 300‑dpi-Bild im CMYK-Farbmodell, das eine ganze Seite einnimmt, ist unkomprimiert etwa 32 MB groß.
Die Lösung
Um das Problem zu beheben, dass die App den verfügbaren RAM überschreitet, hat Photoshop ein Software-VM-System (Virtual Memory) implementiert. Photoshop verwendet die VM, um Dokumentdaten, insbesondere Bilddaten, den gesamten Rückgängig-Verlauf und -Status sowie den Arbeitsspeicher für den aktuellen Befehl zu verwalten. Sie wird auch zum Zwischenspeichern großer Datenblöcke wie Pinselbeschreibungen verwendet, sodass sie nur einmal vom Datenträger serialisiert werden müssen.
Ein Beispiel für einen Aspekt, der von der VM verwaltet wird, ist die Speicherung von Bilddaten in einer Mipmap-Darstellung. Dabei handelt es sich um eine pyramidenförmige Menge von Kacheln, die Bilddaten in einem Bereich von niedriger bis hoher Auflösung bereitstellen. So kann Photoshop mit den Daten in der richtigen Auflösung arbeiten und schneller reagieren, wenn Sie hineingezoomt sind oder eine Vorschau ansehen, als wenn Sie herausgezoomt sind.
Bei der Initialisierung der Anwendung ermittelt Photoshop, wie viel RAM verfügbar ist. Ein Teil wird 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 VM-Arbeitsspeicher ist in Seiten unterteilt. Jede Seite ist in der Regel ein Vielfaches der Hardware-Seitengröße für das Gerät. Bei Bilddaten wird der Speicher als Kacheln bezeichnet. Eine Kachel ist ein quadratischer Bereich mit Pixeln einer einzelnen Ebene, einschließlich der Geometriegrenzen. Eine Kachel belegt eine oder mehrere Seiten.
Photoshop erstellt eine oder mehrere temporäre Dateien, um VM-Seiten auf der Festplatte zu sichern. Diese Scratch-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 temporäre Dateien erstellt. Wenn Seiten freigegeben werden, kann ihr Speicherplatz in einer Scratch-Datei für neue Seiten wiederverwendet werden.
Bei der Verarbeitung von Bilddaten durchläuft Photoshop Kacheln und führt Pixelberechnungen durch. Jede Berechnung kann auf mehrere Kacheln verweisen. Die VM ist dafür verantwortlich, dass Quell- und Zielkacheln für die aktuelle Iteration im Arbeitsspeicher sind. Bei Bedarf werden sie aus Scratch-Dateien geladen. Gleichzeitig können Seiten in die Scratch-Dateien geschrieben werden, um Speicherplatz freizugeben.
Zusammenfassung
Die konkreten Implementierungsdetails der VM würden den Rahmen dieses Dokuments sprengen und sind außerdem proprietär für Adobe. Mit der allgemeinen Beschreibung der Lösung haben wir Ihnen jedoch die Möglichkeit gegeben, zu verstehen, wie Photoshop mit großen Dateien umgehen kann. Das private Dateisystem des Ursprungs mit seinem leistungsstarken Lese- und Schreibzugriff auf Dateien ist eine Schlüsselkomponente der Lösung.
Danksagungen
Dieser Blogbeitrag wurde von Oliver Unter Ecker und Rachel Andrew geprüft. Besonderer Dank gilt Russell Williams für seine hervorragende Dokumentation zur Photoshop-VM.