一个问题是关于不同方法的输出html从PHP;什么是业绩之间的差异这些:

方法1-变串联

$html = '';
$html .= '<ul>';
for ($k = 1; $k < = 1000; $k++){
    $html .= '<li> This is list item #'.$k.'</li>';
}
$html .= '</ul>';
echo $html;

方法2-output buffering

ob_start();
echo '<ul>';
for ($k = 1; $k < = 1000; $k++){
    echo '<li> This is list item #',$k,'</li>';
}
echo '</ul>';

我怀疑你得到一些性能从不断修改和扩大一个变量;是正确的?

干杯!

谢谢GaryF,但我不想回答关于建筑这个问题是关于绩效。似乎有一些不同的意见/测试关于这个速度更快,这就是为什么没有一个接受的答案。

有帮助吗?

解决方案

它有点旧,但 Sara Golemon的这篇文章可能会有所帮助。 AFAIK输出缓冲功能非常快速有效,因此echo,这就是我要使用的。

其他提示

除了字符串连接的想法之外,你真的要求(我认为)你应该如何构建网页,这让我觉得任何形式的显式连接都可能是错误的。

尝试使用模型 - 视图 - 控制模式来构建数据,并将其传递给一个简单的模板库(如 Smarty ),让它担心如何构建您的视图

更好的分离,更少的顾虑。

我通常使用方法#1,因此我可以将HTML放在包含静态HTML的模板文件中。我试着从我的PHP中保留尽可能多的HMTL。它使PHP更清晰,更短,因为模板通常是一个单独的文件。

关于速度/性能,我认为差异很小。使用输出缓冲,它也一直在扩大变量,虽然该变量不可访问,但必须存储在某处。

我经常想知道打开和关闭<?php是否慢于将所有内容放在echo $html;中然后立即回显。

我认为最后我们在非常复杂的脚本中谈论毫秒。

哦,是的,方法#1更灵活,因为你可以<=>任何地方。

在不断修改变量并重新打印变量时,确实存在轻微的开销。但是,这样做意味着在某些时候脚本可能会完成运行(由于中断或类似),并且顺序echo语句将部分打印页面而不是任何内容。

我打算写一篇关于PHP字符串如何可变的长回复(与C或C#中的不可变字符串相对),但我想我只是链接到我遇到的一篇较旧的帖子。对于使用stringbuilder的Java和C#解决方案,我基本上处理了你所要求的内容。

旁注:stringbuilder解决方案类似于(未经测试):

$html = array();
$html[] = '<ul>';
for ($k = 1; $k < = 1000; $k++){
    $html[] = '<li> This is list item #';
    $html[] = $k;
    $html[] = '</li>';
}
$html[] = '</ul>';
echo implode('',$html);

只是一对夫妇的想法:

  • 产出的缓冲能让你页的外观缓慢,由于用户看到了什么直到整个剧本已经运行(尽管你有办法#1的设置相同,将举行true)。

  • Strings in php muteable,因此连接是几乎不作为糟糕,因为在一些其他语言。这就是说,产出的缓冲,可能只是一个微小的更快,如空间分配用于输入相当大的默认(40K据 )

在结束我会说它真的更多的一个问题。如果你喜欢什么样的产出的缓冲买了你,然后这是可能的路要走。

您的问题的答案也可以在这里找到: php:output [] w /加入vs $ output。=

字符串连接是构建字符串的最快方法。

我还没有测试<!>“echo <!>”; vs字符串构建,但只要你没有使用缓冲输出,由于顺序写入自刷新缓冲区,回应应该是最快的。 (只有在刷新时才会减速,即使你提前进行字符串连接,也不会真正避免)

我还没有提到的一点是,通常情况下,PHP人员必须与需要对HTML进行分类或以其他方式添加样式的设计人员合作,因此解决方案必须记住这一点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top