【问题标题】:Which way is better in Javascript, string concatenation or with array? [duplicate]Javascript,字符串连接或数组哪种方式更好? [复制]
【发布时间】:2012-06-27 11:27:49
【问题描述】:

可能重复:
Why is string concatenation faster than array join?

通常我们需要在Javascript中动态生成html内容。 如下两种方式:

var s = "", a = [];
for (var i = 0, l = data.length; i < l; i++) {
  s += "<a href='#'>" + data[i].name + "</a>";
  a[i] = "<a href='#'>" + data[i].name + "</a>";
}
container.innerHTML = s; // or
container.innerHTML = a.join("");

哪种方式更好?主要关注性能,否则差异可以忽略。

【问题讨论】:

标签: javascript


【解决方案1】:

【讨论】:

    【解决方案2】:

    这远非明确,作为必须支持 IE6/7 的遗留问题,我一直认为数组方法要快得多,但事实似乎并非如此。

    这是一个使用小字符串 'a' 的测试:

    这是一个使用大字符串的测试(lorem ipsum 的第一段):

    在所有现代浏览器(我测试过 IE9/Chrome19/FF12)中,连接速度更快,使用更长的字符串时速度更快。

    值得注意的是,虽然在 IE7 中,数组方法 要快得多,所以如果你必须支持它(我现在会三思而后行支持 IE7),那么你应该很可能使用数组方法,因为 IE7 的字符串连接速度太慢了,太可笑了。

    实际上,如果您必须支持 IE7,我会避免使用任何类型的重型客户端 JS!

    【讨论】:

      【解决方案3】:

      数组方式比较好。

      当您连接字符串时,您将在每次迭代时将整个前一个字符串复制到一个新字符串中。最后,您将复制比结果字符串的大小更多的数据。对于每一次额外的迭代,您复制的数据量大约会增加一倍,因此它会变得非常非常快。

      【讨论】:

      • 除了旧版本的 IE 之外,这在任何情况下都不是真的,这个答案中有一些很好的信息stackoverflow.com/a/7299040/68818。根据我的测试,Array.join 在 chrome 中似乎也快得多,但在 Firefox 中要慢得多。
      • @AndrewBarrett:是的,他们似乎在后来的浏览器中对字符串连接做了一些真正的工作,也许是因为字符串连接被滥用了太多。字符串连接仍然是一种不好的方法,并且在未来的浏览器中可能不会保持优化。
      猜你喜欢
      • 2012-12-08
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      • 1970-01-01
      • 2022-11-16
      • 2012-12-19
      • 2021-02-24
      • 2011-10-17
      相关资源
      最近更新 更多