Требуется ли современным JIT-модулям JavaScript кэширование длины массива в циклах?

Я считаю довольно неприятной практику кэширования свойства массива length внутри цикла for . Например,

for (var i = 0, l = myArray.length; i < l; ++i) {
    // ...
}

По крайней мере, на мой взгляд, это сильно ухудшает удобочитаемость по сравнению с простым

for (var i = 0; i < myArray.length; ++i) {
    // ...
}

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

Я хотел бы иметь возможность сказать любому, кто делает это: «Не беспокойтесь; современные JS JIT-программы оптимизируют этот трюк». Очевидно, что это нетривиальная оптимизация, поскольку вы могли бы, например, модифицируйте массив во время итерации, но я думаю, учитывая все безумные вещи, которые я слышал о JITers и их трюках анализа времени выполнения, они бы уже до этого добрались.

У кого-нибудь есть доказательства так или иначе?

И да, я тоже хотел бы, чтобы было достаточно сказать: «Это микрооптимизация; не делайте этого, пока не профилируете». Но не все прислушиваются к подобным причинам, особенно когда становится привычкой кэшировать длину, и в конечном итоге они делают это автоматически, почти как выбор стиля.

13
задан Domenic 7 June 2011 в 07:33
поделиться