Асинхронные HTTP-запросы |
|
Для большинства сайтов загрузка страницы затрагивает десятки внешних объектов, основное время загрузки тратится на различные HTTP-запросы картинок, JavaScript- файлов и файлов стилей. При работе над оптимизацией времени загрузки страницы в сложном AJAX-приложении было исследовано, насколько можно уменьшить задержку за счет внешних объектов. Особый интерес при этом был вызван конкретной реализацией HTTP-клиента в известных браузерах и параметрами распространенных интернет- соединений, а также к тому, как они влияют на загрузку страницы, содержащих большое количество маленьких объектов. Можно отметить несколько интересных фактов.
Моделируем параллельные запросыНа основе заявленных предпосылок можно смоделировать эффективную ширину канала для пользователей, учитывая некоторые сетевые особенности при загрузке объектов различных размеров. Предположим, что каждый HTTP-запрос занимает 500 байтов и что HTTP-ответ содержит дополнительно к размеру запрошенного объекта еще 500 байтов заголовков. Это наиболее простая модель, которая рассматривает только ограничения на канал и его асимметрию, но не учитывает задержки на открытие TCP-соединения при первом запросе для активного соединения, которые, однако, сходят на нет при большом количестве объектов, передаваемых за один раз. Следует также отметить, что рассматривается наилучший случай, который не включает другие ограничения, например, «медленный старт» TCP, потерю пакетов и т.д. Полученные результаты достаточно интересны, чтобы предложить несколько путей для дальнейшего исследования, однако, не могут никоим образом рассматриваться как замена экспериментов, проведенных с помощью реальных браузеров. Чтобы выявить эффект от активных соединений и введения нескольких хостов, давайте возьмем пользователя с интернет-соединением с 1,5 Мб входящим / 384 Кб исходящим каналом, находящегося на расстоянии 100 мс без потери пакетов. Это в очень грубом приближении соответствует среднему ADSL-соединению на другом краю России с серверами, расположенными в Москве. Ниже показана эффективная пропускная способность канала при загрузке страницы с множеством объектов определенного размера. Эффективная пропускная способность определялась как отношение общего числа полученных байтов ко времени их получения.
Рис. 26. Влияние HTTP-конвейера и постоянного соединения на скорость передачи данных. Источник: www.die.net Предварительные выводыСледует отметить следующее.
Возможно, более прозрачным будет следующий график, на котором изображено несколько различных интернет-соединений и выведено относительное ускорение для запроса страницы с множеством мелких объектов для случая использования 4 хостов и включения активного соединения на сервере. Ускорение измеряется относительно случая 1 хоста с выключенным keep-alive (0%).
Рис. 27. Выигрыш при включении постоянного соединения и нескольких хостов для различных пользователей. Источник: www.die.net Что тут интересного?
Влияние заголовковДавайте теперь посмотрим, как размер заголовков влияет на эффективную пропускную способность канала. Предыдущий график предполагает, что размер заголовков составляет 500 байтов дополнительно к размеру объекта, как для запроса, так и для ответа. Как же изменение этого параметра отразится на производительности нашего 1,5 Мб / 384 Кб канала и расстояния до пользователя в 100 мс? Предполагается, что пользователь уже изначально использует 4 хоста и активное соединение.
Рис. 28. Влияние заголовков на эффективную пропускную способность канала. Источник: www.die.net На графике хорошо видно, что при небольших размерах файлов основные задержки приходятся на исходящий канал. Браузер, отправляющий «тяжелые» запросы на сервер (например, с большим количеством cookie), по-видимому, замедляет скорость передачи данных более чем на 40% для этого пользователя. Естественно, размер cookie можно и нужно регулировать на сервере. Отсюда простой вывод: cookie нужно, по возможности, делать минимальными или направлять ресурсные запросы на серверы, которые не выставляют cookie. Все полученные графики являются результатом моделирования и не учитывают некоторые реальные особенности окружающего мира. Но можно взять и проверить полученные результаты в реальных браузерах в «боевых» условиях и убедиться в их состоятельности. Реальное положение дел определенно усугубляет ситуацию, ибо медленные соединения и большие задержки становятся еще больше, а быстрые методы соединения по-прежнему выигрывают.
|
Поисковая оптимизация. С чего все начинаетсяПоисковая оптимизация - это комплекс работ над сайтом и внешними факторами для достижения наилучших позиций в поисковых системах в соответствии с выбранными ключевыми словами. Поисковую оптимизацию можно разделить на внутреннюю и внешнюю. Внутренняя оптимизация сайта направлена на работу с самим сайтом. Читать полностью |
Продвижение в регионахВ апреле 2009-го года «Яндекс» применил раздельное региональное ранжирование и этот день стал днем новой эпохи российского поискового маркетинга. Ранжирование Яндекс представил в составе алгоритма «Арзамас», из 3-х регионов в России (Москву, Санкт-Петербург и Россию целиком) и отдельные выдачи для почти десятка государств СНГ. Позднее презентовался «Арзамас 1.2» – ранжирование уже включило...Читать полностью |
Алгоритм Магадан14 апреля 2008 года адресу buki.yandex.ru начала тестироваться новый поисковый алгоритм «Магадан». Кроме того, что увеличилось вдвое количество факторов ранжирования, был также добавлены следующие нововведения: Читать полностью |
Навигационные запросыПримерно каждый десятый запрос к Яндексу – «навигационный», то есть состоит из названия организации или сайта и пользователь хочет перейти на сайт этой организации. В этом случае поисковая строка Яндекса используется вместо адресной строки браузера и остальные девять поисковых результатов пользователя, как правило, не интересуют. Не отвлекая пользователя от главной цели, мы добавили после... Читать полностью |



