Уменьшение количества запросов. Исключение избыточных HTTP-запросов. Обзор методов клиентской оптимизации
Объединение изображений
Встраивание внешних объектов в код веб-страницы
Исключение избыточных HTTP-запросов
Настройка кэширования
Уменьшение времени разрешения доменного имени
Перед тем, как браузер сможет установить соединение с веб-сервером, он должен разрешить доменное имя, т.е. зная его, вычислить IP-адрес сервера. Результат может быть закэширован в браузере и операционной системе пользователя и задержки при повторном открытии веб-страницы не возникнет.
Если же такой записи к кэше не существует, задержка на время поиска IP-адреса может оказаться значительной и будет зависеть от доступности DNS-сервера, содержащего требуемую информацию (а иногда и от доступности цепочки таких серверов).
Наилучший способ уменьшить временные издержки, связанные с разрешением доменного имени - использовать наименьшее количество различных хостов для размещения внешних объектов веб-страниц, в особенности для тех объектов, которые требуются для первоначального отображения страницы.
Идеальным, с точки зрения минимизации времени разрешения адреса DNS-сервера, считается вариант, когда все объекты расположены на том же хосте, откуда была загружена веб-страница. Чем меньше используется хостов, тем больше вероятность того, что браузер сможет повторно использовать уже установленное соединение.
На практике же, поскольку почти у всех браузеров существуют ограничения на количество одновременных соединений с одним хостом. Принимая во внимание это ограничение, наибольший выигрыш в скорости загрузки страниц можно получить, распределив загружаемые объекты по нескольким (4-6) хостам. Подробнее об особенностях параллельной загрузки объектов можно прочитать в пятой главе книги «Разгони свой сайт».
Уменьшение количества редиректов
Иногда возникает необходимость перенаправить браузер с одного адреса на другой. Причины чаще всего следующие:
добавить косую черту к имени домена;
предоставить пользователю документ, перемещенный на другой адрес;
позволить пользователю обращаться к документам сайта даже если он ошибся в написании адреса
(например, не набрал www в начале адреса);
направить пользователей на другие домены первого уровня, основываясь на его географическом месторасположении и данных об используемом им языке;
направить пользователей на определенные страницы в зависимости от того, авторизован он или нет;
направить пользователей на страницы с другим протоколом (HTTP или HTTPS)
отследить и сохранить действия пользователя и т.д.
Какой бы ни была причина, каждый редирект порождает дополнительный HTTP-запрос, занимающий определенное время. Поэтому для страниц, для которых скорость загрузки наиболее критична, число редиректов должно быть сведено к минимуму. Для этого необходимо:
следить за тем, чтобы ссылки на веб-страницах не вели на адреса, где заведомо будет срабатывать редирект;
избегать цепных (последовательных) редиректов;
использовать минимальное количество альтернативных адресов для одних и тех же страниц, стараясь предоставить всем пользователям единственный актуальный адрес для каждой страницы;
использовать внутренние перенаправления - функцию доступную в большинстве веб-серверов;
использовать средства отслеживания информации о пользователе, не основанные на редиректах;
предпочитать серверные редиректы клиентским, которые могут быть заданы при помощи тега <meta> или JavaScript-обработчика. Редиректы отправляющие браузеру код состояния 300, 301 или 302 и заголовок Location обрабатываются браузером моментально, а для выполнения клиентских редиректов браузеру требуется дополнительное время на разбор полученной веб-страницы. Кроме того, некоторые браузеры могут кэшировать информацию о редиректах, тем самым ускоряя повторную загрузку ранее открытых веб-страниц.