С моим ограниченным опытом/знанием я использую следующую структуру для генерации HTML-таблиц на лету от запросов MySQL:
$c = 0;
$t = count($results);
$table = '<table>';
while ($c < $t) {
$table .= "<tr><td>$results[0]</td><td>$results[1]</td> (etc etc) </tr>";
++$c;
}
$table .= '</table>';
это работает, очевидно. Но для таблиц с 300 + строки там являются значимой задержкой pageload, в то время как сценарий создает таблицу. В настоящее время максимальный список результатов является только приблизительно 1 100 строками, и ожидание не долго, но существует ясно ожидание.
Есть ли другие методы для вывода HTML-таблицы, которые быстрее, чем мой Цикл с условием продолжения? (PHP только...)
Есть ли другие методы вывода HTML-таблицы, которые быстрее, чем мой цикл WHILE?
Потенциально да. PHP - это язык шаблонов. Используйте это как таковое, не сопротивляйтесь! Собственные шаблоны, вероятно, будут быстрее, чем кропотливое склеивание строк вручную - и IMO более читабельно.
<table>
<?php foreach($results as $result) { ?>
<tr>
<td><?php echo htmlspecialchars($result[0]); ?></td>
<td><?php echo htmlspecialchars($result[1]); ?></td>
</tr>
<?php } ?>
</table>
(Обратите внимание на использование htmlspecialchars
. Если вы не используете эту функцию каждый раз, когда вставляете простой текст в HTML, ваш код имеет недостатки внедрения HTML, что может привести к уязвимости межсайтового скриптинга. Вы можете определить функцию с коротким именем, например h
, чтобы сделать echo htmlspecialchars
, чтобы избежать некоторого набора текста, но вы должны HTML- кодируйте ваши строки.)
Однако: хотя это красивее и безопаснее, на практике это вряд ли будет значительно быстрее. Медленность рендеринга на стороне клиента почти наверняка будет в большей степени вызвана:
скоростью передачи по сети большого количества табличных данных. Вы можете улучшить это, развернув zlib.output_compression
, mod_deflate
или другой фильтр сжатия для вашего веб-сервера, если вы еще этого не сделали.
скорость рендеринга для больших таблиц.Вы можете улучшить это, установив стиль CSS Во-первых, возможно, медлительность является результатом рендеринга HTML, а не скрипта PHP.
Во-вторых, его не очень удобно для сборки Для очень больших таблиц лучше использовать разбиение по страницам. Вы можете улучшить производительность вашего скрипта на стороне PHP несколькими способами: использовать ob_start (); и ob_get_clean (); - таким образом данные будут сразу переданы в html: используйте массив и соединение для строк: BR. Первое, что я попробую, - не объединять строки. На каждом языке, который я использовал, всегда было небольшое снижение производительности из-за того, что непрерывное добавление строк вместе и выплевывание одной огромной строки в конце. Попробуйте вместо этого использовать несколько операторов Еще один вариант - исходя из собственного опыта, я почти уверен, что цикл загрузить ее из xml-файла. Ниже приведена логика . Вы знаете, когда таблица обновляется. Когда таблица обновляется, напишите все, что нужно отобразить в xml-файле.Когда пользователь загружает страницу, загрузите данные из xml-файла. Таким образом, вам не придется выполнять запросы и итерационные циклы, когда пользователь загружает страницу. Так будет быстрее. Проверьте и отпишитесь, работает ли это. Если вы чувствуете, что вышеописанная логика все еще медленная, а данных у вас еще больше, сделайте следующее.
При загрузке страницы сначала загрузите 100 таблиц данных. Затем выполните ajax запрос и получите следующие 100 узлов из xml файла и отобразите их. После этого снова выполните ajax запрос и получите следующие 100 узлов из xml файла и покажите их на странице и так далее... Это проблема браузера, а не PHP.
Сохраните таблицу в HTML и откройте ее - результат будет таким же. Просто избегайте таких огромных таблиц HTML. Я бы посоветовал использовать некоторую разбивку на страницы, то есть разделить вашу таблицу на более мелкие страницы, как это делает SO со списком вопросов table-layout: fixed
в вашем элементе
и добавив элементы
с явной шириной
стили для столбцов, для которых требуется фиксированная ширина.
ob_start ();
// здесь ваш код
echo ob_get_clean ();
$ str = array ();
$ str [] = 'добавить строки';
echo implode ($ str);
echo
, если можете. для
( не для каждого
) быстрее, чем , а
. Боюсь, у меня нет цифр или доказательств, подтверждающих это, просто то, что я наблюдал на протяжении многих лет.
Похожие вопросы: