您的位置:首页 > Web前端 > JavaScript

javascript 字符串连接的性能问题(多浏览器)

2010-01-20 12:48 896 查看
由于最近项目中碰到了javascript 字符串连接的性能问题,所以,整理出来和大家分享下,如有不同观点,请大家多多指教

<html>

<head>

<title>Example</title>

</head>

<body>

<strong>Note:</strong> The latest versions of Firefox seem to have fixed the string concatenation problem. If you are using Firefox 1.0 or later, the string buffer may actually take longer than normal string concatenation.

<script type="text/javascript">

function StringBuffer() {

this.__strings__ = new Array;

}

StringBuffer.prototype.append = function (str) {

this.__strings__.push(str);

};

StringBuffer.prototype.toString = function () {

return this.__strings__.join("");

};

var d1 = new Date();

var str = "";

for (var i=0; i < 10000; i++) {

str += "text";

}

var d2 = new Date();

document.write("Concatenation with plus: " + (d2.getTime() - d1.getTime()) + " milliseconds");

var buffer = new StringBuffer();

d1 = new Date();

for (var i=0; i < 10000; i++) {

buffer.append("text");

}

var result = buffer.toString();

d2 = new Date();

document.write("
Concatenation with StringBuffer: " + (d2.getTime() - d1.getTime()) + " milliseconds");

</script>

</body>

</html>

在 Firefox/3.0.3中执行的结果如下:

Concatenation with plus: 5 milliseconds

Concatenation with StringBuffer: 10 milliseconds

在IE6中执行结果如下:

Concatenation with plus: 234 milliseconds

Concatenation with StringBuffer: 62 milliseconds

在IE6,IE7下测试使用StringBuffer比使用加号确实可以节省50%~66%的时间,在IE8下几乎没什么影响(经测试执行结果不是很稳定),但在火狐FF3.5上,Opera浏览器上,chrome浏览器上结果却刚好相反,“+”运算明显要高于我们写的StringBuffer方法,而且也是50%的差距。所以,当我们处理javascript字符串的连接优化的时候,一定要区分浏览器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息