浏览器执行JS时的性能简单对比
今天我想测试一下浏览器执行JavaScript时,是用脚本循环快,还是不用循环,而绕道调用内置函数快。因为大字符串连接在不同的浏览器中有很大差异,所以我使用了数组进行测试,查找数组元素值为指定值的下标。测试的浏览器为IE8、Chrome 4和FireFox 3全球排名最靠前面的三款浏览器。
使用了两种方法来对比:
第一种,使用普通方法,遍历数组逐个判断。
第二种,把数组元素连接成字符串,再用两次正则把目标元素值之后的所有内容清空及所有非分割符的字符清空,最后剩下的分割符的个数即是我们所需要的索引。
结果当然是这两种方法根本没有可比性,说明不了我想测试的问题。但却通过这个测试,反应出几个浏览器对循环及正则的支持情况。
下面给出测试代码:
<script type=”text/javascript”>
// 这里共三行用于生成一百万零一个元素的数组
// 最后一个元素是我们需要查找的目标元素
var t,len=1000000;
var str=new Array(len).join(“1″)+”2″;
var a=str.split(“”);
//使用普通循环进行查找
function getIndex_1(arr){
for(var i=0;i<=len;i++){
if(arr[i]==”2″) break;
}
return i;
}
//使用正则进行查找并再次使用正则计算位置
function getIndex_2(arr){
return (“|”+arr.join(“|”)+”|”).replace(/\|2\|.*$/,””).replace(/[^\|]/g,””).length;
}
//开始测试
var st2,st1=new Date().getTime();
t=getIndex_1(a);
//t=getIndex_2(a);
st2=new Date().getTime();
document.write(t+” “+(st2-st1));
</script>
在我的配置不是很好的WindowsXP平台的本本上测试的结果:
浏览器Internet Explorer 8 循环:1500 正则:875
浏览器Chrome 4 循环:62 正则:1570
浏览器FireFox 3 循环:44 正则:820
通过这个结果表明:
Chrome 4与FireFox 3对JavaScript的基本语言结构的支持情况非常友好,而IE8则表现得令人不太满意。
FireFox 3与IE8对正则的支持相对正常,但Chrome 4表现反常.
顺便再说说大字符串的连接问题.
这个网上讨论得比较多,FireFox与Chrome都对字符串连接进行了优化,当两个字符串连接成一个更长的字符串的时候,它们并不是新建一个新的字符串,而是在内存中把这两个字符串的首尾在逻辑上连接起来,所以它们在连接字符串的时候速度相当快。而IE则不然,它是老老实实的新建了一个新的字符串,并把两个字符串克隆到新字符串中。这样效率相当会比不上FireFox与Chrome.,且当字符串变大的时候,差距呈指数变化。在IE在的解决办法是使用数组来存储各段字符串,最后再使用数组的 .join() 方法把各段一次连接起来。
文章引用地址:http://www.iefans.net/liulanqi-zhixing-js-xingneng-duibi/ 作者:iefans

这个测试的速度,其实在用户使用的过程中基本都感觉不到,没有必要计较这些数据。