asm.js non è un modo più rapido per eseguire codice JavaScript-esque. È un modo più veloce per eseguire codice che è già ridotto al livello di astrazione del codice macchina. Sembri a sovrastimare notevolmente i guadagni:
- Se si lascia che gli sviluppatori di JS scrivere C++ come se fosse JS, si finisce con il codice fugly che non è quasi veloce come C++ potrebbe essere e viziata anche in altri modi.
- Molti potenziali colli di bottiglia, quali la manipolazione del DOM e la latenza della rete, non sono influenzati dalla velocità con cui il codice è in esecuzione.
- Per molti programmi, l'accelerazione da un'implementazione linguistica più rapida è sminuita dalla rapidità delle ottimizzazioni ad alto livello. In altre parole, fare un lavoro un po 'più veloce è bello, ma non farlo affatto è ancora più veloce.
Andando questo percorso ha svantaggi significativi così:
- Devi buttare via il codice di lavoro, e ri-scrivere (compresi gli insetti) in una lingua più della tua squadra ha vinto' Lo so quasi altrettanto, se non del tutto.
- A partire da ora, la tecnologia è ancora agli inizi. Non scommetterei la tua azienda, o anche un prodotto importante, su di essa. Anche se avrà successo, sarà sempre una tecnologia di nicchia rispetto a JavaScript. Questo non lo squalifica per il lavoro professionale, ma è rendere molte cose più difficili.
- IIUC, non puoi fare direttamente la maggior parte delle cose che JS può fare oltre i numeri di crunch, puoi solo chiamare le funzioni JS offerte esplicitamente al modulo asm.js. Cioè, avrai sempre bisogno di almeno un po 'di codice di colla in Javascript e (come menzionato sopra) se questo include i colli di bottiglia, in realtà non hai guadagnato nulla.
Gli unici tipi di codice che mi aspetto di guadagnare abbastanza da asm.js da usare sono:
- esistente codice che non sia già scritto in JavaScript. Per la sola ragione di risparmiare la maggior parte dei problemi di porting.
- Il pesante numero di crunch non interagisce con il browser. (Pensa: quanto spesso fai questo? E vuoi davvero passare lo sforzo di scriverlo in C/C++ e collegarlo con JS?)
- Stuff che è, per sua natura, al livello di asm.js di astrazione supporta, come i compilatori che emettono istruzioni code-esque della macchina.
Non toccare C++ a meno che tu non sia in grado * di * sentire * la differenza tra JS e asm.js. – DCoder
Molto raramente JavaScript "effettivamente" fa abbastanza per fare alcuna differenza. Certo, ci sono alcuni javascript che impiegano del tempo per fare il suo lavoro, e c'è qualche javascript scritto male che impiega troppo tempo per essere eseguito. Ma compilarlo non risolve veramente quest'ultimo. –
@allfox Il tuo mixaggio di 2 cose qui. 1. La compilazione incrociata da C/C++ a Javascript potrebbe essere più veloce e 2. Usare asm.js su Javascript sarà quasi sempre più veloce.Ma vuoi sapere del primo o del secondo? – abergmeier