Как код dart2js работает быстрее, чем javascript?

Я пытаюсь лучше понять влияние дротика на производительность. На dart website их тесты показывают, что код Dart, скомпилированный в Javascript, быстрее, чем Javascript. Как это возможно?

Tracer Benchmarks

Я понимаю, как Dart VM быстрее, чем v8, но то, что я не получаю, - это то, как javascript, генерируемый dart2js, быстрее обычного javascript, когда оба они работают в одной среде, v8.

Ответ 1

dart2js может выполнять оптимизации, которые обычно не добавляются вручную в код JavaScript.

Нет ничего особенного в том, что Dart является исходным языком в этом случае: любой автоматизированный инструмент, который генерирует JavaScript, должен быть в состоянии сделать это, например, GWT-компилятор (Java-JavaScript) делает это тоже. Конечно, вы можете запускать автоматизированные инструменты для источника JavaScript для генерации лучшего JavaScript, это то, что делает Closure compiler.

Технически вы можете вручную достичь той же скорости с рукописным JavaScript, если знаете все трюки.

Ответ 2

Одним из примеров является функция вложения. Если вам понадобится фрагмент кода, который вызывается повторно, вы должны реорганизовать его в функции/методе. Dart2js часто делает обратное. Вызов метода часто заменяется фрагментом кода, содержащимся вызываемой функцией/методом, который называется inlining. Если вы сделаете это вручную, это приведет к недостижимому коду.

Я думаю, что многие из оптимизаций идут в этом направлении. Написание кода таким образом было бы просто нечитаемым и, следовательно, недостижимым. Это не значит, что это небрежно.

Ответ 3

интересное видео от Сета Лэдда и Каспера Лунда. Kasper участвует в создании компилятора Dart2js и дает некоторые примеры кода о том, как компилятор оптимизирует код Javascript.

Ответ 4

Отличная презентация Вячеслава Егорова из команды дартс, где он подробно объясняет некоторые из оптимизаций, в том числе в подкладке.

http://www.infoq.com/presentations/dart-compiler

Резюме Вячеслав Егоров рассказывает о том, как некоторые функции Dart-языка повлияли на дизайн нового компилятора JIT Dart и как V8 Двигатель JavaScript повлиял на общий дизайн.