あなたは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);
(indexOf
を持っている)クロームの結果は、私たちが最後のエントリを探しているところjQuery.inArray
は、テストケースの最初のペアで(常に速いarrayLoop
よりであることです、劇的に so)。 (indexOf
を持っていません)IE6の
結果:jQuery.inArray
は我々の場合には、不思議なことに、当然ではないくらい(それは本質的に同じ作業を行う必要があるとして) —除くことでも、常に速くarrayLoop
より配列のの最初のエントリを検索しています。その場合は、はるかに高速です。
あなたのjsperfテストから: 'return array.indexOf。call(array、elem、i); '???どうして 'return array.indexOf(elem、i);'?なぜ追加のレイヤーが 'コール'を通過するのでしょうか? –
@TJCrowder私はjQueryがそれを使用していると思ったので、http://stackoverflow.com/a/8856637/1148349 – mithril333221
@ mithril333221からコピーしました。http://code.jquery.com/jquery-1.7です。 1.js – ajax333221