我有一个应用程序,我需要从数据库中检索大量的行,然后将它们全部打印在屏幕上。我检查了mysql查询,这不是问题所在。问题是所有行都需要打印在同一页面上,没有分页,而且需要很长时间(我说的是一个带有几行行的表)。有什么方法可以加快速度吗?我在Google上发现的唯一一件事是使用“,”而不是“。”使用echo时我将测试这个以确定是否有任何改进,但我不确定它会产生如此大的差异。
答案 0 :(得分:6)
问题不太可能是PHP,而是大量的HTML输出到浏览器。您可以通过保存所获得的页面,然后从硬盘驱动器加载静态文件来自行验证。
如果您要输出一个大表,那么浏览器在加载内容时经常会出现“重绘”问题。这可以通过为所有列设置固定宽度来最小化。只需在第一行执行此操作。
您也可以跳出PHP块来输出大部分HTML,然后只需在适当的位置打印变量。这是一个示例,假设您的所有数据都在$rows
变量中:
<?php
// some code here
?>
<table>
<thead>
<tr>
<th width="50">Header 1</th>
<th width="200">Header 2</th>
<th width="150">Header 3</th>
<th width="100">Header 4</th>
</tr>
</thead>
<tbody>
<?php foreach ( $rows as $r ) : ?>
<tr>
<td><?=$r['var1']?><td>
<td><?=$r['var2']?><td>
<td><?=$r['var3']?><td>
<td><?=$r['var4']?><td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php
// continue here if necessary
注意:如果您没有启用PHP短标记,则需要执行<?php echo $r['var1'] ?>
。
最后,您可以尝试添加gzip压缩。最好在服务器级别完成,但在PHP中,您可以在ob_start("ob_gzhandler");
之后立即添加行<?php
作为PHP代码的第一行。
如果这仍然无济于事,那么您的表格太大就是一个简单的事实。使用分页或过滤以减小尺寸会更好。
答案 1 :(得分:2)
PHP不是你的瓶颈。这是一个presentation,我参加了创建PHP的Rasmus Lerdorf的PHP性能。 PHP是您在性能方面最不得不担心的事情之一。您可以打印数百万行条目并执行复杂的计算而不会出现问题。在将它扔给PHP之前,请检查您的代码,查询,网络服务器设置。
正如Mark建议您可以使用flush将输出发送到浏览器,同时仍然可以从db获取信息。