QR code per la pagina originale

Mozilla riduce il gap tra asm.js e le app native

Le web app sono eseguite da Firefox ad una velocità paragonabile a quelle delle app native, grazie alle ottimizzazioni incluse in asm.js e Emscripten.

,

Annunciato a marzo e integrato in Firefox 22 a fine giugno, asm.js è un modulo che Mozilla ha aggiunto al motore JavaScript per incrementare le prestazioni delle web app eseguite all’interno del browser, in particolare giochi 3D. Nel corso dei mesi, gli sviluppatori hanno ottimizzato ulteriormente il codice, ottenendo prestazioni quasi identiche a quelle delle app native.

All’inizio dell’anno, Firefox era in grado di eseguire il codice asm.js ad una velocità pari al 50% del codice nativo. Grazie ai miglioramenti apportati al compilatore Emscripten, che genera il codice JavaScript a partire dal codice C++, e allo stesso motore JavaScript, che esegue questo codice, il browser offre ora prestazioni paragonabili a quelle delle app native. Mozilla ha introdotto diverse ottimizzazioni, ma la più importante è stato l’uso dei numeri a 32 bit in singola precisione al posto dei numeri a 64 bit in doppia precisione per i calcoli in virgola mobile.

Le operazioni float32 richiedono meno cicli di CPU, occupano meno spazio in memoria e l’esecuzione di molte funzioni matematiche previste dalle librerie C vengono eseguite più velocemente. Il grafico seguente mostra il confronto tra il codice nativo compilato con clang e gcc, e il codice eseguito da Firefox (le barre di colore rosso) e generato dal compilatore Emscripten usando float32. Come si può notare, le ottimizzazioni hanno permesso di aumentare le prestazioni. Ora il codice viene eseguito solo 1,5 volte più lentamente di quello nativo.

Confronto tra le prestazioni del codice nativo e il codice asm.js

Confronto tra le prestazioni del codice nativo e il codice asm.js

Dato che molti game engine sono scritti in C e C++, i miglioramenti si evidenziano sopratutto nell’esecuzione di giochi 3D all’interno di Firefox. Mozilla ha pianificato altre ottimizzazione sia per asm.js che per Emscripten.

Fonte: Mozilla • Notizie su: