Electron-apper: Den skjulte byrden på maskinen din
Det der med Electron-apper
La meg være ærlig en liten stund. Har du noen gang lasta ned en desktop-app og tenkt at noe føles... feil? Alt funker, teknisk sett. Men det er bare noe som ikke stemmer. Teksten er for liten. Vinduet oppfører seg rart. Appen tygger RAM som om det var gratis.
Gratulerer. Du har sannsynligvis installert en Electron-app.
Hva i all verden er Electron?
For de som ikke kjenner til det: Electron er et rammeverk som lar utviklere bygge desktop-applikasjoner med vanlige webteknologier – altså HTML, CSS og JavaScript. Løftet er fristende. Du kan ta webutviklerne dine og la dem bygge desktop-apper med samme kode. Ingen grunn til å lære seg native kodebaser for Windows, macOS og Linux hver for seg. For startups og team med begrensa ressurser høres det ut som en drøm.
Men her er hva markedsføringen glemmer å fortelle deg.
Trenchcoat-problemet
Jeg liker måten en utvikler beskrev Electron-apper på: en webleser i trenchcoat som prøver å late som den er native programvare. Det er ikke feil. Under den blanke desktop-innpakninga kjører du i praksis en fullstendig Chromium-nettleser. Med en full JavaScript-motor, en full renderingsmotor, og all overhead som følger med begge deler.
Resultatet? En e-postklient som bruker mer RAM enn et videospill. En notat-app som tar tre sekunder på å åpne. En "lettvekter"-funksjon som sitter i dokken din og eter ressurser som om den gruvearbeider kryptovaluta.
Når nettsider slår desktop-apper
Her kommer det som virkelig trigger meg. I mange tilfeller er netversjonen av en applikasjon faktisk bedre enn Electron-desktopversjonen. Samme kodebase, samme funksjoner, men av en eller annen grunn føles leserversjonen raskere, mer responsiv, mer... riktig.
Hvorfor? Fordi weblesere har hatt tiår med optimalisering. Leserprodusenter konkurrerer hardt på ytelse. Operativsystemets webrenderingskomponenter mottar sikkerhetsoppdateringer automatisk gjennom systemoppdateringer. Men Electron-apper leverer sin egen buntede Chromium-versjon, frosset i tid til utvikleren bestemmer seg for å oppdatere – hvis de i det hele tatt gjør det.
Dette er ikke bare teoretisk bekymring. Sikkerhetsforskere har dokumentert mange tilfeller der Electron-apper har sendt ut kjente sårbarheter i sine buntede Chromium-komponenter. Webleseren du leser dette i? Den har sannsynligvis oppdatert seg tre ganger mens du har lest dette. Den Electron-appen på desktopen din? Den kjører kanskje kode fra to år tilbake.
Brukervennlighetsavgiften
La oss snakke om brukervennlighet. Når du bruker en native macOS- eller Windows-applikasjon, forventer du visse ting. Du forventer at Cmd+Scroll zoomer tekst. Du forventer at vinduer endrer størrelse jevnt. Du forventer at tastatursnarveier fungerer konsekvent med andre apper du bruker.
Electron-apper bryter ofte disse forventningene. Ikke fordi utviklerne ikke bryr seg – mange av dem gjør det – men fordi de jobber innenfor et rammeverk som aldri var designet for å kopiere native oppførsel. Det er som å be en fisk klatre i et tre og så lure på hvorfor den er sliten.
Jeg har mistalt tellinga på hvor mange ganger jeg har måtta grave meg gjennom innstillingsmenyer bare for å gjøre tekst lesbar i en Electron-app, fram og tilbake for å sjekke om endringene mine faktisk funka. På netta hadde jeg bare trykka Ctrl+ eller klypa trackpaden. Men tydeligvis er det for avansert for enkelte desktop-apper.
WebViews: Mellomvegget ingen er fornøyde med
Så hva er alternativet? Noen utviklere tyr til WebViews – systemkomponenter som renderer webinnhold ved hjelp av operativsystemets egen renderingsmotor. Det er mer effektivt enn Electron fordi webmotoren er delt på tvers av alle apper og mottar sikkerhetsoppdateringer gjennom operativsystemet.
Men WebViews har sine egne problemer. Ulike operativsystemer bruker ulike webmotorer. Appen din kan se litt annerledes ut på Windows versus macOS versus Linux. Det der "skriv én gang, kjør overalt"-løftet begynner å slå sprekker.
Den ærlige sannheten? Det finnes ingen perfekt løsning. Native apper gir beste ytelse og brukeropplevelse, men krever separate kodebaser for hver plattform. Electron gir utviklingsmessig bekvemmelighet til prisen av ressursbruk og sikkerhet. WebViews deler forskjellen på en klønete måte.
Hva bør du gjøre?
Hvis du er utvikler og bygger desktop-applikasjoner, oppfordrer jeg deg til å virkelig vurdere om Electron er det riktige valget. Tenk på brukerne dine. Tenk på at en utvikler som poster om appen din på sosiale medier kanskje beskriver den som "en webleser i trenchcoat." Tenk på at "det funker på maskinen min" får en helt ny betydning når du sender med en hel leser sammen med koden din.
Hvis du er bruker, ikke føl skyld for å klage på den trege Electron-appen. Frustrasjonen din er gyldig. Minneavgiften, den inkonsekvente brukergrensesnittet, teksten som er for liten til å lese – dette er ikke småklager. Det er reelle konsekvenser for arbeidsflyten din, og de fortjener å bli tatt på alvor.
Til syvende og sist bør vi bygge verktøy som respekterer både utviklere og brukere. Noen ganger betyr det å velge bekvemmelighet. Noen ganger betyr det å legge ned ekstra arbeid for å gjøre ting ordentlig. Spørsmålet er ikke om Electron er bra eller dårlig – det er om det er det riktige valget for det du prøver å oppnå.
Trenchcoat-metaforen fungerer fordi den handler grunnleggende om forkleining. Electron-apper føles ofte som om de prøver å være noe de ikke er. Kanskje det er på tide at vi slutter å late som og begynner å bygge programvare som vet hva den vil være.