PHP HTML生成-使用字符串连接
关于从PHP输出html的不同方法的问题;以下各项之间的性能差异是什么: 方法1-变量串联PHP HTML生成-使用字符串连接,php,performance,string-concatenation,Php,Performance,String Concatenation,关于从PHP输出html的不同方法的问题;以下各项之间的性能差异是什么: 方法1-变量串联 $html = ''; $html .= '<ul>'; for ($k = 1; $k < = 1000; $k++){ $html .= '<li> This is list item #'.$k.'</li>'; } $html .= '</ul>'; echo $html; $html=''; $html.=''; 对于($k=1;$
$html = '';
$html .= '<ul>';
for ($k = 1; $k < = 1000; $k++){
$html .= '<li> This is list item #'.$k.'</li>';
}
$html .= '</ul>';
echo $html;
$html='';
$html.='';
对于($k=1;$k<=1000;$k++){
$html.='- 这是列表项#。$k.
;
}
$html.='
';
echo$html;
方法2-输出缓冲
ob_start();
echo '<ul>';
for ($k = 1; $k < = 1000; $k++){
echo '<li> This is list item #',$k,'</li>';
}
echo '</ul>';
ob_start();
回声“”;
对于($k=1;$k<=1000;$k++){
回显“- 这是列表项,$k”
;
}
回声“
”;
我怀疑不断修改和扩大变量会对性能造成影响;对吗
干杯
谢谢GaryF,但我不想得到关于体系结构的答案——这个问题是关于性能的。对于哪一个更快,似乎有一些不同的观点/测试,这就是为什么目前还没有一个公认的答案。我通常使用方法1,这样我就可以将HTML放在包含静态HTML的模板文件中的任何位置。我试图在PHP中保留尽可能多的HMTL。由于模板通常是一个单独的文件,因此它使PHP更加简洁
关于速度/性能,我认为差别很小。通过输出缓冲,它也一直在放大一个变量,尽管该变量不可访问,但它必须存储在某个地方
我经常想知道打开和关闭
在不断修改变量并重新打印它时是否会有轻微的开销。但是,不这样做意味着脚本可能会在某个时候完成运行(由于中断或类似情况),并且顺序echo语句将部分打印页面,而不是什么也没有打印。我将键入一个关于PHP字符串如何可变(与C或C#等不可变字符串相反)的长回复,但我想我会链接到。我基本上是针对使用stringbuilder的Java和C#解决方案来处理您的问题
旁注:stringbuilder解决方案类似于(未经测试):
$html=array();
$html[]='';
对于($k=1;$k<=1000;$k++){
$html[]='- 这是列表项#';
$html[]=$k;
$html[]='
';
}
$html[]='
';
回声内爆(“”,$html);
有几点想法:
- 输出缓冲会使页面看起来很慢,因为在整个脚本运行之前,用户什么也看不到(尽管您的设置方式也一样)
- php中的字符串是可静音的,所以连接并不像其他一些语言那样糟糕。也就是说,输出缓冲可能会稍微快一点,因为默认情况下为输入分配的空间相当大(根据
最后我要说的是,这实际上更多的是一个风格问题。如果您喜欢输出缓冲为您带来的好处,那么这可能是一条可行之路 您的问题的答案也可以在这里找到:
字符串连接是构建字符串的最快方法
我还没有测试过“echo”和字符串构建,但只要不使用缓冲输出,echo应该是最快的,因为它是对自刷新缓冲区的顺序写入。(只有在齐平时才会减速,即使你事先做了字符串连接,你也不会真正避免)撇开字符串连接本身不谈,你真的在问(我认为)你应该如何构建网页,我觉得任何形式的显式连接都可能是错误的
尝试使用来构建您的数据,并将其传递到一个简单的模板库(如),让它考虑如何构建您的视图
更好的分离,更少的顾虑。我没有提到的是,通常情况下,PHP人员必须与需要对HTML进行分类或以其他方式添加样式的设计人员合作,因此解决方案必须记住这一点。这有点老了,但Sara Golemon可能会有所帮助。好的,输出缓冲功能非常快速有效,echo
,这就是我要使用的
$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);