Performance of variable expansion vs. sprintf in PHP

后端 未结 6 1215

Regarding performance, is there any difference between doing:

$message = \"The request $request has $n errors\";

and

$messa         


        
6条回答
  •  半阙折子戏
    2020-12-06 16:50

    I am surprised, but for PHP 7.* "$variables replacement" is the fastest approach:

    $message = "The request {$request} has {$n} errors";
    

    You can simply prove it yourself:

    $request = "XYZ";
    $n = "0";
    $mtime = microtime(true);
    for ($i = 0; $i < 1000000; $i++) {
            $message = "The request {$request} has {$n} errors";
    }
    $ctime = microtime(true);
    echo '
    
    "variable $replacement timing": '.  ($ctime-$mtime);
    
    
    
    
    $request = "XYZ";
    $n = "0";
    $mtime = microtime(true);
    for ($i = 0; $i < 1000000; $i++) {
            $message = 'The request '.$request.' has '.$n.' errors';
    }
    $ctime = microtime(true);
    echo '
    
    "concatenation" . $timing: '.  ($ctime-$mtime);
    
    
    
    $request = "XYZ";
    $n = "0";
    $mtime = microtime(true);
    for ($i = 0; $i < 1000000; $i++) {
            $message = sprintf('The request %s has %d errors', $request, $n);
    }
    $ctime = microtime(true);
    echo '
    
    sprintf("%s", $timing): '.  ($ctime-$mtime);
    

    The result for PHP 7.3.5:

    "variable $replacement timing": 0.091434955596924

    "concatenation" . $timing: 0.11175799369812

    sprintf("%s", $timing): 0.17482495307922

    Probably you already found recommendations like 'use sprintf instead of variables contained in double quotes, it’s about 10x faster.' What are some good PHP performance tips?

    I see it was the truth but one day. Namely before the PHP 5.2.*

    Here is a sample of how it was those days PHP 5.1.6:

    "variable $replacement timing": 0.67681694030762

    "concatenation" . $timing: 0.24738907814026

    sprintf("%s", $timing): 0.61580610275269

提交回复
热议问题