Добавление переменной к множественному эхо - в памяти - PullRequest
0 голосов
/ 02 марта 2011

Мне было интересно, влияет ли это на использование памяти и скорость приложения в этих 3 сценариях:

Для примера я создам таблицу

<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 количество переменных в строке для вывода.В этом примере я только что использовал число статических переменных для вывода.

Итак, вопрос: Влияет ли это на использование памяти?

Ответы [ 4 ]

2 голосов
/ 02 марта 2011

Да, есть разница.Поскольку присваивание переменной является хранилищем, оно требует памяти.Печать данных отправит их в выходной буфер, который обычно предварительно выделяется.

Для каждого примера рассмотрим следующий сценарий:

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 голос
/ 02 марта 2011

Вы можете просто попробовать это, используя use memory_get_usage () / memory_get_peak_usage () .Однако я бы порекомендовал не заботиться о такой микрооптимизации.Лучше использовать шаблонизатор, который, очевидно, работает медленнее, но собирает более понятный код, разделяя логику и представление.

0 голосов
/ 02 марта 2011

Это еще один вопрос из ниоткуда.
Могу поспорить, у вас нет ни одной проблемы с использованием памяти (по крайней мере, одной, относящейся к этому вопросу), но задаете без причины, на всякий случай.Это плохой способ задавать вопросы.

Использование памяти - не единственная причина, по которой один метод предпочитается другому.
Особенно , если используется незначительное количество памяти.
Особенно, если есть некоторые методы оптимизациииспользовать.

Все, что вы опубликовали, зависит только от стиля кодирования, а не от использования памяти.

Ради удобочитаемости и хорошего дизайна приложения не следует использовать ни один из вышеперечисленных, но большинство программистов соглашаются, что это должен быть шаблон , основанный на выходе из HTML и альтернативном синтаксисе для принципов структур управления:

<table>
<? foreach($tableDataFromMysql as $row): ?>
 <tr>
  <td><?=$row['cell1']?></td>
  <td><?=$row['cell2']?></td>
  <td><?=$row['cell3']?></td>
 </tr>
<? endforeach ?>
</table>

Обратите внимание на форматирование HTML и выделение - реальные вещи, о которых нужно заботиться.

0 голосов
/ 02 марта 2011

Между первыми двумя примерами, я полагаю, любые различия будут незначительными.

Для третьего примера, только если набор результатов будет абсолютно массивным, вы увидите заметное снижение производительности.Но это будет наиболее интенсивно использовать память.

Было бы просто проверить:

  1. создать фиктивный набор результатов, который составляет ~ 10000 строк
  2. сохранитьmicrotime(true) непосредственно перед началом цикла
  3. получите microtime(true) сразу после окончания цикла
  4. распечатайте разницу в двух микропроцессорах, чтобы увидеть время выполнения в секундах
  5. распечатайте memory_get_peak_usage() в конце скрипта
  6. поменяйте местами три разных куска кода
  7. запустите каждый фрагмент кода несколько раз, чтобы учесть переменные в среде

сравнить результаты трех разных методов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...