我遇到了这个javascript函数:
function functionName(a, b) {
return a[0]===b[0]&&a[1]===b[1]&&a[2]===b[2]&&a[3]===b[3]&&
a[4]===b[4]&&a[5]===b[5]&&a[6]===b[6]&&a[7]===b[7]&&
a[8]===b[8]&&a[9]===b[9]&&a[10]===b[10]&&a[11]===b[11]&&
a[12]===b[12]&&a[13]===b[13]&&a[14]===b[14]&&a[15]===b[15];
};
我想知道在哪种情况下代码会比这更好或更快(因为a和b显然是相同长度的数组):
function functionName(a, b) {
for( var i = 0; i < a.length; i++ ) {
if( a[i] !== b[i] ) {
return false;
}
}
return true;
};
或此版本(如果长度超过16):
function functionName(a, b) {
for( var i = 0; i < 16; i++ ) {
if( a[i] !== b[i] ) {
return false;
}
}
return true;
};
对此主题的任何参考表示感谢。感谢。
答案 0 :(得分:1)
由于两个版本都进行了相同数量的数组元素比较,我希望内联版本更快,因为它没有任何循环管理。你可以试试这个:
var a = [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true];
var b = [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true];
function testA(a, b){
return a[0]===b[0]&&a[1]===b[1]&&a[2]===b[2]&&a[3]===b[3]&&
a[4]===b[4]&&a[5]===b[5]&&a[6]===b[6]&&a[7]===b[7]&&
a[8]===b[8]&&a[9]===b[9]&&a[10]===b[10]&&a[11]===b[11]&&
a[12]===b[12]&&a[13]===b[13]&&a[14]===b[14]&&a[15]===b[15];
}
function testB(a, b){
for( var i = 0; i < a.length; i++ ) {
if( a[i] !== b[i] ) { return false; }
}
return true;
}
var start;
var end;
var result;
var total;
var outerIttrations = 10;
var innerItterations = 1000 * 1000;
total = 0;
result = true;
for (var j=0; j<outerIttrations; j++){
start = performance.now()
for (var i=0; i< innerItterations; i++){ result = result && testA(a, b); }
end = performance.now();
total += (end - start);
}
console.log("Average Test A (inline) " + total / outerIttrations + " (" + result + ")");
total = 0;
result = true;
for (var j=0; j<outerIttrations; j++){
start = performance.now()
for (var i=0; i< innerItterations; i++){ result = result && testB(a, b); }
end = performance.now();
total += (end - start);
}
console.log("Average Test B (loop) " + total / outerIttrations + " (" + result + ")");