function  $p(msg){

var ua = navigator.userAgent.toLowerCase();
if( ua.indexOf("firefox") > -1){
console.log(msg);
}else{
alert(msg)
}


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();$p("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();$p("<br />Concatenation with StringBuffer: "
 + (d2.getTime() - d1.getTime()) + " milliseconds");我的结果是:Concatenation with plus: 1 millisecondsConcatenation with StringBuffer: 3 milliseconds
问题来了,  大家觉得哪个会更快呢??   
w3school 上的说明是推荐 数组的方式, 但为什么我的结果却是累加的方式更快呢??

解决方案 »

  1.   

    现在的浏览器都做了优化,你可以在ie6下测试一下。这么简单的功能没有必要在封装成StringBuffer,多余的函数调用也会影响性能。
    var buffer = [];
    d1 = new Date();
    for (var i = 0; i < 10000; i++) {
    buffer.push("text");
    }
    var result = buffer.join('');
      

  2.   

    数据量大的话就更明显了 Concatenation with plus: 3 millisecondsConcatenation with StringBuffer: 38 milliseconds
      

  3.   


    Concatenation with plus: 3 milliseconds   这个是累加的 Concatenation with StringBuffer: 38 milliseconds  这个是数组的 ....
      

  4.   


    function $p(msg){var ua = navigator.userAgent.toLowerCase();
    if( ua.indexOf("firefox") > -1){
    console.log(msg);
    }else{
    alert(msg)
    }} var d1 = new Date();
    var str = "";
    for (var i=0; i < 10000; i++) {
      str += "text";
    }
    var d2 = new Date();$p("Concatenation with plus: "
     + (d2.getTime() - d1.getTime()) + " milliseconds");var buffer = [];
    d1 = new Date();
    for (var i=0; i < 10000; i++) {
      buffer.push("text");
    }
    var result = buffer.join('');
    d2 = new Date();$p("<br />Concatenation with StringBuffer: "
     + (d2.getTime() - d1.getTime()) + " milliseconds");
    IE6 下 94 ms 和 15ms
    FF 下 都是 1ms