2013-05-13 7 views
10

Emscripten potrebbe generare codice più veloce da C/C++ rispetto al codice JS scritto a mano, quindi ciò significa che dovremmo scrivere un nuovo codice in C/C++ e compilarli per l'esecuzione su Web?Quando asm.js è più veloce del normale codice JS, perché dovrei scrivere un nuovo codice in JS?

Ho letto le FAQ Emscripten, si dice "Con tutti i significati scrivere nuovo codice JavaScript". Perché?

+2

Non toccare C++ a meno che tu non sia in grado * di * sentire * la differenza tra JS e asm.js. – DCoder

+0

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. –

+0

@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

risposta

12

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.
+1

Vorrei incoraggiare i coraggiosi a provare ad esplorare il js in uno qualsiasi dei codici demo 3D là fuori. Totalmente inintelligibile. – meawoppl

Problemi correlati