Php 正在从查询数据生成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

凭借我有限的经验/知识,我正在使用以下结构从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 .= '</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();还有ob_get_clean();-这样,数据将立即传递到html:

    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编码。)

    但是:虽然这更美观、更安全,但在实践中不太可能明显更快。客户端渲染速度缓慢几乎肯定是由以下原因造成的:

  • 大量表格数据的网络传输速度。如果您还没有为web服务器部署zlib.output\u compression、
    mod\u deflate
    或其他压缩过滤器,可以提高这一速度

  • 大型表格的渲染速度。您可以通过在
    元素上设置CSS样式
    表格布局:fixed
    ,并为希望具有固定宽度的列添加带有显式
    宽度
    样式的
    元素来提高这一速度


  • 沉思-从用户的角度来看,关闭一个表并打开一个没有标题的新表会更好吗?比如说,每50行一次?这样他们几乎可以立即在自己的视野中显示结果,并且当他们查看第一个块时,额外的结果会在屏幕外填充?HTML不需要“完成”一个表吗在它展示之前?这可能是一部关于“行军白痴”的犹太人区神话般的作品多样性…你有没有分析过你的应用程序以确定它的速度慢?大多数情况下,瓶颈是数据库连接。我有。虽然查询有时会根据用户选择的参数进行大量的左连接,但会返回lickety split。数据库构建得很好,并且完全索引。它会将数据输出到HTML表中at’s takes“forever”…要是我能把它翻出来或打印出来就好了…;-)安德鲁:“必须完成表格才能显示”这句话适用于老式浏览器,如Netscape True,但这些都是微优化,没有产生实质性的改进。请看,我认为这与内存消耗有关,而不是与原始速度有关。事实上,foreach速度较慢,但它太小,几乎无法察觉。然而,foreach确实在内存中创建了iterable对象/数组的副本,因此内存使用率增加。@Andrew在我的一个项目中,我遇到了类似的问题。有许多单元格的巨大桌子。仅仅使用操作码缓存就大大加快了速度。这还不是页面或查询缓存。只有操作码。使用查询缓存,我得到了另一个巨大的改进,使用昂贵的内容来缓存单元格可以获得更高的百分比。也许我应该注意到,这些是定制的搜索结果,将具有不同的内容、不同的标题,甚至不同的内容