Php 正在从查询数据生成html表。。。更快?
凭借我有限的经验/知识,我正在使用以下结构从MySQL查询动态生成HTML表:Php 正在从查询数据生成html表。。。更快?,php,html,loops,html-table,Php,Html,Loops,Html Table,凭借我有限的经验/知识,我正在使用以下结构从MySQL查询动态生成HTML表: $c = 0; $t = count($results); $table = '<table>'; while ($c < $t) { $table .= "<tr><td>$results[0]</td><td>$results[1]</td> (etc etc) </tr>"; ++$c; } $table
$c = 0;
$t = count($results);
$table = '<table>';
while ($c < $t) {
$table .= "<tr><td>$results[0]</td><td>$results[1]</td> (etc etc) </tr>";
++$c;
}
$table .= '</table>';
$c=0;
$t=计数($results);
$table='';
而($c<$t){
$table.=“$results[0]$results[1](etc)”;
++$c;
}
$table.='';
显然,这是可行的。但是对于包含300多行的表,当脚本构建表时,页面加载会有明显的延迟。目前,最大结果列表只有大约1100行,等待时间不长,但显然还有等待
是否有其他方法可以输出比WHILE循环更快的HTML表?(请仅限PHP…这可能是朝着正确方向迈出的一步
我要尝试的第一件事是——不要连接字符串。在我使用的每一种语言中,不断地将字符串添加到一起,并在最后吐出一个巨大的字符串,这都会对性能造成一定的影响 如果可以,尝试使用多个
echo
语句
另一个尝试-根据我自己的经验,我非常确定
for
循环(不for each
)比while
快。恐怕我没有数字或证据来支持这一点,这正是我多年来观察到的。首先,速度缓慢可能是HTML呈现的结果,而不是PHP脚本。
其次,构建非常大的表不是很有用,最好使用分页
您可以通过以下几种方式在PHP端提高脚本性能:
ob_start();
// your code here
echo ob_get_clean();
$str = array();
$str[] = 'add the strings';
echo implode($str);
BR.这是浏览器问题,而不是PHP。 将您的表保存到HTML中并打开它-结果将是相同的
避免使用如此庞大的HTML表。我建议使用一些分页,即将表拆分为更小的页面,就像使用问题列表那样从xml文件加载它。下面是逻辑 您知道何时更新表。当一个表被更新时,写下必须显示在xml文件中的所有内容。当用户从xml文件加载页面加载数据时。这样,当用户加载页面时,就不必运行查询和迭代循环。这样比较快。检查并张贴回,如果它的工作 如果您觉得上述逻辑仍然缓慢,并且您有更多数据,请执行以下操作- 当页面首次加载100个表数据时。然后触发一个ajax请求,从xml文件中获取接下来的100个节点并显示它。完成后,再次发出ajax请求,从xml文件中获取接下来的100个节点,并在页面中显示,以此类推 是否有其他方法可以输出比WHILE循环更快的HTML表 可能是的。PHP是一种模板语言。就这样使用它,不要与它战斗!本机模板可能比手工将字符串粘在一起要快 — 而且我更容易阅读
<table>
<?php foreach($results as $result) { ?>
<tr>
<td><?php echo htmlspecialchars($result[0]); ?></td>
<td><?php echo htmlspecialchars($result[1]); ?></td>
</tr>
<?php } ?>
</table>
(请注意htmlspecialchars
的使用。如果不是每次在HTML中插入纯文本时都使用此函数,则代码存在HTML注入缺陷,从而导致潜在的跨站点脚本漏洞。您可以定义一个名为h
的函数来执行echo htmlspecialchars
以避免键入,但您必须对字符串进行HTML编码。)
但是:虽然这更美观、更安全,但在实践中不太可能明显更快。客户端渲染速度缓慢几乎肯定是由以下原因造成的:
mod\u deflate
或其他压缩过滤器,可以提高这一速度
元素上设置CSS样式表格布局:fixed
,并为希望具有固定宽度的列添加带有显式宽度
样式的
元素来提高这一速度沉思-从用户的角度来看,关闭一个表并打开一个没有标题的新表会更好吗?比如说,每50行一次?这样他们几乎可以立即在自己的视野中显示结果,并且当他们查看第一个块时,额外的结果会在屏幕外填充?HTML不需要“完成”一个表吗在它展示之前?这可能是一部关于“行军白痴”的犹太人区神话般的作品多样性…你有没有分析过你的应用程序以确定它的速度慢?大多数情况下,瓶颈是数据库连接。我有。虽然查询有时会根据用户选择的参数进行大量的左连接,但会返回lickety split。数据库构建得很好,并且完全索引。它会将数据输出到HTML表中at’s takes“forever”…要是我能把它翻出来或打印出来就好了…;-)安德鲁:“必须完成表格才能显示”这句话适用于老式浏览器,如Netscape True,但这些都是微优化,没有产生实质性的改进。请看,我认为这与内存消耗有关,而不是与原始速度有关。事实上,foreach速度较慢,但它太小,几乎无法察觉。然而,foreach确实在内存中创建了iterable对象/数组的副本,因此内存使用率增加。@Andrew在我的一个项目中,我遇到了类似的问题。有许多单元格的巨大桌子。仅仅使用操作码缓存就大大加快了速度。这还不是页面或查询缓存。只有操作码。使用查询缓存,我得到了另一个巨大的改进,使用昂贵的内容来缓存单元格可以获得更高的百分比。也许我应该注意到,这些是定制的搜索结果,将具有不同的内容、不同的标题,甚至不同的内容