LINUX.ORG.RU
ФорумTalks

скорость JS vs C. Эпизод 3.

 , , ,


1

2

https://github.com/nodeca/pako

Зарелизил порт zlib на яваскрипт. В распаковке яваскрипт оказался быстее :) . Пропустившим предыдущие серии повторяю - захотелось поразвлечься и выяснить для себя, насколько шустрый нынче явяскрипт и чего стоит разработка быстрого кода. Ну и попутно получить качественную библиотеку inflate/deflate, потому что с этим были напряги.

Бенчмарки:

node v0.10.26, 1mb sample:

   deflate-dankogai x 4.74 ops/sec ±0.68% (15 runs sampled)
   deflate-gildas x 4.61 ops/sec ±1.73% (15 runs sampled)
   deflate-imaya x 3.10 ops/sec ±3.73% (11 runs sampled)
 ! deflate-pako x 7.11 ops/sec ±0.26% (21 runs sampled)
   deflate-pako-untyped x 4.34 ops/sec ±1.35% (14 runs sampled)
   deflate-zlib x 14.34 ops/sec ±2.90% (68 runs sampled)
   inflate-dankogai x 31.29 ops/sec ±0.72% (56 runs sampled)
   inflate-imaya x 30.49 ops/sec ±0.84% (53 runs sampled)
 ! inflate-pako x 70.00 ops/sec ±1.60% (71 runs sampled)
   inflate-pako-untyped x 17.67 ops/sec ±1.27% (33 runs sampled)
   inflate-zlib x 70.82 ops/sec ±1.69% (81 runs sampled)

node v0.11.11, 1mb sample:

   deflate-dankogai x 5.61 ops/sec ±0.30% (17 runs sampled)
   deflate-gildas x 4.97 ops/sec ±5.68% (16 runs sampled)
   deflate-imaya x 3.53 ops/sec ±4.19% (12 runs sampled)
 ! deflate-pako x 11.52 ops/sec ±0.23% (32 runs sampled)
   deflate-pako-untyped x 5.12 ops/sec ±1.44% (17 runs sampled)
   deflate-zlib x 14.33 ops/sec ±3.34% (63 runs sampled)
   inflate-dankogai x 42.96 ops/sec ±0.19% (57 runs sampled)
   inflate-imaya x 85.05 ops/sec ±1.07% (71 runs sampled)
 ! inflate-pako x 97.58 ops/sec ±0.69% (80 runs sampled)
   inflate-pako-untyped x 18.06 ops/sec ±0.65% (56 runs sampled)
   inflate-zlib x 60.60 ops/sec ±2.04% (67 runs sampled)

Если кратко - маршалинг не бесплатный, и на распаковке это уже заметно. На упаковке потерями можно пренебречь, и яваскрипт уступает по скорости в 1.2-1.3 раза. Тестировалось под убунтой 12.04 с родным zlib.

Так что если разрабатываете на ноде, и есть тяжелые вычисления - не надо сразу ломиться делать модули на сях. Для многих случаев проще заколбасить прототип на яваскрипте, чтобы не терять время, а потом разбираться по обстоятельствам.

Конечно, недостатки при разработке быстрого яваскрипта тоже есть:

- нема хедеров, констант и макросов, как в сях (можно отчасти решить препроцессорами, но удобство сомнительное)
- ограниченная разрядность математики
- при работе с 32-разрядными целыми (например, crc32), желательно не форсить беззнаковые значения (uint32).
- нет удобных инструментов для отладки деоптимизаций (разве что IRHydra 2, но под нее надо ждать пока v8 в ноде обновят)

Из плюсов:

- не надо париться с поддержкой под разные платформы
- научить обезьяну писать мономорфный код проще, чем сделать из нее квалифицированного разработчика на С.

★★★★★
Ответ на: комментарий от SAA

Современному разработчику кроме ноды ничего знать не нужно. Это же очевидно.

Vit ★★★★★
() автор топика
Ответ на: комментарий от SAA

Чувак, почитай про тесты на stackoverflow. Люди пишут то же самое, недаром Amazon переходит с жабки на nodeJS.

menangen ★★★★★
()
Последнее исправление: menangen (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.