PHP:一个大的echo(或print)VS许多小的echo(或print)

8

我需要输出一个包含1000行数据的表格,我应该将所有数据一次性输出还是逐行输出?

6个回答

13
根据http://phplens.com/lens/php-book/optimizing-debugging-php.php(见文章的最后三分之一),您应该使用一个大的echo语句,并使用单引号而不是双引号,这样PHP就不必检查字符串中的变量。
支持的简单测试:
$bgn = microtime(true);
for ($i=0; $i<=1000; $i++)
{
  echo $i;
}
echo "\n", round(microtime(true)-$bgn, 4), "\n";
unset($bgn);
$bgn = microtime(true);
$b = '';
for ($i=0; $i<=1000; $i++)
{
  $b.=$i;
}
echo $b;
echo "\n", round(microtime(true)-$bgn, 4), "\n";
?>

第一次运行返回0.0022,而第二次运行返回0.0007...然而这只是少量的数据,内存使用非常小。


是的,这篇文章展示了一个非常好的例子,如何通过使用echo等方式来优化这样的循环。 - Tobias
虽然它没有提到单引号,但这只是你的问题。 - Your Common Sense
如果使用双引号,PHP 会尝试在字符串中查找变量以解析它们,而单引号则不会,因此单引号会稍微快一些。 - Tobias

5

我会逐行复制。这样可以节省内存(在输出之前不需要加载所有行到内存中)。


1

每次返回一行数据,在使用更少的缓冲内存和更少的内存方面(您不需要使用变量来保存数据)

基于我对所选答案进行的测试,结果正好相反


1

这是旧的内容,有些已经过时了,但你仍然应该阅读《一段字符串有多长?》

话虽如此,除非你已经对其他所有内容进行了大量优化,否则echo不太可能成为你的瓶颈。


只是想说一下,你的链接指向了一篇关于PHP操作码的有趣文章。即使不关心优化,也非常有启发性。 - Niccolo M.

0

这取决于你的目标。如果字段数量不多,时间消耗通常不是问题,同样对于此操作的内存使用情况也是如此(今天的内存足够大,仅有1000行不会引起任何问题)。

我的感觉告诉我,逐行回显它以进行修改可能更实际,但我认为这并不是什么大问题。做你喜欢的事情吧。


0

正如Pekka所说的那样,这并不重要。以最好的可读性来编写代码(最好使用模板,而不是在mysql fetch array循环中使用echo),这才是最重要的。

当它成为瓶颈时(如果有的话)-首先对其进行分析,然后再进行优化。基于实际数据,而不是谣言。

至于特定的1000行表格-将其分页,傻瓜式地分页。
使您的应用程序不做无用功。这才是优化的真正秘诀。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接