Photoshop er kommet til browseren
I den seneste triumf for Webassembly-teknologien er billedbehandlingsprogrammet Photoshop ankommet til browseren.
Indtil videre er der tale om en beta-version, og der er endnu ikke adgang for alle.
Adobe, der er firmaet bag Photoshop, har tidligere skabt webudgaver af programmer som Spark og Lightroom. Det har været med udgangspunkt i Javascript.
Men Photoshop er et stort program med mange linjers kode, skrevet i C++. Webassembly-teknologien og værktøjet Emscripten har været nøglen til få Photoshop i browseren. Det skriver Nabeel Al-Shamma fra Adobe og Thomas Nattestad fra Google i et blogindlæg.
Webassembly er en browserstandard for bytekode og en tilhørende virtuel maskine, som kan afvikles lige godt i alle de fire store browsere. Værktøjet Emscripten benytter compileren LLVM til at oversætte C++ til Webassembly-kode.
Disse muligheder betød, at Adobe ikke skulle starte fra bunden, men kunne udnytte den eksisterende Photoshop-kodebase.
Emscripten kan også oversætte POSIX api-kald, som er en standard for styresystemer, til tilsvarende web-api’er. Værktøjet oversætter tillige grafikkode skrevet til standarden Opengl til browserens Webgl. Det er også muligt at flytte programmer, der benytter et lokalt filsystem. Emscripten skaber ganske simpelt emuleret filsystem, så funktionaliteten bibeholdes.
Flaskehalse
Der var dog nogle knaster på vejen. Den kode, Emscripten producerede, var ikke hurtig nok, så Google samarbejde med Adobe om at fjerne flaskehalse, samt introduktion af dynamiske tråde, som er et kritisk krav i Photoshop.
Håndtering af exceptions i C++ var heller ikke godt understøttet i Webassembly, og her har parterne arbejdet med Webassembly Community Group, som er en gruppe under World Wide Web-konsortiet, for at få denne mulighed med i standarden.
Webassembly har dog også nogle tricks til at øge ydelsen, så som SIMD-instruktioner. SIMD (Single Instruction Multiple Data) giver mulighed for at enkelte tal i en vektor alle kan beregnes med samme operationer sideløbende i såkaldte hardwaredefinerede vektorbaner på CPU’en. Det benytter Adobe i grafiksproget Halide, som indlejres i C++ og giver mulighed for ydelsesforbedringer på en faktor tre til fire i de fleste tilfælde, og i nogle tilfælde helt op til en faktor 160.
Adgang til det lokale filsystem
Photoshop-filer kan være kæmpestore i omfang, og derfor er det kritisk, at programmet kan flytte data fra disk til hukommelse, mens brugeren panorerer rundt i billedet. På de sædvanlige platforme gøres det med ‘hukommelsesmapping’, hvor styresystemet håndterer korrespondancen mellem disk og hukommelse, så programkoden ikke skal tænke på det, men kan spole vilkårligt frem og tilbage i filen.
Det har ikke tidligere været muligt på web, men nu kan webapps tilgå filer på brugerens lokale system med et nyt api.
Farver på webbet har traditionelt benyttet modellen Srgb, men Photoshop på nettet benytter Display P3 Canvas, som skulle give en mere troværdig farvegengivelse. På sigt skal api’et udvides til også at håndtere HDR-skærme.
Brugerflade-komponenterne i webversionen af Photoshop benytter biblioteket Lit, som bygger oven på standarden Web Components, sammen med et par ‘øer’ af React-komponenter.
I forbindelse med projektet har holdet bag Chrome udviklet fuld understøttelse af Webassembly-debugging, med trinvis gennemløb af koden, breakpoints og evaluering af udtryk.
Adobe har ikke tænkt sig at stoppe ved Photoshop. Firmaets ambition er at bringe hele porteføljen af programmer til webbet, skriver de to udviklere.
