Является ли [x, y, z] .join ('') действительно быстрее, чем x + y + z для строк? - PullRequest
7 голосов
/ 25 декабря 2011

Является ли [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 являются одними из самых осведомленных, я удивляюсь.Конечно, эта строка будет работать только один раз на загрузку страницы, и можно сказать, что любая разница в скорости незначительна.Но все же?

Ответы [ 3 ]

6 голосов
/ 25 декабря 2011

Метод Array .join() (-trick) для объединения строк имеет свои корни тогда, когда веб-сайты работали в Internet Explorer, как много. Для IE6 + 7 это очень верно, чем .join() на намного быстрее, чем использование оператора + из-за очень плохого поведения со строковыми операциями в IE.

Для других браузеров разница в производительности была не такой большой, поэтому было бы неплохо использовать .join() (опять же, тогда). В настоящее время большинство движков оптимизируют строковые операции в течение длительного времени, и если вы не думаете, что ваш код много работает в IE6 + 7, вам просто нужно использовать +.

2 голосов
/ 25 декабря 2011

Использование Firebug Console в Firefox 6.0.2 с использованием следующего кода:

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 для «соединения», поэтому кажется, что соединение медленнее. Скорее всего, это связано с необходимостью создания массива для объединения. Также это может отличаться в разных браузерах с разными интерпретаторами.

1 голос
/ 25 декабря 2011

Вот пример, который я запустил на Google Chrome.

Попробуй другие броширы ...

В хроме для меня + всегда был быстрее ...

http://jsperf.com/join

http://jsperf.com/join-6

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...