Производительность PHP: добавление или добавление строк - PullRequest
1 голос
/ 25 ноября 2010

Что более производительно: ($longstring . $longstring) . $longstring или $longstring . ($longstring . $longstring)? Является ли оператор конкатенации в левом или правом ассоциативном выражении? Оптимальна ли его ассоциативность, или я должен переопределить ее ассоциативность скобками?

Ответы [ 4 ]

2 голосов
/ 25 ноября 2010

Это действительно, действительно не имеет значения. Разница в лучшем случае составляет несколько миллисекунд.

Напишите его так, как вам лучше подходит ваш стиль кодирования и удобство обслуживания в будущем.

0 голосов
/ 25 ноября 2010

$x . $y . $z совпадает с ($x . $y) . $z

Тем не менее, ни один из подходов не позволяет достичь производительности. Это как:

// ($x . $y) . $ z
$tmp = $x . $y;
return $tmp . $z;

против

// $x . ($y . $ z)
$tmp = $y . $z;
return $x . $tmp;

В обоих случаях происходит одинаковое количество конкатенаций. Если бы один метод был быстрее (но ни один из них), то он зависел бы от длины $x, $y и $z. (То есть быстрее ли вы добавляете короткую строку к длинной строке или добавляете длинную строку к короткой строке - это действительно вопрос, который вы задаете. Без тестирования я бы сказал, что разница незначительна)

Теперь они различны: $x .= $y и $x = $y . $x. Первая - это операция добавления ASSIGN_CONCAT, которая может быть значительно быстрее, чем добавление (CONCAT, ASSIGN). Обратите внимание, что $x = $x . $y, хотя функционально эквивалентно $x .= $y, также является двумя операциями. Таким образом, этот стиль добавления будет иметь такую ​​же разницу в производительности (если есть), как и при добавлении.

0 голосов
/ 25 ноября 2010

Два не должно быть никакой разницы между двумя. Оба сначала выделяют дополнительную строку 2n для ($ longstring. $ Longstring), а затем дополнительную строку 3n для всего этого. Паренсы смущают меня, потому что они должны передать какой-то смысл, но в этом случае они просто есть, потому что вы думаете, что это быстрее. Если в какой-либо группе нет ничего особенного, $s1 . $s2 . $s3 предпочтительнее.

Микроуправление такими крошечными деталями по причинам производительности - пустая трата времени. Как сказал Пекка, это дает невероятно маленькую разницу в скорости. Вы могли бы потратить столько же времени на поиск вещей, которые могли бы значительно улучшить производительность.

Редактировать: Если строки очень длинные и очень много и замедляют запросы на реальные, вы должны рассмотреть возможность их передачи без создания одной строки. Сохраните их массив, а затем выведите их или сохраните без объединения.

0 голосов
/ 25 ноября 2010

Как сказал Пекка, это действительно не имеет значения, и я не думаю, что в этом есть какой-то серьезный критерий.Вы должны попробовать и измерить, если вы действительно хотите знать.

Что касается ассоциативности, я думаю, что наиболее распространенные конкатные функции слева направо.

http://www.php.net/manual/en/language.operators.string.php

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