Что вызывает время ожидания перед загрузкой моего HTML?

12

У меня есть веб-сайт, кажется, загружается очень медленно. Когда я запускаю тест скорости, я вижу, что перед загрузкой HTML-кода, кажется, есть разрыв в 6 секунд. После этого изображения и JS-скрипты загружаются очень быстро.

Вы можете видеть на картинке под желтыми барами «время ожидания»:

Загрузка файла HTML заняла более 5 секунд, в то время как большинство других ресурсов загружается менее чем за 1 секунду

Это кажется последовательным, независимо от того, каков HTML-контент на странице.

Этот сайт использует CMS (ModX Revo), поэтому HTML фактически хранится в базе данных SQL и создается PHP, но я никогда раньше не сталкивался с этой проблемой.

Кто-нибудь знает, что вызывает это и как я могу ускорить это?

MeltingDog
источник
Это новая вещь? То есть, раньше эти страницы работали нормально и теперь плохо работают? Или это более новая установка / сайт? Можете ли вы рассказать нам больше?
closetnoc
1
Если какая-то посредническая сеть не удерживает это, тогда может показаться, что это время, которое ваш сервер тратит на генерацию ответа? Вы говорите «неважно, что такое HTML-контент» - HTML-контент через вашу CMS или буквально статическая HTML-страница? Я бы, конечно, попробовал простую HTML-страницу «Hello World», если вы еще этого не сделали. Также обратите внимание, что серверы Pingdom находятся на другом конце света, в Австралию (который, я полагаю, находится там, где вы находитесь)?
MrWhite
1
ИМО проблема в первую очередь с этой одной страницей - ваш сервер / CMS, кажется, занимает много времени для генерации ответа. Неэффективный SQL-запрос Другие страницы на вашем сайте выглядят относительно быстро. (?)
MrWhite

Ответы:

13

Технический термин для ожидания называется временем первого байта и определяет скорость отклика веб-сервера или других сетевых ресурсов.

Некоторые распространенные причины, по которым вы можете увидеть время первого байта:

  • Перегруженная сеть (обычно общий хостинг)
  • Неправильная настройка серверов
  • Расстояние от вас и сервера (географическое положение играет незначительную роль)
  • Ошибки сервера (прыжки)

Обычно эта проблема часто встречается на виртуальном хостинге из-за огромного количества веб-сайтов и людей, которые их посещают, что, конечно, увеличивает время в сети. Другой возможной причиной является ошибка в сети где-то, например, скачок или потому что ваш сервер не находится в пределах местоположения вашей целевой аудитории, например, «ХОРОШИЙ» британский сервер будет иметь меньшее время байта, чем американский сервер, нацеленный на пользователей в Великобритания, из-за расстояния, которое данные должны быть отправлены и получены (обычно увеличение примерно на 100-200 мс).

Может быть, время, чтобы получить новый хост

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

Надежное тестирование

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

Пинг и трассировка маршрута на сервере

Если вы попытаетесь запустить ping на сервере, результаты могут отображаться или не отображаться, ping использует ICMP, а не UDP или TCP, что означает, что это не то же самое, что запросить сервер на порту 80, на котором будет работать ваш httpd. Вы можете использовать трассировку маршрута, чтобы идентифицировать любые серверы на маршруте, которые могут вызывать увеличение первого байта, опять же ... он не запрашивает сервер httpd на порту 80, и если traceroute использует Windows, он будет использовать ICMP и Mac / Linux машины будут использовать UDP. Это стоит протестировать, потому что это такая быстрая и простая вещь, но если результаты возвращаются нормально, это не обязательно означает, что где-то нет проблем.

Саймон Хейтер
источник
Привет @ SunWKim Я обновил свой ответ с тем, что вы спросили. Посмотрите внизу моего ответа.
Саймон Хейтер
Я согласен с вашими общими причинами времени для первого байта. В этом случае, однако; Я считаю, что это больше связано с кодом JavaScript.
вс
Первый байт может быть вызван широким спектром вещей, но JavaScript не является одним из них, поскольку ответ заголовка предшествует встроенным элементам, таким как JavaScript, CSS, изображения и так далее. Не путайте первый байт с фактическими элементами и файлами ..
Саймон Хейтер
Я не путаю их. Возможно, если вы посетили mbff.com.au и убедились в этом сами, вы можете быть уверены, что это не проблема времени для первого байта. Задержка происходит после первого ответа заголовка.
Вс
1
The delay is occurring after the first header responseтогда это не первый байт. Первый байт - это первый ответ.
Саймон Хейтер
4

1) У вас есть Adobe TypeKit, который не загружается асинхронно с текущим кодом. Попробуйте заменить его расширенным асинхронным кодом: http://help.typekit.com/customer/portal/articles/649336-embed-code

Этот стандартный код встраивания использует тот факт, что теги блокируют дальнейшую визуализацию страницы, чтобы помочь предотвратить FOUT [Flash of Unstyled Text]. Пока загружается скрипт Typekit, рендеринг страницы блокируется, поэтому текст не начинает отображаться с резервными шрифтами.

2) Тест с новым TypeKit. Как сейчас время загрузки? Лучше? Переходите к шагу 3.

3) Замените свою Google Analytics обновленным JavaScript, который обеспечивает последний асинхронный синтаксис: https://developers.google.com/analytics/devguides/collection/gajs/

4) Тест. Загрузка страницы все еще лучше?

5) Наконец, рассмотрите возможность оптимизации изображений, таких как pattern.jpg. Я преобразовал его в PNG и смог уменьшить размер файла с 199 кБ до 56 кБ. Это сокращает время получения файла: https://www.dropbox.com/s/i06jx509bmprhhh/pattern.png?dl=0

Надеюсь, это поможет.

солнце
источник
3

PHP против не-PHP элементов

Если вы сравните время загрузки ресурсов, отличных от PHP, с временем загрузки на основе PHP, вы увидите, что сервер быстро реагирует, если PHP не задействован.

Как правило, это указывает на внутренние проблемы вашего PHP-скрипта.

Проблема может быть в пределах уровня PHP или базы данных. Использование передовых средств отладки, таких как XDebug или NewRelic, поможет вам быстро обнаружить узкое место.

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

В любом случае решение проблемы обычно означает одно или все из:

  • Больше оборудования
  • Лучшее программирование
  • Добавить кеширование

Более быстрое аппаратное обеспечение является очевидным, но часто дорогостоящим решением, если вы уже находитесь на выделенных ресурсах.

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

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

тестирование

При использовании инструментов тестирования обязательно выполняйте несколько прогонов. Пики сетевых и временных серверов могут легко привести вас на неверный путь, поэтому вы хотите попытаться усреднить их.

Хостинг

Если вы используете учетную запись общего хостинга, рассмотрите возможность перехода к облачным службам или службам типа VPS, чтобы лучше понимать проблемы с производительностью. Если вы не используете технику кэширования (CDN или сервис типа Cloudflare), исправление проблем производительности в системах массового общего хостинга может быть очень сложной задачей, поскольку у вас недостаточно контроля над сервером.

jeffatrackaid
источник
-1

Попробуйте установить сторонние куки только для посещенных.

Том
источник