我想知道,在这三种情况下,是否会影响内存使用情况和应用程序的速度:
为了举例,我将创建一个表
<table>
<?
foreach($tableDataFromMysql as $rows){
echo "<tr>";
echo "<td>";
echo $cell1;
echo "</td>";
echo "<td>";
echo $cell2;
echo "</td>";
echo "<td>";
echo $cell3;
echo "</td>";
echo "</tr>";
}
?>
</table>
或者
<table>
<?
foreach($tableDataFromMysql as $rows){
echo "<tr><td>".$cell1."</td>"."<td>".$cell2."</td>"."<td>".$cell3."</td></tr>";
}
?>
</table>
或者
<table>
<?
foreach($tableDataFromMysql as $rows){
$output="<tr>";
$output.= "<td>";
$output.= $cell1;
$output.= "</td>";
$output.= "<td>";
$output.= $cell2;
$output.="</td>";
$output.= "<td>";
$output.= $cell3;
$output.= "</td>";
$output.= "</tr>";
echo $output;
}
?>
</table>
要输出的行中有少量 n 个变量。对于这个例子,我刚刚使用了静态计数变量来输出。
所以,问题是:是否会对内存使用产生影响?
答案 0 :(得分:2)
是的,有区别。由于变量赋值是存储,因此需要内存。打印数据会将其发送到通常预先分配的输出缓冲区。
每个例子,请考虑以下脚本:
echo 'foo';
echo memory_get_usage(); // 632600
echo 'foo';
echo memory_get_usage(); // 632600 (0 bytes have been allocated)
与此相比:
echo 'foo';
echo memory_get_usage(); // 633088
$a = 'foo';
echo memory_get_usage(); // 633352 (264 bytes have been allocated)
答案 1 :(得分:1)
您只需使用use memory_get_usage() / memory_get_peak_usage()进行试用即可。但是,我建议首先不要关注这种微优化。更好地使用模板引擎,这显然较慢,但通过划分逻辑和视图来收集更易维护的代码。
答案 2 :(得分:0)
在前两个例子中,我认为任何差异都是微不足道的。
对于第三个示例,仅当结果集非常大时才会看到任何明显的性能下降。但它将是最耗费内存的。
您可以轻松测试:
microtime(true)
microtime(true)
memory_get_peak_usage()
比较三种不同方法的结果
答案 3 :(得分:0)
这是另一个无处不在的问题 我打赌你没有一个内存使用问题(至少有一个与这个问题相关),但是没有理由问,以防万一。 这是提问的好方法。
内存使用并不是偏好一种方法而不是另一种方法的唯一原因 特别是,如果可以使用的内存量可以忽略不计 特别是如果有一些优化技术可以使用。
您发布的所有内容都只是编码风格,而不是内存使用情况。
为了便于阅读和良好的应用程序设计,上述两者都不应该使用,但大多数程序员都认为它应该是一个模板,基于从HTML和控制结构原则的替代语法中逃脱:
<table>
<? foreach($tableDataFromMysql as $row): ?>
<tr>
<td><?=$row['cell1']?></td>
<td><?=$row['cell2']?></td>
<td><?=$row['cell3']?></td>
</tr>
<? endforeach ?>
</table>
注意HTML格式和突出显示 - 真正关心的事情。