javascript循环性能比较(转)

var chars = '0123456789abcdef'; 
 
function getRandomString() { 
    var len = Math.ceil(Math.random() * 7) + 3; // 4-10 
    var result = ""; 
    while (len--) { 
        result += chars.charAt(Math.floor(Math.random() * chars.length)); 
    } 
    return result; 
} 
 
var size = 10000; 
var mult = 100; 
 
var ary = []; 
var lsize = size; 
while (lsize--) { ary.push('' + getRandomString() + ''); } 
 
function for_in() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/; 
    for (var i in ary) { 
        var item = i; 
        if (isInt.test(item)) { item += 1; } 
    } 
} 
 
function for_normal() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/; 
    for (var i = 0, len = ary.length; i < len; i++) { 
        var item = ary[i]; 
        if (isInt.test(item)) { item += 1; } 
    } 
} 
 
function for_reverse() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/; 
    for (var i = ary.length; i--; ) { 
        var item = ary[i]; 
        if (isInt.test(item)) { item += 1; } 
    } 
} 
 
function while_normal() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/, 
            i = 0, 
            l = ary.length; 
    while (i < l) { 
        var item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
    } 
} 
 
function while_reverse() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/, 
            i = ary.length; 
    while (i--) { 
        var item = ary[i]; 
        if (isInt.test(item)) { item += 1; } 
    } 
} 
 
function do_while_normal() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/, 
            i = 0, 
            l = ary.length; 
    do { 
        var item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
    } while (i < l) 
} 
 
function do_while_reverse() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/, 
            i = ary.length - 1; 
    do { 
        var item = ary[i]; 
        if (isInt.test(item)) { item += 1; } 
    } while (i--) 
} 
 
console.log('数组长度:' + ary.length); 
console.log('Profiling will begin in 2 seconds...'); 
setTimeout(function () { 
    var currTime; 
    for (var k = 0; k < 3; k++) { 
        console.log('第' + (k + 1) + '次循环测试:') 
        currTime = new Date(); 
        console.profile(); 
        for (var i = 0; i < mult; i++) { 
            for_in(); 
            for_normal(); 
            for_reverse(); 
            while_normal(); 
            while_reverse(); 
            do_while_normal(); 
            do_while_reverse(); 
        } 
        console.profileEnd(); 
        console.log('用时:' + (new Date() - currTime) + 'ms'); 
    } 
}, 2000);





var chars = '0123456789abcdef'; 
 
function getRandomString() { 
    var len = Math.ceil(Math.random() * 7) + 3; // 4-10 
    var result = ""; 
    while (len--) { 
        result += chars.charAt(Math.floor(Math.random() * chars.length)); 
    } 
    return result; 
} 
 
var size = 10000; 
var mult = 100; 
 
var ary = []; 
var lsize = size; 
while (lsize--) { ary.push('' + getRandomString() + ''); } 
 
function process(item) { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/; 
    if (isInt.test(item)) { item += 1; } 
} 
 
function for_normal_fn() { 
    for (var i = 0, len = ary.length; i < len; i++) { process(ary[i]); } 
} 
 
function for_normal() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/; 
    for (var i = 0, len = ary.length; i < len; i++) { 
        var item = ary[i]; 
        if (isInt.test(item)) { item += 1; } 
    } 
} 
 
console.log('数组长度:' + ary.length); 
console.log('Profiling will begin in 2 seconds...'); 
setTimeout(function () { 
    console.log('普通for循环测试:') 
    var currTime = new Date(); 
    console.profile(); 
    for (var i = 0; i < mult; i++) { 
        for_normal(); 
    } 
    console.profileEnd(); 
    console.log('用时:' + (new Date() - currTime) + 'ms'); 
 
    console.log('for循环内调用外部函数测试:') 
    currTime = new Date(); 
    console.profile(); 
    for (var i = 0; i < mult; i++) { 
        for_normal_fn(); 
    } 
    console.profileEnd(); 
    console.log('用时:' + (new Date() - currTime) + 'ms'); 
 
}, 2000); 




var chars = '0123456789abcdef'; 
 
function getRandomString() { 
    var len = Math.ceil(Math.random() * 7) + 3; // 4-10 
    var result = ""; 
    while (len--) { 
        result += chars.charAt(Math.floor(Math.random() * chars.length)); 
    } 
    return result; 
} 
 
var size = 10000; 
var mult = 100; 
 
