PHP: performance difference between concatenated and buffer contents of a string

I do a lot of string concatenation in the code, and then outputting the output. I was wondering if there is a difference between the following two codes:

string concat

$str = '';
for($x =0; $x <= 10000; $x++):
    $str .= 'I am string '. $x . "\n";
endforeach;

Output buffering

 ob_start();
 for($x =0; $x <= 10000; $x++):
    echo 'I am string ', $x , "\n";
 endforeach;
 $str = ob_get_contents();
 ob_end_flush();
+5
source share
3 answers

Here is this assessment:

<?php

$test_1_start = microtime();

$str = '';
for ( $x = 0; $x <= 10000; $x++ ) {
    $str .= 'I am string ' . $x . "\n";
}

$test_1_end = microtime();
unset($str);
echo 'String concatenation: ' . ( $test_1_end - $test_1_start ) . ' seconds';

$test_2_start = microtime();

ob_start();
for ( $x = 0; $x <= 10000; $x++ ) {
    echo 'I am string ', $x, "\n";
}
$str = ob_get_contents();
ob_end_clean();

$test_2_end = microtime();

echo "\nOutput buffering: " . ( $test_2_end - $test_2_start ) . ' seconds';

?>

My results:

$ php -v
PHP 5.3.4 (cli) (built: Dec 15 2010 12:15:07) 
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
$ php test.php
String concatenation: 0.003932 seconds
Output buffering: 0.002841 seconds%
$ php test.php
String concatenation: 0.004179 seconds
Output buffering: 0.002796 seconds%
$ php test.php
String concatenation: 0.006768 seconds
Output buffering: 0.002849 seconds%
$ php test.php
String concatenation: 0.004925 seconds
Output buffering: 0.002764 seconds%
$ php test.php
String concatenation: 0.004066 seconds
Output buffering: 0.002792 seconds%
$ php test.php
String concatenation: 0.004049 seconds
Output buffering: 0.002837 seconds%

It seems that output + buffering echois faster, at least in CLI / on my machine.

Nevertheless, Brendan Long spoke in his comment, but there is such a slight difference in performance that the choice of one or the other is not a problem.
+5
source

I did a test using OB faster.

String: 0.003571 seconds
Output Buffer: 0.003053 seconds
StringBuilder (custom class Java/C#-Like): 0.050148 seconds
Array and Implode: 0.006248 seconds
+1
source

, , , , . .

on the second; op_start is output buffering. Until you finish it, it will be stored in the buffer. ob end will send the output from the script and the buffer will be flushed.

instead of using variables or another thing; if you don't need to do anything with the exit later, just use the echo and free up memory. Do not use unnecessary variables.

another advantage of ob_start is that you can use it with a callback.

See here http://php.net/manual/en/function.ob-start.php

0
source

All Articles