2016-11-21 6 views
2

мне было интересно, если есть какая-то разница в производительности между следующими утверждениями в concatinate две строки str1='a' и str2='b'Есть ли разница между CONCAT(), «=» и «+ =»

str1 = str1 + str2; 

или

str1 += str2; 

или

var res = str1.concat(str2); 

Я попытался следующие мне asure производительность, но выход, похоже, сильно варьируется от одного исполнения к другому для одного и того же оператора.

var str1='a', str2='b'; 
var old_time=new Date(); 
for (var i=0; i<=1000000 ; i++){  
    str1=str1+str2;  // change this one with the other statements 
} 
var new_time=new Date(); 
console.log(new_time - old_time); 
+4

Вы создали [jsperf] (https://jsperf.com/)? –

+0

Нет Я не знал о существовании этого инструмента – achref

+2

Возможный дубликат [В чем отличие метода + operator и concat() в JavaScript] (http://stackoverflow.com/questions/34465804/what-is- the-difference-of-operator-and-concat-method-in-javascript) – Wondercricket

ответ

0

В соответствии с MDN: "настоятельно рекомендуется, чтобы операторы присваивания (+, + =) используются вместо метода CONCAT() Смотрите этот performance test.."

+0

Почему downvote? –

+1

Я не голосовал, но это [ответ только для ссылок] (http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good- ответы). – ssube

+0

IMO не так много нужно сказать, и ссылка исходит из определенного источника, явно отвечая на вопрос: (* Мне было интересно, есть ли разница в производительности между следующими утверждениями *). –

-1

Разница между этими 3 метода конкатенации заключается в том, что метод concat должен быть получен/найден по адресу String.prototype (я полагаю, String ссылается на ссылку, не получает/ищет в глобальном объекте), поэтому, будучи «медленнее».

I`m не уверен += и = ... + ..., но += должен быть быстрее, чем = ... + ..., потому что `s родной.

+1

Не уверены, что «должны», «+» и «+ =» являются встроенными операторами. В старых версиях IE, по крайней мере, объединение строк с '+ =' было намного медленнее, чем '+' с назначением, поэтому я ожидал бы, что он будет зависимым от реализации. – RobG

+0

@RobG Странно! То, что я знаю, быстрее, медленнее. Этот «String # concat» в тестах производительности при комментариях был медленнее, и это не имеет смысла. '+ =' должен быть быстрее, чем '=', потому что вы не должны указывать более старое значение конкатенации (которое было бы обработано изначально). – Hydro

0

В то время как

str1 += str2; 

, казалось бы, чуть-чуть быстрее, чем str1 = str1 + str2; НО поскольку строки являются неизменными, вы не можете повторно использовать старую справку с str1. Пример:

str0 = str1; // duplicate reference 
str1 += str2; 

str0похоть сохранить свое старое значение (до конкатенации с str2) так после конкатенации, str1 новый объект (в отличие от изменяемых объектов, где на месте конкатенации может быть быстрее, потому что мы 'd ожидают, что s0 также изменится)

Я бы предпочел синтаксис +=, потому что это более кратким и понятным.

+0

VM может легко и юридически оптимизировать 'x = x + y' в' x + = y', особенно для примитивов, таких как большинство строк. Поскольку строки являются неизменяемыми (как правило, копируются на запись и могут использовать некоторые формы веревок), бит о временных объектах также вводит в заблуждение, и часто копия (или, в зависимости от виртуальной машины) никогда не будет выполнена). – ssube

+0

@ssube Я думал, что над и сильно отредактировал мой ответ, потому что понял, как он был очень неправильным в контексте javascript. –

Смежные вопросы