Движок V8 компилирует JavaScript в машинный код.Итак, почему node.js не быстрее, чем C? - PullRequest
5 голосов
/ 19 ноября 2010

Согласно языковым тестам , JavaScript V8 работает быстрее, чем другие языки программирования в программе regex-dna.Итак, почему приложения node.js (т. Е. Http-сервер) не быстрее приложений на C (т. Е. Nginx, Lighttpd)?

Ответы [ 5 ]

32 голосов
/ 19 ноября 2010

Поскольку приложения V8 являются приложениями JavaScript. Даже если JavaScript, наконец, скомпилирован в машинный код, характеристики времени выполнения отличаются.

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

Существует также модель памяти. Javascript - это сборщик мусора, а GC использует циклы процессора.

11 голосов
/ 19 ноября 2010

Поскольку обслуживание http-запросов - это другая проблема, чем regex-dna.

Тот факт, что A быстрее, чем B в одной задаче, ничего не говорит о том, чего ожидать от другой задачи.

Обязательная плохая автомобильная аналогия: бутерброд с ветчиной намного вкуснее, чем porsche. Почему не быстрее от 0-60?

3 голосов
/ 19 ноября 2010

Для одного C это по сути эталонный язык для скорости вычислений. Компиляторы в наши дни очень хороши и производят очень эффективный машинный код. Это означает, что верхний предел производительности - это то, что вы можете получить с помощью C.

В одной из своих презентаций о node.js Райан Даль (создатель) сказал , что этот узел примерно такой же быстрый, как C. (но GC и другие вещи влияют на производительность, не говоря уже о что V8 нужно время, чтобы правильно оптимизировать вещи)

0 голосов
/ 17 марта 2014

В этом тесте есть 15 различных программ и только один тест dna-regex, где вы можете увидеть, что JavaScript V8 работает быстрее. Что касается других тестов, JavaScript намного ниже по производительности. Вы можете выбрать программу в первом выборе, посмотрите на этот .

0 голосов
/ 19 ноября 2010

Согласно языковым тестам , JavaScript V8 на не быстрее, чем GCC в программе с двоичными деревьями.

Согласно языковым тестам, JavaScript V8 на не * на 1008 * быстрее, чем GCC в программе k-нуклеотидов.

Согласно языковым тестам, JavaScript V8 на не быстрее, чем GCC в программе n-body.

Согласно языковым тестам, JavaScript V8 на не быстрее, чем GCC в программе со спектральной нормой.

Согласно языковым тестам, JavaScript V8 на не быстрее, чем GCC в программе fasta.

Согласно языковым тестам, JavaScript V8 на не быстрее, чем GCC в программе обратного дополнения.

Согласно языковым тестам, JavaScript V8 на не быстрее, чем GCC в программе pidigits.

...