IE7和IE6下+=的低效问题

话不多说,看代码

<script>
var getTimeInMs() = function () {
      var date = new Date();
      return date.getTime();
}
//使用+=来连接字符串
var str = "I'm a short string after all.",
      newStr = "",
      appends = 15000,
      stime = getTimeInMs();
      while (appends--) {
            newStr += str;
      }
      alert(getTimeInMs() - stime);
//使用Array.prototype.join来连接字符串
var appends = 15000,
      stime = getTimeInMs(),
      arr = [];
      while (appends--) {
            arr.push(str);
      }
      newStr = arr.join("");
      alert(getTimeInMs() - stime);
</script>

在IE8和所有现代浏览器上,第一段代码会快一点,速度在10ms左右,但是在IE6上,第一段代码执行了2秒还多,后一段执行了40ms,当我把循环次数加大到50000的时候,第一段代码执行了42秒,第二段是110ms。

结论:如果你的用户中有IE6用户,而且有大量的字符串拼接,建议使用Array.prototype.join来处理。

这是为什么呢?以下引用一段文字:

IE7 and earlier use an inferior implementation of concatenation in which each pair of concateated strings always be copied to a new memory location. …. IE7’s naive concatenation algorithm requires that the browser repeatedly copy and allocate memory for larger and larger strings each time through the loop. The result is quadratic running time and memory consumption.

 

Tonitech版权所有 | 转载请注明出处: http://www.tonitech.com/1794.html

《IE7和IE6下+=的低效问题》有1个想法

发表评论