PHP очень медленный при печати большого количества информации - PullRequest
3 голосов
/ 15 сентября 2010

У меня есть приложение, в котором мне нужно извлечь большое количество строк из базы данных, а затем распечатать их все на экране.Я проверил запросы MySQL, и проблема не в этом.Проблема в том, что все строки должны быть напечатаны на одной странице без разбивки на страницы, и это занимает много времени (я говорю о таблице с несколькими тысячами строк).Есть ли способ ускорить процесс?Единственное, что я нашел в Google, - это использование "," вместо "."при использовании эха.Я буду тестировать это, чтобы увидеть, есть ли улучшения, но я не уверен, что это будет иметь большое значение.

Ответы [ 2 ]

6 голосов
/ 15 сентября 2010

Проблема вряд ли в PHP, это огромный объем HTML, выводимый в браузер. Вы можете проверить это самостоятельно, сохранив полученную страницу, а затем загрузив статический файл с жесткого диска.

Если вы выводите большую таблицу, у браузера часто возникают проблемы с «перерисовкой» ее по мере загрузки контента. Это можно минимизировать, установив фиксированную ширину для всех столбцов. Просто сделайте это в первом ряду.

Вы также можете выпрыгнуть из блока PHP для вывода большей части HTML, а затем просто распечатать переменные там, где это необходимо. Вот пример, предполагая, что все ваши данные находятся в переменной $rows:

<?php
  // some code here
?>

<table>
<thead>
<tr>
  <th width="50">Header 1</th>
  <th width="200">Header 2</th>
  <th width="150">Header 3</th>
  <th width="100">Header 4</th>
</tr>
</thead>
<tbody>
<?php foreach ( $rows as $r ) : ?>
<tr>
  <td><?=$r['var1']?><td>
  <td><?=$r['var2']?><td>
  <td><?=$r['var3']?><td>
  <td><?=$r['var4']?><td>
</tr>
<?php endforeach; ?>
</tbody>
</table>

<?php
  // continue here if necessary

Примечание: если у вас не включены короткие теги PHP, вам нужно вместо этого сделать <?php echo $r['var1'] ?>.

Наконец, вы можете попробовать добавить сжатие gzip. Лучше всего это делать на уровне сервера, но в PHP вы можете добавить строку ob_start("ob_gzhandler"); в качестве самой первой строки кода PHP сразу после <?php.

Если это все еще не помогает, то просто факт, что ваш стол слишком большой . Вам было бы гораздо лучше использовать нумерацию страниц или фильтрацию, чтобы уменьшить размер.

2 голосов
/ 15 сентября 2010

PHP не является вашим узким местом.Вот презентация , которую я посетил о производительности PHP Расмуса Лердорфа, парня, который создал PHP.PHP - это одна из последних вещей, которую вам нужно беспокоиться с точки зрения производительности.Вы можете напечатать миллионы записей строк и выполнять сложные вычисления без проблем.Перед тем как выбросить его в PHP, проверьте ваш код, ваши запросы, настройки вашего веб-сервера.

Как и предлагал Марк, вы можете использовать flush для отправки вывода в браузер, все еще получая информацию из базы данных.

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