Если вы собираетесь тестировать jQuery inArray
, на самом деле тестируйте jQuery inArray
и сравнивайте яблоки с яблоками (вызывая функцию и вызывая функцию - вы можете написать встроенный цикл в местах, где производительность равна чрезвычайно критически, но это не будет ваш ход по умолчанию, предположительно): http://jsperf.com/inarraytest/3
Подготовка HTML:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
Код подготовки:
var arr=[0,1,2,3,4,5,6,7,8,9];
function arrayLoop(elem, array, i) {
var len = array.length;
i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
for ( ; i < len; i++ ) {
// Skip accessing in sparse arrays
if ( i in array && array[ i ] === elem ) {
return i;
}
}
return -1;
}
Тесты:
// jQuery.inArray last
var rtn=jQuery.inArray(9,arr);
// arrayLoop last
var rtn = arrayLoop(9,arr);
// jQuery.inArray middle
var rtn=jQuery.inArray(4,arr);
// arrayLoop middle
var rtn = arrayLoop(4,arr);
// jQuery.inArray first
var rtn=jQuery.inArray(0,arr);
// arrayLoop first
var rtn = arrayLoop(0,arr);
Результаты в Chrome (с indexOf
) заключаются в том, что jQuery.inArray
всегда быстрее, чем arrayLoop
(в первой паре тестовых случаев, где мы ищем последнюю запись, резко так).
Результаты для IE6 (у которого нет indexOf
): jQuery.inArray
всегда быстрее, чем arrayLoop
, хотя неудивительно, что не так много (поскольку он должен выполнять по существу ту же самую работу) & mdash; за исключением, что любопытно, в случае, когда мы ищем первую запись в массиве, в этом случае это намного быстрее.