Alleggerisci la tua app Electron con Electrino
Electron è un framework per lo sviluppo di applicazioni desktop cross-platform mantenuto dal team di GitHub.
Le potenzialità di questo framework sono notevoli: ci permette di sfruttare le tecnologie web standard ( HTML, CSS e Javascript ) per sfornare applicazioni capaci di girare su Windows, Mac o Linux indistintamente.
Sostanzialmente si tratta di un runtime che dalla nostra web app costruisce, in fase di build, un’app desktop multi piattaforma. Alcune tra le più note app che sfruttano questo framework sono Slack, VSCode ed Atom.
Il vero punto debole di Electron è costituito dal fatto che ogni applicazione sviluppata comprenderà nel bundle una versione dei due framework su cui si poggia: Node.js e Chromium, rispettivamente un runtime Javascript ed il browser engine sviluppato da Google per Chrome.
Quest’ultimo, però, stando al passo con le tecnologie web, rappresenta un software davvero vasto e pesante. Conta infatti abbastanza righe di codice da poter essere equiparato ad un sistema operativo!
Lo dimostra il fatto che l’applicazione “Hello World” sviluppata con Electron pesa ben 115 MB.
Quando un’app Electron è in esecuzione ha bisogno di caricare interamente una copia delle librerie da cui dipende nella memoria RAM, e questo succede separatamente per ogni applicazione, anche se le librerie necessarie sono esattamente le stesse, a causa del fatto che il sistema operativo non è in grado di rendersene conto.
Per applicazioni di dimensioni importanti come Visual Studio Code questo non rappresenta un reale problema. Se ci rivolgiamo alla community di sviluppatori Electron però, ci accorgiamo di come questo framework stia prendendo una direzione volta ad applicazioni di dimensioni ridotte, come desktop utilities o semplici widgets. Se dovessimo installarne parecchie sul nostro computer per avere un set di tools desktop ben fornito come piace a noi sviluppatori ci ritroveremmo con una copia di Electron che occupa RAM per ogni applicazione in esecuzione. E questo non è il migliore degli scenari.
Electrino
Potrebbe esserci una soluzione. Invece di sfruttare il motore Chromium portandolo sempre in bundle, un’app Electron potrebbe girare grazie al motore di runtime web incorporato nel sistema operativo. MacOS e Windows ne possiedono entrambi uno, rispettivamente WebKit ed Edge, ed in entrambi i casi si trova quasi costantemente già caricato in memoria.
Con questa soluzione un’app Electron potrebbe occupare meno spazio sia su disco che sulla RAM.
Lo scopo di Electrino è proprio questo. Si tratta di un componente di runtime che svolge lo stesso lavoro di Electron ma poggiandosi sul web engine nativo del sistema operativo. Ha inoltre come obiettivo la totale compatibilità di API con Electron, dandoci quindi la possibilità di utilizzare il nostro codice Javascript sviluppato per Electron.
Il clone dell’applicazione “Hello World” per Electron sviluppata con Electrino pesa solamente 167 KB, circa lo 0,1% dell’originale.
C’è da dire che al momento Electrino implementa solamente le API necessarie ad eseguire l’applicazione “Hello World”. Ovviamente abbiamo a disposizione la piena funzionalità del browser engine, ma le altre API presenti in Electron sono al momento assenti, impedendoci ad esempio di comunicare con il sistema operativo.
Con l’implementazione di tali API le dimensioni di Electrino andranno certamente a crescere, e sta agli sviluppatori evitare di raggiungere un livello che scoraggerebbe la community a sfruttare questo interessante e promettente framework.