Da pochi giorni è stato rilasciata la versione 4.3 di iOS. Sicuramente una delle novità più interessanti, introdotte da Apple, è il nuovo Nitro JavaScript engine, il quale permette una forte riduzione nei tempi di esecuzione. Poco dopo il rilascio è stato subito notato, da The Register e da altri, come i miglioramenti sulla velocità di esecuzione del JavaScript siano vincolati all'esecuzione su Safari, mentre lo stesso JavaScript eseguito in modalità HomeScreen o in una UIWebView di una App mostra performance molto più basse.
Vista l'attenzione che riponiamo sul rapporto JavaScript&iOS, ci siamo posti l'obiettivo di misurare l'entità di questa differenze di performance variando il dispositivo, la versione di iOS ed l'ambiente di esecuzione del JavaScript. Per i test abbiamo usato il JS benchmark di SunSpider. Di seguito è riportata la tabella con i risultati. Gli errori non sono riportati poichè tutti simili tra loro ed intorno all'1%; i valori nella tabella sono espressi in secondi.
| Safari | HomeScreen | UIWebView | |
| [iOS 4.3] | |||
| iPad | 3.3 | 8.3 | 7.6 |
| iPhone 4 | 4.2 | 10.4 | 9.6 |
| iPhone 3GS | 5.2 | 13.7 | 12.6 |
| [iOS 4.2] | |||
| iPhone 3GS | 13.7 | 13.8 | - |
| Simulator iOS 4.3 | 1.7 | 1.7 | 1.9 |
| Simulator iOS 4.2 | 1.7 | 2.0 | 1.8 |
Da subito si evince che le differenze di prestazione, dovute all'ambiente dove viene fatto girare il benchmark, sono evidenti sotto iOS 4.3. Infatti i tempi di esecuzione dentro Safari sono meno della metà degli altri casi e questo si verifica su tutti i dispositivi testati. Sono invece simili le prestazione dentro la HomeScreen e la UIWebView, con una lieve differenza a favore di UIWebView. Abbiamo, anche, verificato i tempi di esecuzione in iOS 4.2; in questo caso non si notano differenze rispetto all'ambiente dove viene eseguito il benchmark ed i tempi sono in accordo con quelli di iOS 4.3 usando HomeScreen o UIWebView. Per completezza abbiamo anche verificato cosa succede sul simulatore. Qui i tempi sono tutti simili sia nella versione iOS 4.2 che in quella 4.3.
In conclusione quello che sembra evidente è che il boost di prestazione è limitato alle applicazioni JavaScript che girano sotto Safari, negli altri casi si rimane allo stato di iOS 4.2. Che sia un bug, una disattenzione o una scelta volontaria da parte di Apple non ci è dato saperlo. Comunque in questo post, legano le differenze di prestazione alla natura delle ottimizzazioni introdotte da Nitro JavaScript engine:
The engine converts JavaScript code into native ARM machine code.
Third parties have never been able to get access to [...] library that generates native code dynamically