Создание таблиц HTML от данных запроса … быстрее?

С моим ограниченным опытом/знанием я использую следующую структуру для генерации 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 только...)

5
задан Brian Tompsett - 汤莱恩 27 May 2017 в 21:40
поделиться

6 ответов

Есть ли другие методы вывода 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- кодируйте ваши строки.)

Однако: хотя это красивее и безопаснее, на практике это вряд ли будет значительно быстрее. Медленность рендеринга на стороне клиента почти наверняка будет в большей степени вызвана:

  1. скоростью передачи по сети большого количества табличных данных. Вы можете улучшить это, развернув zlib.output_compression , mod_deflate или другой фильтр сжатия для вашего веб-сервера, если вы еще этого не сделали.

  2. скорость рендеринга для больших таблиц.Вы можете улучшить это, установив стиль CSS table-layout: fixed в вашем элементе

    и добавив элементы с явной шириной стили для столбцов, для которых требуется фиксированная ширина.

    2
    ответ дан 13 December 2019 в 22:05
    поделиться

    Во-первых, возможно, медлительность является результатом рендеринга HTML, а не скрипта PHP. Во-вторых, его не очень удобно для сборки Для очень больших таблиц лучше использовать разбиение по страницам.

    Вы можете улучшить производительность вашего скрипта на стороне PHP несколькими способами:

    1. использовать ob_start (); и ob_get_clean (); - таким образом данные будут сразу переданы в html:

       ob_start (); 
       // здесь ваш код 
      echo ob_get_clean (); 
       
    2. используйте массив и соединение для строк:

       $ str = array (); 
       $ str [] = 'добавить строки'; 
      echo implode ($ str); 
       

    BR.

    6
    ответ дан 13 December 2019 в 22:05
    поделиться

    Первое, что я попробую, - не объединять строки. На каждом языке, который я использовал, всегда было небольшое снижение производительности из-за того, что непрерывное добавление строк вместе и выплевывание одной огромной строки в конце.

    Попробуйте вместо этого использовать несколько операторов echo , если можете.

    Еще один вариант - исходя из собственного опыта, я почти уверен, что цикл для ( не для каждого ) быстрее, чем , а . Боюсь, у меня нет цифр или доказательств, подтверждающих это, просто то, что я наблюдал на протяжении многих лет.

    1
    ответ дан 13 December 2019 в 22:05
    поделиться

    загрузить ее из xml-файла. Ниже приведена логика .

    Вы знаете, когда таблица обновляется. Когда таблица обновляется, напишите все, что нужно отобразить в xml-файле.Когда пользователь загружает страницу, загрузите данные из xml-файла. Таким образом, вам не придется выполнять запросы и итерационные циклы, когда пользователь загружает страницу. Так будет быстрее. Проверьте и отпишитесь, работает ли это.

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

    0
    ответ дан 13 December 2019 в 22:05
    поделиться

    Это проблема браузера, а не PHP. Сохраните таблицу в HTML и откройте ее - результат будет таким же.

    Просто избегайте таких огромных таблиц HTML. Я бы посоветовал использовать некоторую разбивку на страницы, то есть разделить вашу таблицу на более мелкие страницы, как это делает SO со списком вопросов

    1
    ответ дан 13 December 2019 в 22:05
    поделиться

    Возможно, это шаг в правильном направлении.

    http://eaccelerator.net/

    0
    ответ дан 13 December 2019 в 22:05
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: