我正在寻找这个question的答案,我在这些答案之间进行了一些性能测试:
console.time("first_test");
for( i=0;i<10000;i++)
result=function1(str);
console.log(result);
console.timeEnd("first_test");
console.time("second_test");
for( i=0;i<10000;i++)
result=function2(str);
console.log(result);
console.timeEnd("second_test");
this gives:
first_test: 232ms
second_test: 21ms
And if I reverse the order of the tests:
second_test: 128ms
first_test: 102ms
函数几乎和正则表达式一样,但即使我更改了参数中传递的字符串,第二个函数的执行速度总是比第一个函数执行的速度快。
所以我首先想知道第一个函数如何加速第二个函数,以及更正常地如何缓存正则表达式。
function function1(str){
return str.replace(/(_)|(\'\W|\'$)|(^\'|\W\')|(\+\+)|([a-zA-Z0-9\ \&\-\.\!\'])|(.)/g,function(car,p1,p2,p3,p4,p5,p6,offset){
if(p1) return " ";
if(p2) return sanitize(p2.slice(1));
if(p3) return sanitize(p3.slice(0,-1));
if(p4) return p4.slice(0,p4.length-p4.length%2);
if(p5) return car;
if(p6) return "";
});
}
function function2(str){
return str.replace(/(_)|(\++)|([a-zA-Z0-9\ \&\-\.\!])|(\'\W|\'$)|(^\'|\W\')|(\W)/g,function(car,p1,p2,p3,p4,p5,p6){
if(p1) return " ";
if(p2) return p2.slice(0,p2.length-p2.length%2);
if(p3) return car;
if(p4) return p4.slice(1);
if(p5) return p5.slice(0,-1);
if(p6) return "";
});
}
答案 0 :(得分:-1)
我尝试过提供相同的功能并在不同的循环中运行两次,并且我获得了相同功能的不同控制台时间。大多数情况下,首次测试运行总是需要更长时间。但是当你添加第3个循环时,有时第2个循环更快,通常第3个循环更快。它必须与浏览器功能有关。
function test(){
console.time("second_test");
for( i=0;i<10000;i++)
result=function2("str");
console.log(result);
console.timeEnd("second_test");
function test2() {
console.time("first_test");
for (i = 0; i < 10000; i++)
result = function2("str");
console.log(result);
console.timeEnd("first_test");
}
return test2()
}
test();