Дошли руки написать бенчмарки для проверки своего супер-пупер кода (делается порт zlib). Получилось забавно:
$ ./benchmark.js
Selected samples: (1 of 1)
> lorem_1mb
Sample: lorem_1mb.txt (1000205 bytes)
> deflate-gildas x 3.04 ops/sec ±1.77% (12 runs sampled)
> deflate-imaya x 2.27 ops/sec ±6.23% (9 runs sampled)
> deflate-zlib x 9.23 ops/sec ±2.95% (48 runs sampled)
В ноде вызовы zlib всего в 3 раза быстрее нативного кода. Правда есть нюансы:
1. Меряется latency. Возможно, zlib все-таки меньше грузит процессор, и потери на переключении тредов.
2. Какой бы быстрый код на С вы не сделали, данные обратно в v8 пропихиваются ДОЛГО.
Бенчмарк пока только по чужим библиотекам, есть шансы что своя будет пошустрее, когда допилим.
Сильно удивлён. Думал, что на идеальном коде разница будет в 5-10 раз. А тут всего 3, и на том, где деоптимизации могут приключиться. Хотя конечно яваскрипт в сишном стиле - не для детей с хрупкой психикой :)
Исходники тут https://github.com/nodeca/pako