Aplicațiile Electron: Taxa ascunsă a confortului
Electron: Aplicații desktop sau site-uri web deghizate?
Hai să fim sinceri un moment. Ai descărcat o aplicație desktop și ceva nu se simte... în regulă. Totul funcționează, din punct de vedere tehnic, dar parcă e ceva în neregulă. Textul e prea mic. Fereastra nu se comportă ca la alte aplicații. Consumă RAM-ul ca și cum ar fi un sport de performanță. Felicitări, ai instalat probabil o aplicație Electron.
Pentru cei care nu știu, Electron este un framework care permite dezvoltatorilor să construiască aplicații desktop folosind tehnologii web — HTML, CSS și JavaScript. Promisiunea este atrăgătoare: dezvoltatorii tăi web pot acum să construiască aplicații desktop cu același cod. Nu e nevoie să înveți codebases native pentru Windows, macOS și Linux separat. Sună ca un vis pentru startup-uri cu bugete mici și echipe cu resurse limitate.
Dar iată ce nu-ți spune marketingul.
Problema Trenciotului
Îmi place cum a descris un dezvoltator aplicațiile Electron: browsere web într-un trenciot care se prefac că sunt software nativ. Nu e greșit. Sub acel ambalaj lucios de desktop, practic rulezi o instanță completă de Chromium. Adică un motor JavaScript complet, un motor de randare complet și toată încărcătura care vine cu ambele.
Rezultatul? Un client de email care consumă mai mult RAM decât un joc video. O aplicație de notițe care se deschide în trei secunde. Un utilitar "lightweight" care stă în dock consumând resurse de parcă ar mining cryptocurrency.
Când paginile web depășesc aplicațiile desktop
Iată partea care mă deranjează cel mai mult. În multe cazuri, versiunea web a unei aplicații este de fapt mai bună decât omologul ei Electron pentru desktop. Același cod, aceleași funcționalități, dar într-un fel versiunea din browser se simte mai rapidă, mai responsive, mai... corectă.
De ce? Pentru că browserele web au avut decenii de optimizare. Producătorii de browsere concurează agresiv pe performanță. Componentele de randare web ale sistemului tău de operare primesc actualizări de securitate automat prin actualizările sistemului. Dar aplicațiile Electron livrează propria versiune de Chromium, înghețată în timp până când dezvoltatorul decide să actualizeze — dacă o face vreodată.
Nu e doar o îngrijorare teoretică. Cercetătorii în securitate au documentat numeroase cazuri în care aplicații Electron au fost livrate cu vulnerabilități cunoscute în componentele Chromium incluse. Browserul în care citești asta? Probabil s-a actualizat de trei ori de când ai început să citești. Aplicația Electron de pe desktop? S-ar putea să ruleze cod de acum doi ani.
Taxa de utilizabilitate
Să vorbim despre utilizabilitate. Când folosești o aplicație nativă macOS sau Windows, ai anumite așteptări. Te aștepți ca Cmd+Scroll să mărească textul. Te aștepți ca ferestrele să se redimensioneze lin. Te aștepți ca scurtăturile de tastatură să funcționeze consistent cu alte aplicații pe care le folosești.
Aplicațiile Electron încalcă frecvent aceste așteptări. Nu pentru că dezvoltatorilor nu le pasă — mulțora le pasă — ci pentru că lucrează într-un framework care nu a fost niciodată conceput să reproducă comportamentul nativ. E ca și cum ai cere unui pește să urce în copac și apoi să te întrebi de ce e obosit.
Am pierdut șirul de câte ori am fost nevoit să sap prin meniuri de setări doar pentru a face textul lizibil într-o aplicație Electron, ducând și întorcându-mă să verific dacă modificările chiar au funcționat. Pe web, aș fi dat doar Ctrl+ sau pinch pe trackpad. Dar se pare că asta e prea avansat pentru unele aplicații desktop.
WebViews: Calea de mijloc cu care nimeni nu e mulțumit
Deci care e alternativa? Unii dezvoltatori apelează la WebViews — componente la nivel de sistem care randă conținut web folosind motorul de randare propriu al sistemului de operare. E mai eficient decât Electron pentru că motorul web este partajat între toate aplicațiile și primește actualizări de securitate prin sistemul de operare.
Dar WebViews vin cu propriile lor dureri de cap. Diferite sisteme de operare folosesc diferite motoare web. Aplicația ta ar putea arăta puțin diferit pe Windows versus macOS versus Linux. Acea promisiune "write once, run anywhere" începe să se crape.
Să fim onești? Nu există soluție perfectă. Aplicațiile native oferă cea mai bună performanță și experiență de utilizare dar necesită codebases separate pentru fiecare platformă. Electron oferă confort în dezvoltare pe seama utilizării resurselor și securității. WebViews împart diferența stângaci.
Ce ar trebui să faci?
Dacă ești dezvoltator și construiești aplicații desktop, te încurajez să evaluezi sincer dacă Electron este alegerea potrivită. Gândește-te la utilizatorii tăi. Gândește-te că un dezvoltator care postează despre aplicația ta pe social media ar putea să o descrie ca "un browser web într-un trenciot". Gândește-te că "funcționează pe mașina mea" capătă o cu totul altă dimensiune când livrezi un browser întreg împreună cu codul tău.
Dacă ești utilizator, nu te simți vinovat pentru că te plângi de acea aplicație Electron lentă. Frustrarea ta e validă. Taxa de memorie, UI-ul inconsistent, textul prea mic pentru a fi citit — acestea nu sunt plângeri mici. Sunt impacte reale asupra fluxului tău de lucru și merită să fie adresate.
La sfârșitul zilei, ar trebui să construim instrumente care respectă atât dezvoltatorii cât și utilizatorii. Uneori asta înseamnă să alegi confortul. Uneori înseamnă să depui munca suplimentară pentru a face lucrurile corect. Întrebarea nu e dacă Electron e bun sau rău — ci dacă e alegerea potrivită pentru ceea ce încerci să realizezi.
Metafora trenciotului funcționează pentru că e fundamental despre deghizare. Aplicațiile Electron adesea se simt ca și cum s-ar preface că sunt altceva. Poate e timpul să nu ne mai prefacem și să începem să construim software care știe ce vrea să fie.