从查询数据构建html表...更快?

Dre*_*rew 5 html php 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 .= '</table>';
Run Code Online (Sandbox Code Playgroud)

这很有效.但是对于具有300多行的表,当脚本构建表时,页面加载会有明显的延迟.目前最大结果列表只有大约1,100行,等待时间不长,但显然还有等待.

是否还有其他方法可以输出比我的WHILE循环更快的HTML表格?(PHP只请......)

avi*_*viv 6

首先,可能缓慢是HTML渲染的结果,而不是PHP脚本.其次,构建非常大的表不是很有用,最好使用分页.

您可以通过以下几种方式改善PHP端的脚本性能:

  1. 使用ob_start(); 和ob_get_clean(); - 这样数据将立即传递给html:

    ob_start();
    // your code here
    echo ob_get_clean();
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用数组和连接字符串:

    $str = array();
    $str[] = 'add the strings';
    echo implode($str);
    
    Run Code Online (Sandbox Code Playgroud)

BR.


bob*_*nce 2

\n

是否有其他输出 HTML 表的方法比我的 WHILE 循环更快?

\n
\n\n

可能是的。PHP 是一种模板语言。就这样使用它,不要对抗它!本机模板可能比手动将字符串费力地粘贴在一起更快 \xe2\x80\x89\xe2\x80\x94\xe2\x80\x89 并且 IMO 更具可读性。

\n\n
<table>\n    <?php foreach($results as $result) { ?>\n        <tr>\n            <td><?php echo htmlspecialchars($result[0]); ?></td>\n            <td><?php echo htmlspecialchars($result[1]); ?></td>\n        </tr>\n    <?php } ?>\n</table>\n
Run Code Online (Sandbox Code Playgroud)\n\n

(请注意 的使用。如果每次htmlspecialchars将纯文本插入 HTML 时不使用此函数,则您的代码存在 HTML 注入缺陷,从而导致潜在的跨站点脚本漏洞。您可以定义一个具有短名称的函数喜欢这样做以避免一些打字,但您必须对字符串进行 HTML 编码。)hecho htmlspecialchars

\n\n

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

\n\n
    \n
  1. 大量表数据的网络传输速度。您可以通过为您的 Web 服务器部署 或其他压缩过滤器来改进这一点zlib.output_compressionmod_deflate如果您还没有这样做)。

  2. \n
  3. 大型表格的渲染速度。table-layout: fixed您可以通过在元素上设置 CSS 样式<table>并为想要具有固定宽度的列添加<col>具有显式样式的元素来改进这一点。width

  4. \n
\n