Az Electron appok rejtett ára
Az Electron-alkalmazások rejtett költsége
Ismered azt az érzést, amikor letöltesz egy asztali programot, és valami nem stimmel? Minden működik ugyan, de valahogy mégsem érzed azt a sima, kellemes felhasználói élményt. A betűk kicsik. Az ablak furcsán viselkedik. A RAM-od pedig mintha egyedül dolgozna a háttérben.
Igen, nagy eséllyel Electron-alkalmazásba botlottál.
Mi az az Electron?
Az Electron egy keretrendszer, amely lehetővé teszi a fejlesztők számára, hogy webes technológiákkal – HTML, CSS, JavaScript – építsenek asztali alkalmazásokat. A varázslat egyszerűnek tűnik: miért tanulna meg egy webfejlesztő külön Windows, macOS és Linux programozást, ha ugyanazzal a tudással asztali appot is építhet?
Hangzik jól, nem? Tényleg.
De van egy aprócska részlet, amit a marketing anyagok ritkán emlegetnek.
A trenchcoat-probléma
Egy fejlesztő találóan úgy jellemezte az Electron-appokat: webböngészők egy trenchcoatban, amelyek natív szoftvernek adják ki magukat. És hát, nem jár messze az igazságtól.
Az Electron lényege ugyanis, hogy az alkalmazásodon belül egy teljes Chromium-példány fut. Teljes JavaScript-motor, teljes renderelőmotor, és mindazok a terhek, amelyek egy böngészővel járnak.
Az eredmény? Egy levelezőkliens, amely több memóriát zabál, mint egy videójáték. Egy jegyzetelő app, amely három másodpercig tölt be. Egy "könnyű" segédprogram, amely úgy zabálja a rendszererőforrásokat, mintha kriptovalutát bányászna.
Amikor a webverzió jobb
És itt jön a legfurcsább rész. Sok esetben az alkalmazás webes változata valójában jobban működik, mint az asztali Electron-verziója. Ugyanaz a kódbázis, ugyanazok a funkciók – mégis a böngészőben futó verzió fürgébb, reszponzívabb.
Miért van ez?
A webböngészők évtizedek óta optimalizáláson esnek át. A böngészőgyártók egymásra licitálnak a teljesítményért. Az operációs rendszer webes renderelőkomponensei automatikusan frissülnek a rendszerfrissítésekkel együtt.
Az Electron-appok viszont saját, becsomagolt Chromium-verzióval érkeznek – befagyasztva addig, amíg a fejlesztő úgy nem dönt, hogy frissíti őket. Ha egyáltalán frissíti.
Ez nem elméleti aggály. Biztonsági kutatók dokumentálták már azokat az eseteket, amikor ismert sebezhetőségekkel érkeztek az Electron-appok, mert a becsomagolt Chromium komponensek elavultak voltak.
A böngésződ, amelyben ezt olvasod? Valószínűleg már háromszor frissítette magát, mióta elkezdtél olvasni. Az az Electron-app az asztalodon? Lehet, hogy két évvel ezelőtti kóddal fut.
A használhatósági adó
Beszéljünk egy kicsit a mindennapi használatról. Amikor egy natív macOS vagy Windows alkalmazást használsz, certain dolgokra számítasz. Hogy a Cmd+Scroll nagyítja a szöveget. Hogy az ablakok simán méretváltoztathatók. Hogy a billentyűparancsok konzisztensen működnek.
Az Electron-appok gyakran megsértik ezeket az elvárásokat. Nem azért, mert a fejlesztők nem törődnek velük – sokan igen – hanem azért, mert egy olyan keretrendszerben dolgoznak, amelyet soha nem azért terveztek, hogy pontosan utánozza a natív viselkedést.
Hányszor kellett már belegőrülnöm, amikor egy Electron-app betűmérete olvashatatlanná vált, és hiába állítgattam a beállításokat, nem tudtam eldönteni, hogy a változtatásom valóban érvényesült-e? A weben egyszerűen nyomnék egy Ctrl+-t vagy csíphetném a trackpadet. De ez apparently túl fejlett technológia egyes asztali alkalmazásoknak.
WebView-k: a kompromisszum, amivel senki sem elégedett
Szóval mi a megoldás?
Egyes fejlesztők a WebView-k felé fordulnak – rendszerszintű komponensek, amelyek webes tartalmat az operációs rendszer saját renderelőmotorjával jelenítenek meg. Ez hatékonyabb az Electronnál, mert a webmotor megosztott az összes alkalmazás között, és az operációs rendszer frissítéseivel együtt kap biztonsági javításokat.
De a WebView-knak is megvannak a maguk bajai. A különböző operációs rendszerek különböző webmotorokat használnak. Az appod picit másképp nézhet ki Windowson, macOS-en és Linuxon. Az a bizonyos "írj egyszer, futtasd everywhere" ígéret itt elkezd repedezni.
Őszintén? Nincs tökéletes megoldás.
A natív appok adják a legjobb teljesítményt és felhasználói élményt, de külön kódbázist igényelnek minden platformhoz. Az Electron kényelmet kínál a fejlesztőknek, de erőforrás-pazarlás és biztonsági kockázat az ára. A WebView-k pedig ügyetlenül osztják meg a különbséget.
Mit tehetsz?
Ha fejlesztő vagy: Gondold át alaposan, hogy az Electron valóban a megfelelő választás-e. Gondolj a felhasználókra. Arra, hogy egy Twitter-bejegyzésben valaki esetleg úgy jellemezze az appodat, hogy "webböngésző trenchcoatban". Arra, hogy az "nálam működik" kifejezés egészen új értelmet nyer, amikor tulajdonképpen egy egész böngészőt szállítasz a kóddal együtt.
Ha felhasználó vagy: Ne érezd magad bűnösnek, ha panaszkodsz egy lassú Electron-app miatt. A frusztrációd jogos. A memóriazabálás, a következetlen felület, az olvashatatlanná kicsinyített szöveg – ezek nem apróságok. Valós hatással vannak a munkafolyamataidra, és megérdemlik, hogy foglalkozzanak velük.
A trenchcoat-metafora azért működik, mert lényegében a maszkírozásról szól. Az Electron-appok gyakran úgy érzik magukat, mintha valami más akarnának lenni, mint amik.
Talán itt az ideje, hogy abbahagyjuk a színlelést, és olyan szoftvert építsünk, amely tudja, mire vállalkozik.