【问题标题】:Is [x,y,z].join('') really faster than x + y + z for strings?对于字符串, [x,y,z].join('') 真的比 x + y + z 快吗?
【发布时间】:2011-12-24 21:34:33
【问题描述】:

对于字符串,[x,y,z].join('') 真的比 x + y + z 快​​吗?

在 join() 更快的印象下,我开始通过我的代码来使用它而不是 +,然后我在 Google Analytics 代码中遇到了以下行:

    ga.src = ('https:' === document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';

假设 Google 编码员是知识最渊博的人之一,这让我感到奇怪。当然,该行在每次页面加载时只会运行一次,可以说任何速度差异都可以忽略不计。但还是?

【问题讨论】:

  • 函数的速度由 JavaScript 实现决定,不同浏览器的实现不同。用于测试 - jsperf.com
  • 这也是[x,y].join('')。我相信可以节省更多的参数(因为您每次使用 + 进行一次调用,而 join 只是一个函数调用。)
  • +Bakudan,发现了一个应该能有所启发的测试:jsperf.com/concat-vs-join2/4

标签: javascript performance concatenation


【解决方案1】:

用于连接字符串的 Array .join() 方法 (-trick) 起源于网站在 Internet Explorer 上运行的时候。对于 IE6 + 7,它比 .join() 非常真实,比使用 + 运算符快很多,因为 IE 中字符串操作的行为非常糟糕。

对于其他浏览器,性能差异并没有那么大,因此使用.join() 是一个很好的建议(同样,当时)。如今,大多数引擎都对字符串操作进行了大量优化,除非您认为您的任何代码经常在 IE6+7 中运行,否则您应该使用+。

【讨论】:

    【解决方案2】:

    使用以下代码在 Firefox 6.0.2 中使用 Firebug 控制台:

    b = new Date().getTime(); for (var i = 0; i < 10000; i++) {a = "sfhfdshdshsdh" + "sfhsfdhsfhdsfh" + "shsfdsdgsdgsgsdfgdfsgsfdghsdfhsdh";} c = new Date().getTime(); d = c - b;
    

    和

    b = new Date().getTime(); for (var i = 0; i < 10000; i++) {a = ["sfhfdshdshsdh","sfhsfdhsfhdsfh","shsfdsdgsdgsgsdfgdfsgsfdghsdfhsdh"].join();} c = new Date().getTime(); d = c - b;
    

    “+”平均在 40 秒以下,“加入”平均在 50 秒左右,所以看起来加入速度较慢。这很可能是因为需要为连接创建一个数组。此外,在具有不同解释器的不同浏览器中,这可能会有所不同。

    【讨论】:

      【解决方案3】:

      这是我在 google chrome 上运行的示例。

      试试其他浏览器....

      在 chrome 中对我来说 + 总是更快...

      http://jsperf.com/join

      http://jsperf.com/join-6

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-26
        • 1970-01-01
        • 1970-01-01
        • 2022-01-12
        • 1970-01-01
        • 1970-01-01
        • 2012-01-07
        • 1970-01-01
        相关资源
        最近更新 更多