забавное про цикл for

хочу рассказать про недавний забавный случай на работе. Я поспорил с коллегой по поводу использования итераторов по массивам в сравнении с циклом for. Поводом для этого послужило то, что я считал определённые элементы в маленьком массиве посредством filter(…).length, а он это переделал в for. Аргументы друг друга нас не убедили, и коллега решил вынести это на более широкое обсуждение, и даже приготовил маленькую презентацию и тест.

аргумент коллеги был таков: использование filter приводит к выполнению многих посторонних операций, которые совершенно не нужны для такой простой вещи, как подсчёт определённых элементов. В результате драматически (в 150000 раз) ухудшается производительность, что и демонстрируется вот этим сравнением loop vs filter.

результаты теста были, конечно, разгромные. Однако тест этот синтетический, поэтому я на всякий случай повторил стандартные аргументы:

шеф выступил в роли арбитра и начал говорить, что с его 15-летним опытом работы программистом что filter, что for читаются одинаково легко. Я возразил, что это обманчивое впечатление, ошибки в for легко не заметить, и предложил проверить, что же именно выводит протестированный код

конечно же, супер-оптимальный for завершался в 150000 раз быстрее потому, что падал с ошибкой в первой же строчке. Когда мы это починили, правильное сравнение loop vs filter показало выигрыш в скорости всего в 10 раз. На наших реальных данных это единицы наносекунд.

я был очень благодарен коллеге и шефу за эту демонстрацию : )

Артемий Трегубенко,

comments powered by Disqus