I vad som får betraktas som ännu ett byte av tema för den här bloggen tänker jag nörda ner mig lite i hur webben utvecklats och kommer att utvecklas framöver. Introduktionen är avsiktligt förenklad för att även icke-webbutvecklare ska hänga med, du som vet vad jag skriver om kan hoppa till tredje rubriken.
Webben – en väldigt inexakt skapelse
I begynnelsen fanns HTML. Ja, det fanns saker innan dess som kunde ses som förstadier till det Internet vi använder i dag men grundprincipen var att du kunde skapa dokument, lägga dem på en server någonstans och så kunde andra se dem vart i världen de än befann sig (givet en internetanslutning, långt ifrån en självklarhet då). Dokumenten kunde dessutom länka till varandra och ges praktiska adresser som var lätta att dela med sig av. Revolutionerande! Fram tills dess hade information i digitalt format paketerats och distribuerats på fysiska medier som CD-ROM, omöjliga att uppdatera i efterhand om än med goda möjligheter till multimedia och interaktivitet. Webben var i jämförelse ganska trist och statisk, om än distribuerad och uppdaterbar.
Så småningom insåg man att interaktivitet ändå är rätt trevligt och började leta efter sätt att kapsla in mer traditionella appar (då helt enkelt program du laddade ner och körde i datorn) i webbläsarens praktiska distributionsmodell. Resultatet blev Java-applets, Flash, ActiveX, Silverlight och säkert några som jag har glömt bort. Dessa var behäftade med oerhörda problem, främst säkerhet, usla prestanda och dålig kompatibilitet. Det var svårt nog att försäkra sig om att en webbsida funkade oavsett användarens webbläsare, för att inte tala om andra faktorer som operativsystem, skärmupplösning eller språk – Flash med vänner lade till en ytterligare nivå av huvudvärk. Under en tid rådde någorlunda stabilitet, när Internet Explorer hade ~95% av marknaden. Den rämnade (och tur var väl det) när alternativen började sno åt sig delar av kakan.
Under större delen av den här tidsperioden fanns också JavaScript, ett fruktansvärt fult missfoster till programmeringsspråk som en sönderstressad kodare hade tvingat in i Netscape (en webbläsare som lyckades med konststycket att vara sämre än IE) för att ge webbdesigners ett enkelt sätt att ge webbsidor viss interaktivitet utan att vara beroende av Flash eller andra tillägg. Dock var det ingen som tog JavaScript på allvar eftersom det som sagt var ett äckligt fulhack, knappt ens värt att betrakta som ett riktigt programmeringsspråk, och webbdesigners var inte utvecklare. Säkert fanns det också ondskefulla genier som tyckte att det vore allra bäst om dessa jobbiga öppna standarder försvann till förmån för deras egna proprietära språk och verktyg, som ActiveX.
Ett annat sätt att bringa interaktivitet till den statiska webben var att dynamiskt generera innehåll på servern, så att det användaren såg i sin webbläsare var uppbyggt av programkod istället för ett statiskt dokument. Detta medförde stora fördelar – man kunde koda i ett riktigt(?) programmeringsspråk. Man kunde göra tunga beräkningar och bara skicka över resultatet, vilket sparade bandbredd. Tyvärr blev interaktionerna långsamma och osmidiga eftersom varenda anrop var tvunget att gå över nätet. Verktyg för att göra asynkrona anrop mildrade smärtan en aning, men inget kunde mäta sig med en vanlig hederlig app som du laddade ned till din dator eller telefon i fråga om användarupplevelse.
Apple anfaller
Alla förespråkare av Java-applets, Flash, ActiveX osv fick sig en rejäl käftsmäll när Apple plötsligt övertygade hela världen om att de skulle köpa iPhones. Inte för att Apple på något sätt var först med idén, men först att implementera och marknadsföra den på ett sätt som var attraktivt för icke-nördar. Apple hade absolut noll till övers för proprietära tillägg (åtminstone sådana som inte var deras egna) och Android, då god tvåa, följde snart efter. Desperata webbutvecklare började leta efter alternativ, för att gå tillbaka till den gamla världen av statiska webbsidor med begränsad interaktivitet var inte något alternativ.
Räddningen blev JavaScript. Fortfarande oälskat och fult men nu spacklat med flera tjocka lager smink så medgav det trots allt att göra webbsidor interaktiva, på ett sätt som (efter visst trilskande) fungerade på alla plattformar som hade en webbläsare. Initialt med så stora skillnader att det blev en hel utvecklingsdisciplin att hålla reda på vad som fungerade var, men tekniken mognade så sakteliga och det blev möjligt att göra webbsidor nästan lika användbara som riktiga appar.
Nästan? Ja, för låt oss komma ihåg att webben bestod av en teknisk plattform som ursprungligen tagits fram för att visa statiska dokument med länkar mellan varandra. Ovanpå detta lades fulhacket JavaScript för att ge en väldigt begränsad nivå av interaktivitet. Alternativet var appar för iOS, Android, Windows m fl vilka var byggda med välkonstruerade och ändamålsenliga verktyg och ramverk. Webben behövde komma ifatt mer än 20 års försprång. Resultatet blev en fullständigt halsbrytande utvecklingstakt av ramverk och påbyggnader till JavaScript, med lustiga men intetsägande namn som Scriptaculous, Bootstrap, Angular och React. Denna utveckling pågår än idag, varför man kan höra utvecklare prata om “JavaScript framework of the week” helt oironiskt.
Webappen är död, länge leve den
Idén att koda “appar” som webbsidor med JavaScript föddes tidigt – det funkade ju överallt, så därmed skulle man ju slippa bygga en app för varje operativsystem på marknaden – men konceptet fick ingen vidare dragkraft på grund av språkets stora inneboende brister i kombination med dåliga prestanda på smartphones och det faktum att användarna helt enkelt genomskådade illusionen. En webbsida maskerad till app betedde sig fortfarande inte som man förväntade sig att en app skulle göra. Apparnas försprång var mindre, men det fanns likafullt kvar.
På senare tid har emellertid flera saker hänt som tyder på att webappen kan vara på väg att göra en återkomst:
- WebAssembly samt språk som TypeScript och Dart vilka har potential att på sikt ersätta JavaScript som det förhärskande språket för webbutveckling
- Mycket högre prestanda på smartphones vilket gör prestandaskillnaden mellan appar och webbsidor betydligt mindre
- Single Page (Web) Apps, s k SPA, vilka eliminerar många av webbens svagheter som applikationsplattform
Låt oss ta dessa var för sig. JavaScript har utvecklats rejält sedan sitt enkla ursprung, men dess brister får ännu många att välja bort det. Flera försök har gjorts att ersätta JavaScript men utan större framgång – ingen konkurrent har någon chans så länge man inte fungerar på i princip alla plattformar, datorer som smartphones, där JavaScript finns idag. I dag heter lösningen på detta transpiling – skriv kod i ett annat språk, låt ett program maskinöversätta den till korrekt JavaScript. I morgon heter lösningen WebAssembly, som på sikt kommer att låta maskinkod köra direkt i webbläsaren – behovet av JavaScript försvinner helt.
Prestanda hos smartphones förbättras kontinuerligt och är redan betydligt bättre än de datorer vi använde för några år sedan. Även om webbläsaren som en webapp behöver för att “bo” inuti fortfarande medför en del overhead är skillnaden i praktiken inte så stor. Layout och animationer blir lika mjuka och fina som i en vanlig app. Därmed kan man ge en fullgod användarupplevelse från en webbsida.
Sist men inte minst finns en växande trend mot att bygga webappar som helt förkastar den traditionella modellen för webben av navigation mellan olika sidor där servern har åtminstone något inflytande över hur innehållet ska visas för användaren. Istället bygger man webappar precis som man bygger konventionella appar, med ett sammanhängande block av kod som laddas ned till användaren och körs i webbläsaren. Modellen kallas SPA, för Single Page App.
Detta för med sig många fördelar – presentation och databehandling kan renodlas till helt separata lager, där det tidigare var svårt att undvika åtminstone någon sammanblandning och överlappande ansvar mellan klient och server. Eftersom all kod körs på användarens dator eller telefon – precis som i en vanlig app du laddar ned – blir både prestanda och interaktivitet mycket bra. Det är effektivt och sparar bandbredd då appens kod bara behöver överföras en gång, istället för vid varje ny sidladdning.
SPAer har naturligtvis även nackdelar. Vid första besöket laddar sidan något långsammare då den – precis som en vanlig app – först laddas ned i sin helhet innan den startar. Vissa sökmotorer och andra webbverktyg har svårt att hantera SPAer på samma sätt som vanliga webbsidor, även när de fungerar snarlikt. Och ur ett mer filosofiskt perspektiv kan man se det som att den ursprungliga tanken med webben, som ett öppet och fritt navigerbart nät av oberoende men sammanlänkade dokument, har förlorats.
Webbläsaren som virtuell maskin
Det är lätt att se tekniska paralleller mellan den pågående utvecklingen och den utveckling som redan har skett inom andra områden. Webbläsaren kommer allt mer att fungera på samma sätt som befintliga distributionssystem för appar, ex.vis Android och Google Play, eller iOS och App Store – som en sandlåda i vilken du installerar de appar du behöver och sedan kör dem från din smartphone. Även operativsystem för persondatorer såsom Windows har på senare år börjat anamma den modellen.
När det då i praktiken inte finns någon skillnad längre mellan en app i eller utanför webbläsaren, annat än för principen oviktiga detaljer som vilket språk den är skriven i – då är frågan varför vi ska ha två system för att göra precis samma sak. Webbläsaren har då blivit ett operativsystem i miniatyr som parasiterar på sin värd, likt de virtuella maskiner vi redan har och som använts under lång tid. Så snart WebAssembly ersatt JavaScript och mer kraftfulla ramverk för gränssnitt ersatt HTML/CSS är de tekniska skillnaderna också minimala.
Jag tror att det är sannolikt att de två systemen smälter samman framöver – det kanske i praktiken inte blir någon skillnad mellan att installera en app från Google Play eller att gå in på en webbapp i Chrome. Men vid det här laget har så många, miljontals utvecklare och inte minst Google och Apple själva (samt “mindre” aktörer som Microsoft och Amazon), investerat så mycket i de befintliga ekosystemen för appar att det är tveksamt ifall utvecklingen kommer att ske fort. På kort sikt lär webapparna fortsätta att leva en något undanskymd tillvaro samtidigt som den traditionella dokumentorienterade webben fortsätter att dominera. För de allra flesta webbsidor – de som främst syftar till att förmedla information (om det så är ordböcker, modebloggar eller pornografi) – är det fortfarande den rätta modellen.