都说在javascript中,用下面的方式处理字符串的连接会存在效率问题,var str = "hello";
str += "world";因为这种操作非常消耗资源.如果重复这一过程几百次,甚至几千次,就会造成性能问题。很多地方也建议使用下面的方式处理,效果会更好。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("<br/>concatenation: " + (d2.getTime() - d1.getTime()) + " milliseconds" );
StringBuffer对象实现:
var oBuffer = new StringBuffer();
d1 = new Date();
for (var i=0; i < 10000; i++){
oBuffer.append("text");
}
var sResult = oBuffer.toString();
d2 = new Date();
//输出两者所用的时间差
document.write("<br/>concatenation with StringBuffer: " + (d2.getTime() - d1.getTime()) + " milliseconds" ); ------------------------------------------------------------------------------------------------------------------
测试结果(由于测试电脑性能较差,所以时间也较长)
IE 6.0
第一次加载页面显示结果
concatenation: 844 milliseconds
concatenation with StringBuffer: 218 milliseconds多次刷新后
concatenation: 500 milliseconds
concatenation with StringBuffer: 219 millisecondsGoogle Chrome 3.0
第一次加载页面显示结果
concatenation: 3 milliseconds
concatenation with StringBuffer: 16 milliseconds多次刷新后
concatenation: 2 milliseconds
concatenation with StringBuffer: 5 milliseconds
----------------------------------------------------------------------------------------------------------正如上所示,使用了StringBuffer对于ie来说,性能确实提升不少,但是对于google浏览器来说,却得到相反的结果。而一个普遍认同的观点是,google浏览器比ie速度快。那么上面的结果如何解释呢?如果我们要在字符串的连接这一问题上写出浏览器兼容性良好的js代码,又该如何处理?希望大家讨论。回家过年,散分,也提前祝大家新年快乐
str += "world";因为这种操作非常消耗资源.如果重复这一过程几百次,甚至几千次,就会造成性能问题。很多地方也建议使用下面的方式处理,效果会更好。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("<br/>concatenation: " + (d2.getTime() - d1.getTime()) + " milliseconds" );
StringBuffer对象实现:
var oBuffer = new StringBuffer();
d1 = new Date();
for (var i=0; i < 10000; i++){
oBuffer.append("text");
}
var sResult = oBuffer.toString();
d2 = new Date();
//输出两者所用的时间差
document.write("<br/>concatenation with StringBuffer: " + (d2.getTime() - d1.getTime()) + " milliseconds" ); ------------------------------------------------------------------------------------------------------------------
测试结果(由于测试电脑性能较差,所以时间也较长)
IE 6.0
第一次加载页面显示结果
concatenation: 844 milliseconds
concatenation with StringBuffer: 218 milliseconds多次刷新后
concatenation: 500 milliseconds
concatenation with StringBuffer: 219 millisecondsGoogle Chrome 3.0
第一次加载页面显示结果
concatenation: 3 milliseconds
concatenation with StringBuffer: 16 milliseconds多次刷新后
concatenation: 2 milliseconds
concatenation with StringBuffer: 5 milliseconds
----------------------------------------------------------------------------------------------------------正如上所示,使用了StringBuffer对于ie来说,性能确实提升不少,但是对于google浏览器来说,却得到相反的结果。而一个普遍认同的观点是,google浏览器比ie速度快。那么上面的结果如何解释呢?如果我们要在字符串的连接这一问题上写出浏览器兼容性良好的js代码,又该如何处理?希望大家讨论。回家过年,散分,也提前祝大家新年快乐
解决方案 »
- 碰到个dwr/util.js与jquery.js的冲突问题
- 关开论坛开发价格 外包
- 可否类似vbs中on error resume next一样处理
- 如何统计数据整和,求解决方案,目前的思路是循环遍历,但是具体不知道如何写好,跪求高手解答。
- alert各行,两列积之和.救命!!!!!!!!
- 用什么播放器可以防止MP3被下载???
- 如何给一个FORM内的所有TEXT INPUT加上,相同的onChang事件,
- 请各位帮忙,我是新手,关于TextBox的问题!
- 请教,我在一个多帧的窗口中怎么实现用一帧控制另外一帧的打印?
- 用window.close()方法关闭一个IE窗口时会出现一个提示框问是否关闭,怎样让它直接关闭而不做提示?
- |zyciis| 求jquery 查询出没有for的label
- IE6的option如何实现title功能
http://www.joymood.cn/posts/2009/09/300.html
我倒是经常用数组:
var arr = new Array();
d1 = new Date();
for (var i=0; i < 10000; i++){
arr.push("text");
}
var sResult = arr.join('');
d2 = new Date();
//输出两者所用的时间差
document.write(" <br/>concatenation with StringBuffer: " + (d2.getTime() - d1.getTime()) + " milliseconds" );
var str = "";
for (var i=0; i < 30000; i++) {
str += i;
}
var d2 = new Date();
document.write(" <br/>concatenation: " + (d2.getTime() - d1.getTime()) + " milliseconds" );
StringBuffer对象实现:
var oBuffer = new StringBuffer();
d1 = new Date();
for (var i=0; i < 30000; i++){
oBuffer.append(i);
}
var k1 = new Date();
var sResult = oBuffer.toString()
var k2 = new Date();;
d2 = new Date();
//输出两者所用的时间差
document.write(" <br/>concatenation with join: " + (k2.getTime() - k1.getTime()) + " milliseconds" );
document.write(" <br/>concatenation with StringBuffer: " + (d2.getTime() - d1.getTime()) + " milliseconds" ); 观察下JOIN的时间 不过多个浏览器测试证明IE执行JS是慢了点