Предложение по оптимизации оператора in
Внезапно меня занесло в баг-трекер v8, где я увидел очень интересный пропозал от разработчика из Microsoft.
Как оказалось в v8 оператор in
не оптимизирован. Все его вызовы приводят к дорогостоящим рантайм проверкам. В пропозале идёт речь про переход к использованию инлайн кешей и jit-оптимизаций при использовании in
. Но есть известные проблемы, когда перебираются все ключи объекта, в этом случае оптимизаций нет.
Были произведены замеры с тестовой реализацией v8 на методе Array.prototype.indexOf
, который вызывался 10 раз у массива с 10 миллионами элементов. Результаты хорошие - заметно ускорение в 4-10 раз на разных типах массивов.
https://docs.google.com/document/d/1tIfzywY8AeNVcy_sen-5Xev21MeZwjcU8QhSdzHvXig/edit