2012-06-07 2 views
32

Я пытаюсь оптимизировать скорость своего сайта, и я использую отличный инструмент на pingdom.com. В настоящее время более 50% времени, затрачиваемого на загрузку страницы, - это «Ожидание», как показано на скриншоте ниже. Что я могу сделать, чтобы уменьшить это? Кроме того, насколько типична эта цифра? есть ли этапы? Благодаря!Как сократить время ожидания сервера?

high server wait time

EDIT: Хорошо .. позвольте мне прояснить несколько вещей. Нет сценариев на стороне сервера или вызовов базы данных. Просто HTML, CSS, JS и изображения. Я уже сделал некоторые вещи, такие как push js до конца тега body, чтобы получить параллельные загрузки. Я знаю, что main.html и templates.html добавляют к общему времени ожидания, делая синхронно после загрузки js.js, это не проблема. Я просто удивлен, сколько времени «ожидания» есть для каждого запроса. На это влияет влияние сервера? как быть на общем сервере, влияет ли это на время ожидания? Есть ли плохие фрукты для устранения этих проблем?

enter image description here

+0

Это не вопрос программирования. Попробуйте http://serverfault.com/ – Gerrat

ответ

-1

Это проблема с сервером ... По Pingdom, «Веб-браузер ожидает данные от сервера» является то, что определяет «Wait» время.

Существует мало что можно сделать из javascript или кода, чтобы исправить это.

+3

Это не то, что время ожидания. – ddlshack

1

Время ожидания, также известное как time to first byte, - это время, необходимое серверу для отправки первого байта с момента установления соединения. Если это высоко, это означает, что ваш сервер должен выполнить большую работу, чтобы отобразить страницу перед ее отправкой. Нам нужна дополнительная информация о том, что делает ваш сайт для отображения страницы.

+0

Очень хорошо, это также может иметь отношение к времени доступа на вашем жестком диске/RAID. У меня были SSD-серверы с более низким временем до первого байта (TTFB), и сайты действительно загружались быстрее. – Thom

+1

Серверу, возможно, придется много работать, но, возможно, он также должен много ждать. Вам нужно сломать то, из чего состоит прошедшее время, прежде чем зная, что решать за самые большие победы. – Jason

2

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

Самый медленный способ получения нескольких запросов - отправить один запрос, дождаться его ответа, отправить следующий запрос, дождаться ответа и т. Д. Обычно гораздо быстрее отправлять асинхронно все запросы, а затем обрабатывать все ответы по мере их поступления. Это сокращает общее время ожидания до самого длительного времени ожидания для любого отдельного запроса, а не для совокупного времени ожидания всех запросов.

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

49

Наиболее распространенной причиной этого в случае Apache является использование обратного поиска DNS. Это означает, что сервер пытается выяснить, что такое имя вашего компьютера, каждый раз, когда вы делаете запрос. Это может занять несколько секунд, и это объясняет, почему у вас длительное время WAIT, а затем очень быстрая загрузка, потому что дело не в пропускной способности.

Очевидное решение этого заключается в том, чтобы отключить hostnamelookup в /etc/httpd/conf/httpd.conf

HostnameLookups Off 

Однако ... это, как правило, не достаточно. Дело в том, что во многих случаях apache по-прежнему выполняет поиск в обратном направлении, даже когда вы отключили поиск имени узла, поэтому вам нужно внимательно изучить каждую строку конфигурации apache. В частности, одной из наиболее распространенных причин для этого является LOGS.По умолчанию во многих установках red hat-centos формат журнала содержит% h, который обозначает «имя хоста» и требует, чтобы apache выполнял обратный поиск. Вы можете видеть это здесь:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 
LogFormat "%h %l %u %t \"%r\" %>s %b" common 

Чтобы решить эту проблему, вы должны изменить эти% h для% a.

+1

Спасибо, помощник .. Есть рекомендации по использованию таких советов? –

+0

@ ÜnsalKorkmaz Здесь вы найдете http://httpd.apache.org/docs/2.2/mod/mod_log_config.html EDIT: Извините, я неправильно прочитал. Думал, что вы сказали «любую рекомендацию по ресурсам». – ConnectedSystems

+1

'' 'HostnameLookups'' был выключен, но' '' LogFormat'' был виновником. Я получил 50% -ное улучшение, изменив% h на% a. – Birla

0

TTFB напрямую зависит от «физического» расстояния между браузером и сервером. Прокси-сервер CDN - лучший способ сократить указанное расстояние. Это, в сочетании с возможностями собственного кэширования, поможет обеспечить более быстрый ответ, загрузив кешированный объект из ближайшего местоположения POP (точки размещения).

Эффект будет зависеть от географического местоположения пользователя и распространения CDN. Тем не менее, вы можете ожидать significant improvement, 50% -70% и более.

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

Смежные вопросы