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);