Piaccia o meno, gran parte delle prestazioni del browser dipende da JavaScript: creando un sito dovreste considerare la possibilità che sia disabilitato, ma sulle applicazioni web è impossibile escluderlo. Mozilla è sempre stata all’avanguardia nell’esecuzione degli script e, nonostante la supremazia di Google con V8, Firefox Nightly ha introdotto uno strumento complementare a SpiderMonkey capace di decimare i tempi d’esecuzione del codice “nativo”. Capisco che in questi termini le proprietà di OdinMonkey siano incomprensibili.

Cercherò, allora, di spiegare perché sia tanto importante e quali benefici apporterà all’esperienza degli utenti. JavaScript è un linguaggio client-side, ovvero eseguito direttamente dal browser e non dal server dove risiedono siti o applicazioni: i produttori implementano engine differenti per interpretarlo ed eseguirlo. Per esempio, Chrome utilizza V8 che è stato adottato di recente da Opera: Mozilla integra SpiderMonkey, Internet Explorer usa Chakra e Safari prevede JavaScriptCore. Sono diversi engine che hanno un solo scopo.

Lo scopo, ovviamente, è quello d’adeguare l’esecuzione di JavaScript alle proprietà del browser: lo stesso discorso riguarda gli engine che interpretano HTML e CSS. Purtroppo, è pressoché impossibile ottenere delle prestazioni equivalenti ai linguaggi “nativi” ed è per questo motivo che Facebook e altri social network hanno preferito rimandare la disponibilità delle applicazioni web. OdinMonkey è un espediente integrato a partire da Firefox 22 che affronta il problema cambiando la prospettiva perché traduce C/C++ in JavaScript.

In estrema sintesi, OdinMonkey recupera i sorgenti realizzati dagli sviluppatori in C/C++ e li traduce in JavaScript affinché siano eseguibili dal browser. Questo metodo, come accennavo, riduce sensibilmente i tempi d’esecuzione delle app: impiega comunque il doppio delle “native”, ma è un risultato superiore a quello degli altri browser esistenti. Poiché il codice finale è in JavaScript non è necessario scegliere Firefox per avviare le applicazioni così concepite. Browser diversi saranno giusto un po’ più lenti nell’eseguirle.

Capisco che l’argomento sia più interessante per i programmatori: OdinMonkey può essere paragonato al Native Client (NaCl) o al Portable Native Client (PNaCl) di Google, ma a differenza di questi non esegue direttamente il codice in C/C++ perché lo traduce in JavaScript. In termini tecnici, OdinMonkey è un’implementazione per asm.js che è sempre mantenuto da Mozilla e completa il compilatore Ahead-Of-Time (AOT) di Firefox. Se non avete idea di cosa significhi è sufficiente sapere che le applicazioni web saranno molto più veloci.

Attualmente, OdinMonkey è disponibile per Firefox Nightly su x86 a 32-bit e 64-bit con Windows o Linux. Le caratteristiche dello strumento, però, alludono a Firefox OS: il sistema operativo di Mozilla per gli smartphone ammette appena le applicazioni web, escludendo le “native”. Grazie a OdinMonkey, già in realizzazione su ARM, gli sviluppatori potranno creare delle app concorrenziali in JavaScript a partire da C/C++. Perciò, gli utenti di Firefox OS non avranno granché da invidiare a quelli che utilizzano ancora iOS o Android.

Photo Credit: Lai Ryanne via Photo Pin (CC)