PHP HTML代使用的字符串concatention
-
05-07-2019 - |
题
一个问题是关于不同方法的输出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进行分类或以其他方式添加样式的设计人员合作,因此解决方案必须记住这一点。