在PHP中输出静态HTML的最快方法

时间:2011-02-17 02:54:21

标签: php html apache performance

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

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

方法1:

<?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>

方法2:

<?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>";
?>

3 个答案:

答案 0 :(得分:3)

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>

我发现后者更易读,更容易维护前者。有些人会不同意,因为这更多是个人偏好的问题。但是,我发现有更多的人同意我,而不是那些不同意的人。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

比这两种方法更好的是首先进行所有处理,然后将结果打印到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