2013-05-13 13 views
10

Emscripten könnte schneller Code aus C/C++ generieren als JS-Code von Hand geschrieben, also heißt das, wir sollten neuen Code in C/C++ schreiben und sie kompilieren, um im Web zu laufen?Wenn asm.js schneller als normaler JS-Code ist, warum sollte ich dann neuen Code in JS schreiben?

Ich lese die Emscripten FAQ, es heißt "Auf jeden Fall schreibe neuen JavaScript-Code.", Warum ist das?

+2

Berühren Sie nicht C++, außer Sie können tatsächlich den Unterschied zwischen Ihrem JS und asm.js * fühlen *. – DCoder

+0

Sehr selten "tut" JavaScript wirklich viel, um einen Unterschied zu machen. Sicher, es gibt einige Javascript, die etwas Zeit brauchen, um es zu tun, und es gibt einige schlecht geschriebene Javascript, die viel zu lange dauert. Aber das Kompilieren löst das letztere nicht wirklich. –

+0

@allfox Dein Mischen von 2 Dinge hier. 1. Quercompilieren von C/C++ zu Javascript könnte schneller und 2. asm.js über Javascript wird fast immer schneller sein.Aber wollen Sie etwas über das Erste oder das Letztere wissen? – abergmeier

Antwort

12

asm.js ist kein schneller Weg um Javascript-ähnlichen Code auszuführen. Es ist eine schnellere Möglichkeit, Code auszuführen, der bereits auf die Abstraktionsebene des Maschinencodes reduziert ist. Sie scheinen zu stark die Gewinne überschätzen:

  • Wenn Sie JS können Entwickler C++ schreiben, als ob es JS ist, Sie mit fugly Code am Ende, die so schnell wie C nicht annähernd ist ++ könnte auch auf andere Weise sein und fehlerhaft.
  • Viele potenzielle Engpässe, wie etwa DOM-Manipulation und Netzwerklatenz, werden überhaupt nicht davon beeinflusst, wie schnell Ihr Code ausgeführt wird.
  • Für viele Programme wird die Beschleunigung von einer schnelleren Implementierung der Sprache durch die Beschleunigung von High-Level-Optimierungen in den Schatten gestellt. Mit anderen Worten, etwas schneller zu arbeiten ist schön, aber überhaupt nicht schneller.

diesen Weg zu gehen hat auch erhebliche Nachteile:

  • Sie haben weg throw Ihre Arbeitscode und neu schreiben sie (einschließlich Bugs) in einer Sprache, die meisten Ihrer Mannschaft gewann‘ Ich weiß fast genauso gut, wenn überhaupt.
  • Ab sofort steckt die Technologie noch in den Kinderschuhen. Sie würden Ihr Unternehmen oder gar ein wichtiges Produkt nicht darauf setzen. Selbst wenn es gelingt, wird es im Vergleich zu JavaScript immer eine Nischentechnologie sein. Dies disqualifiziert es nicht für professionelle Arbeit, aber es macht viele Dinge schwieriger.
  • IIUC, Sie können nicht direkt die meisten Dinge tun, die JS über die Verarbeitung von Zahlen hinaus tun kann, Sie können nur JS-Funktionen aufrufen, die dem Modul asm.js explizit angeboten werden. Das heißt, dass Sie in Javascript immer mindestens einen Haufen Klebecode benötigen und (wie oben erwähnt), wenn dies Ihre Engpässe beinhaltet, haben Sie eigentlich nichts gewonnen.

Die einzigen Arten von Code, die ich erwarte von asm.js genug zu gewinnen, zu verwenden sind:

  • Bestehende-Code, der in JavaScript nicht bereits geschrieben. Aus dem einzigen Grund, den größten Teil des Portierungsaufwands zu sparen.
  • Schweres Zahlen-Crunching, das nicht mit dem Browser interagiert. (Denken Sie: Wie oft tun Sie das? Und wollen Sie wirklich die Mühe machen, es in C/C++ zu schreiben und es mit JS zu verbinden?)
  • Dinge, die von Natur aus auf dem Niveau von Abstraktion asm.js unterstützt, wie z. B. Compiler, die Maschinencode-ähnliche Anweisungen ausgeben.
+1

Ich würde die mutigen ermutigen zu versuchen, die js in einem der 3D-Demo-Codes da draußen zu erkunden. Völlig unverständlich. – meawoppl