#заметка дня
Сегодня немного о том, как же хорошо иметь отклик аудитории в соцсетях.
Некто
Бен Дикен (ну как, некто, его
статью по B-деревьям и индексам в базах данных мы недавно читали) решил хайпануть на теме производительности разных языков и сред. Ну, на синтетических тестах, если уж совсем точно.
И выкатил видео, на котором тупо визуализировал результат выполнения 1 миллиарда итераций вложенных циклов:
https://benjdd.com/loops/Ну, условно, вот такой код:
let array = new Array(10000);
for (let i = 0; i < 10000; i++) {
for (let j = 0; j < 100000; j++) {
array[i] = array[i] + j;
}
}
Если коротко, то получилось, что JS в Node.js в 30 раз медленнее, чем C, скомпилированный в gcc с -O1 (минимальной оптимизацией).
Ох, как же его начали макать... Опустим очевидные моменты вроде тех, что никому в реальной жизни не интересно, как там миллиард циклов выполнится. Что гораздо интереснее — это как всё улучшить.
Как оказалось, улучшать есть что! На иллюстрации к посту вы видите
результат коллективной работы большого числа людей. Как видим, JS лишь в 2-2.5 раза медленнее:
https://benjdd.com/languages/Как так вышло? Очень просто: know your tools.
Например, прям из простейшего: если в JS создать массив как new Array(10000), он будет заполнен мусором и готов будет принимать в себя любые типы элементов. А если new Array(10000).fill(0) — движок оптимизирует код под работу с целыми числами. И буст будет просто огромный.
Вот вам и динамический язык, кто бы мог подумать. Дальше — больше (new Int32Array(10000), например).
В общем, и
обсуждение оригинального поста и
обсуждение результата коллективной работы стоят вашего внимания.
Особенно если вы собираетесь вложенные циклы миллиардами итераций выполнять.#performance #test