@runapa

Как можно оптимизировать генерацию и загрузку боьшого html?

Мой скрипт выбирает из базы данные по условию, порядка пары тысяч записей (количество постоянно увеличивается), потом всё это обрабатывается на php, затем брузер всё это печатает на странице php циклом. Итоговый документ имеет порядка 230к строк и вес около 40-70 мегабайт, иногда доходит до сотни. Соответственно загрузка длится 15-20 секунд при включенном gzip.
Кэш наверное подключить не получится, потому что с базой работают несколько человек, и данные по старым записям часто меняются. Насчёт кэша, правда я не уверен.

Вопросы такие: какие есть способы ускорить загрузку страницы? Можно ли её рендерить на клиенте при помощи js?
И почему на смартфоне в мобильном safari та же самая страница грузится за пару секунд? Можно ли этот эффект повторить на десктопе?
  • Вопрос задан
  • 119 просмотров
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Вопросы такие: какие есть способы ускорить загрузку страницы?
Во первых - выяснить что тормозит: бэкенд или фронтенд. Сделать профайлинг бэкенда, сделать анализ загрузки фронта. Соответственно сначала понять что тормозит.

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

И почему на смартфоне в мобильном safari та же самая страница грузится за пару секунд?
Опять же, вопрос скорее к вам чем к кому-либо еще. Возможно кеширование, которое на мобильных браузерах практически всегда более агрессивное. Возможно вы просто не видите как тормозит загрузка, например в силу другого метода рендеринга, который сразу при получении данных выводит все что возможно, в то время как на стационаре рендеринг идет только после загрузки тега целиком. Достаточно например быстро промотать на сафари вниз при загрузке, чтобы увидеть что загрузилось далеко не все... А возможно в мобильной версии отображается сильно меньше элементов...

Можно ли этот эффект повторить на десктопе?
Если есть что повторять... Можно попробовать сделать таблицу не цельной, а разбить на несколько таблиц, по 100-300 строк. Или еще адкеватнее - сверстать дивами.

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

PS:
я тоже склоняюсь к неэффективной вёрстке. Если я эту вёрстку буду генерировать js’ом, процесс ускорится?
Скорее всего, как я уже написал, скорости не прибавится. Вообще что мешает проверить эффективность верстки? Тупо выведите все строки дивами, без всяких разделителей, одна строка - один див с данными, разделенными "|" например, и посмотрите на разницу.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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