JavaScript中全局变量、函数内变量以及常量表达式的效率测试

  作者:bea

<html> <body> <script type="text/javascript"> var r, s = "this is a very very looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong string", x = /^s+|s+$/g; document.writeln("字符串测试"); (function(){ docu




<html>
<body>
<script type="text/javascript">
var r, s = "this is a very very looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong string", x =
/^s+|s+$/g;
document.writeln("字符串测试
");
(function(){
document.write("全局->全局:");
var t = new Date();
for(var i = 0; i < 3000000; i++){
r = s;
}
document.write(new Date() - t);
document.writeln("
");
})();
(function(){
document.write("全局->本地:");
var s = window.s;
var t = new Date();
for(var i = 0; i < 3000000; i++){
r = s;
}
document.write(new Date() - t);
document.writeln("
");
})();
(function(){
document.write("常量->本地:");
var r;
var t = new Date();
for(var i = 0; i < 3000000; i++){
r = "this is a very very looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong string";
}
document.write(new Date() - t);
document.writeln("
");
})();
(function(){
document.write("属性->本地:");
var r;
var s = { 0: window.s };
var t = new Date();
for(var i = 0; i < 3000000; i++){
r = s[0];
}
document.write(new Date() - t);
document.writeln("
");
})();
(function(){
document.write("本地->本地:");
var r;
var s = window.s;
var t = new Date();
for(var i = 0; i < 3000000; i++){
r = s;
}
document.write(new Date() - t);
document.writeln("
");
})();
document.writeln("正则表达式测试
");
(function(){
document.write("全局->全局:");
var t = new Date();
for(var i = 0; i < 3000000; i++){
r = x;
}
document.write(new Date() - t);
document.writeln("
");
})();
(function(){
document.write("全局->本地:");
var x = window.x;
var t = new Date();
for(var i = 0; i < 3000000; i++){
r = x;
}
document.write(new Date() - t);
document.writeln("
");
})();
(function(){
document.write("常量->本地:");
var r;
var t = new Date();
for(var i = 0; i < 3000000; i++){
r = /^s+|s+$/g;
}
document.write(new Date() - t);
document.writeln("
");
})();
(function(){
document.write("属性->本地:");
var r;
var x = { 0: window.x };
var t = new Date();
for(var i = 0; i < 3000000; i++){
r = x[0];
}
document.write(new Date() - t);
document.writeln("
");
})();
(function(){
document.write("本地->本地:");
var r;
var x = window.x;
var t = new Date();
for(var i = 0; i < 3000000; i++){
r = x;
}
document.write(new Date() - t);
document.writeln("
");
})();
</script>
</body>
</html>




[Ctrl+A 全选 注:
如需引入外部Js需刷新才能执行]

注意:在IE中进行这个测试时需要先改变IE的"最大脚本步数":
[HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerStyles]
"MaxScriptStatements"=dword:ffffffff
这么看的话使用函数内的本地变量时效率要比用全局变量或者常量表达式高出许多。而属性的效率就糟得很恐怖了,在Firefox和Safari中居然比利用全局变量还慢上好多倍。
直接用字符串常量要比利用全局变量快,但创建正则表达式就比起用全局变量要慢上很多了。
观察数字还可以发现:在Google Chrome、Opera和IE中,用属性和利用全局变量相差不大(Opera的表现也许是其垃圾回收机制造成的),从这个现象上看的话,这三种浏览器中所谓的全局变量有可能根本就是全局对象的属性。



有用  |  无用

猜你喜欢