PHP回声性能

Ram*_*Ram 2 php performance echo

哪些命令能发挥最佳性能?最差?为什么?

echo 'A: '.$a.' B: '.$b.' C: '.$c;

echo 'A: ', $a, ' B: ', $b, ' C: ', $c;

echo "A: $a B: $b C: $c";
Run Code Online (Sandbox Code Playgroud)

Nik*_*kiC 5

echo 'A: ', $a, ' B: ', $b, ' C: ', $c;
Run Code Online (Sandbox Code Playgroud)

将是最快的,因为这里字符串的所有部分都直接复制到输出流,而其他变体将涉及字符串部分的第一次连接."连接"意味着对于字符串的每个部分,必须分配新的内存块并将前一个字符串复制到其中.

我将通过以下示例来说明它

echo 'Hallo', ' ', 'World', '!', "\n", 'How are you?';
// vs.
echo 'Hallo' . ' ' . 'World' . '!' . "\n" . 'How are you?';
Run Code Online (Sandbox Code Playgroud)

第一个将5个字节+ 1个字节+5个字节+ 1个字节+ 1个字节+12个字节复制到输出流,从而复制25个字节.第二个创建一个包含5个字节的字符串,然后创建一个包含6个字节的字符串并将5 + 1个字节复制到其中,然后创建一个包含11个字节的字符串并将6 + 5个字节复制到其中,然后创建一个包含12个字节的字符串将11 + 1个字节复制到其中,然后创建一个包含13个字节的字符串并将12 + 1个字节复制到其中,然后创建一个包含25个字节的字符串,并将13 + 12个字节复制到其中,然后最终复制这些字节.字节到输出缓冲区.这将复制92个字节,并完成更多的内存分配.

但实际上,你不应该关心这一点.我非常怀疑你的应用程序的瓶颈是echo性能;)

但是仍然有一个原因,我使用逗号而不是连接运算符:逗号具有所有运算符优先级中最低的.这样你就不必写括号.

例如,这将工作:

echo 'The script executed in ', microtime(true) - $startTime, ' seconds';
Run Code Online (Sandbox Code Playgroud)

虽然这不会按预期工作(我认为是未定义的行为):

echo 'The script executed in ' . microtime(true) - $startTime . ' seconds';
Run Code Online (Sandbox Code Playgroud)

  • @ram:LOL你不要释放一个重载服务器来改变你的回声;) (3认同)