var ary = []; 
var lsize = size; 
while (lsize--) { ary.push('' + getRandomString() + ''); } 
 
function for_normal() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/; 
    for (var i = 0, len = ary.length; i < len; i++) { 
        var item = ary[i]; 
        if (isInt.test(item)) { item += 1; } 
    } 
} 
 
function while_normal() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/, 
            i = 0, 
            l = ary.length; 
    while (i < l) { 
        var item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
    } 
} 
 
function duff_fast() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/, 
            item, i = 0, 
            l = ary.length, 
            n = l % 8; 
    while (n--) { 
        item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
    } 
 
    n = parseInt(l / 8); 
    while (n--) { 
        item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
        item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
        item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
        item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
        item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
        item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
        item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
        item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
    } 
} 
 
console.log('数组长度:' + ary.length); 
console.log('Profiling will begin in 2 seconds...'); 
setTimeout(function () { 
    console.log('普通for循环测试:') 
    var currTime = new Date(); 
    console.profile(); 
    for (var i = 0; i < mult; i++) { 
        for_normal(); 
    } 
    console.profileEnd(); 
    console.log('用时:' + (new Date() - currTime) + 'ms'); 
 
    console.log('普通while循环测试:') 
    var currTime = new Date(); 
    console.profile(); 
    for (var i = 0; i < mult; i++) { 
        while_normal(); 
    } 
    console.profileEnd(); 
    console.log('用时:' + (new Date() - currTime) + 'ms'); 
 
    console.log('达夫设备循环测试:') 
    currTime = new Date(); 
    console.profile(); 
    for (var i = 0; i < mult; i++) { 
        duff_fast(); 
    } 
    console.profileEnd(); 
    console.log('用时:' + (new Date() - currTime) + 'ms'); 
}, 2000); 








var chars = '0123456789abcdef'; 
 
function getRandomString() { 
    var len = Math.ceil(Math.random() * 7) + 3; // 4-10 
    var result = ""; 
    while (len--) { 
        result += chars.charAt(Math.floor(Math.random() * chars.length)); 
    } 
    return result; 
} 
 
var size = 10000; 
var mult = 100; 
 
var ary = []; 
var lsize = size; 
while (lsize--) { ary.push('' + getRandomString() + ''); } 
 
function process(item) { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/; 
    if (isInt.test(item)) { item += 1; } 
} 
 
function for_normal() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/; 
    for (var i = 0, len = ary.length; i < len; i++) { 
        var item = ary[i]; 
        if (isInt.test(item)) { item += 1; } 
    } 
} 
 
function while_normal() { 
    var isInt = /(^[0-9]$)|(^[1-9][0-9]+$)/, 
            i = 0, 
            l = ary.length; 
    while (i < l) { 
        var item = ary[i++]; 
        if (isInt.test(item)) { item += 1; } 
    } 
} 
 
function duff_normal() { 
    var i = 0, 
            l = ary.length, 
            n = l % 8; 
    while (n--) { 
        process(ary[i++]); 
    } 
 
    n = parseInt(l / 8); 
    while (n--) { 
        process(ary[i++]); 
        process(ary[i++]); 
        process(ary[i++]); 
        process(ary[i++]); 
        process(ary[i++]); 
        process(ary[i++]); 
        process(ary[i++]); 
        process(ary[i++]); 
    } 
} 
 
console.log('数组长度:' + ary.length); 
console.log('Profiling will begin in 2 seconds...'); 
setTimeout(function () { 
    console.log('普通for循环测试:') 
    var currTime = new Date(); 
    console.profile(); 
    for (var i = 0; i < mult; i++) { 
        for_normal(); 
    } 
    console.profileEnd(); 
    console.log('用时:' + (new Date() - currTime) + 'ms'); 
 
    console.log('普通while循环测试:') 
    var currTime = new Date(); 
    console.profile(); 
    for (var i = 0; i < mult; i++) { 
        while_normal(); 
    } 
    console.profileEnd(); 
    console.log('用时:' + (new Date() - currTime) + 'ms'); 
 
    console.log('达夫设备调用外部函数循环测试:') 
    currTime = new Date(); 
    console.profile(); 
    for (var i = 0; i < mult; i++) { 
        duff_normal(); 
    } 
    console.profileEnd(); 
    console.log('用时:' + (new Date() - currTime) + 'ms'); 
 
}, 2000); 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值