【问题标题】:Fastest method for outputting static HTML in PHP在 PHP 中输​​出静态 HTML 的最快方法
【发布时间】:2011-02-17 02:54:20
【问题描述】:

随着我开始更多地使用 PHP,我注意到了两种用于输出静态 HTML 内容的技术。我很好奇哪种方法更快/更有效。本质上,一个使用 PHP 而另一个不使用。我想这可能取决于它是否会给服务器带来额外的压力以不断进出 php。

一般来说,这些方法中的一种更有效吗?

方法一:

<?php
$muniResult = mysql_query("SELECT muni.full, muni.pk FROM muni ORDER BY muni.full ASC");
$munis = mysql_num_rows($muniResult);
?><select><?php
while ($munis > 0) {
    $thisEntry = mysql_fetch_array($muniResult);
    ?><option value="<?php echo $thisEntry['pk']; ?>"><?php echo $thisEntry['full']; ?></option><?php
    $munis--;}
}
?>
</select>

方法二:

<?php
$muniResult = mysql_query("SELECT muni.full, muni.pk FROM muni ORDER BY muni.full ASC");
$munis = mysql_num_rows($muniResult);
echo "<select>";
while ($munis > 0) {
    $thisEntry = mysql_fetch_array($muniResult);
    ?>
    echo "<option value=\"".$thisEntry['pk']."\">".$thisEntry['full']."</option>";
    $munis--;
}
echo "</select>";
?>

【问题讨论】:

标签: php html apache performance


【解决方案1】:

If you benchmark them,您会看到使用 echo(方法 #2)实际上比在解释代码之外输出 HTML 慢。性能仍然可以忽略不计。

但是,我赞成后者(即:不使用 echo)。这是一个可维护性的问题。

假设你有这个:

<?php
echo '<select>';
foreach ($options as $option) {
    echo "<option>$option</option>";
}
echo '</select>';
?>

相对于这个:

<select>
<?php foreach ($options as $option): ?>
   <option><?php echo $option; ?></option>
<?php endforeach; ?>
</select>

我发现后者更具可读性并且更易于维护前者。有些人会不同意,因为这更多的是个人喜好问题。但是,我发现同意我的人比不同意的人多。

注意:您的代码无法解析。 ;)

【讨论】:

    【解决方案2】:

    这两个方法都使用 PHP,它们都不会比另一个快得多,整个文本在被发送到 HTTP 之前由预处理器解析。

    【讨论】:

      【解决方案3】:

      我从未对此进行过基准测试,但我个人认为差异可以忽略不计。

      然而,比这两种方法更好的是先完成所有处理,然后将结果打印到 HTML 中。一种常见的方法是使用模板工具,如Smarty。这样做的原因是因为在编写应用程序时,尤其是 Web 应用程序时,您几乎总是应该将关注点分开。您应该确保数据处理与应用程序逻辑以及应用程序设计是分开的。这称为Model View Controller (MVC),是保持应用程序有条理和可维护的好方法。如果这对您来说有点太复杂,那么您至少应该尝试一下 Smarty。它非常易于使用,可为您节省大量时间和精力。

      编辑:另外,你不应该在没有先转义的情况下在你的 html 中打印用户提供的数据。这是为了防止Cross Site Scripting (XSS) 这是网页中常见但非常严重的漏洞。而不是这样做:

      <?php echo $thisEntry['pk']; ?>
      

      你应该使用 htmlspecialchars 函数:

      <?php echo htmlspecialchars($thisEntry['pk'], ENT_QUOTES, 'UTF-8'); ?>
      

      您应该用正确的数据编码替换“UTF-8”。这就是您还应该明确说明编码的原因:http://shiflett.org/blog/2007/may/character-encoding-and-xss

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-14
        • 2014-05-24
        • 2012-03-01
        • 2011-12-30
        • 1970-01-01
        • 2019-03-01
        • 2010-10-30
        相关资源
        最近更新 更多