Аннотация: Будь то на работе или на собеседовании, оптимизация производительности веб-интерфейса очень важна. Итак, с чего нам нужно начать оптимизацию? Вы можете следовать 34 Catch-Rules Yahoo для внешней оптимизации, но теперь их 35, поэтому можно сказать, что это Yahoo Catch-35 для внешней оптимизации. Это классифицировано, и это хорошо. Таким образом, у нас есть более четкое направление для оптимизации.
содержательная часть 1. Минимизируйте количество HTTP-запросов.80% времени ответа конечного пользователя тратится на интерфейс, и большую часть этого времени приходится на загрузку различных компонентов на странице: изображений, таблиц стилей, скриптов, Flash и т. д. Уменьшение количества компонентов неизбежно приведет к уменьшению количества HTTP-запросов, отправляемых страницей. Это ключ к ускорению вашей страницы.
Один из способов уменьшить количество компонентов страницы — упростить дизайн страницы. Но есть ли способ создавать сложные страницы, сокращая при этом время отклика? Что ж, действительно есть способ получить торт и съесть его.
Объединение файлов уменьшает количество запросов, помещая все скрипты в один файл. Конечно, вы также можете объединить все CSS. Объединение файлов может оказаться обременительной задачей, если сценарии и стили каждой страницы различны, но выполнение этого процесса в процессе публикации сайта действительно может улучшить время отклика. CSS-спрайты — предпочтительный способ уменьшить количество запросов изображений. Объедините все фоновые изображения в одно изображение, а затем используйте свойства CSS-фонового изображения и фоновой позиции, чтобы расположить отображаемую часть. Сопоставление изображений позволяет объединить несколько изображений в одно, общий размер остается тем же, но сокращает количество запросов и ускоряет загрузку страниц. Сопоставление изображений полезно только в том случае, если изображение на странице непрерывное, например на панели навигации. Процесс установки координат для карты-изображения утомителен и подвержен ошибкам, а использовать карты-изображения для навигации непросто, поэтому этот метод не рекомендуется. Встроенные изображения (в кодировке Base64) используют шаблон URL-адреса data: для встраивания изображений на страницу. Это увеличит размер HTML-файла. Помещение встроенных изображений в (кэшированную) таблицу стилей является хорошей идеей и позволяет избежать утяжеления страницы. Однако современные основные браузеры плохо поддерживают встроенные изображения.Уменьшение количества HTTP-запросов к странице — это отправная точка. Это важный ориентир для повышения скорости первого посещения сайта.
2. Уменьшите количество запросов DNSСистема доменных имен устанавливает соответствие между именами хостов и IP-адресами, подобно сопоставлению между именами и номерами в телефонной книге. Когда вы вводите www.yahoo.com в браузере, браузер свяжется с преобразователем DNS, чтобы вернуть IP-адрес сервера. DNS имеет свою стоимость: поиск IP-адреса для данного имени хоста занимает от 20 до 120 миллисекунд. Браузер не может ничего загрузить с имени хоста, пока поиск DNS не будет завершен.
DNS-запросы кэшируются более эффективно на специальном кэширующем сервере интернет-провайдера пользователя (провайдера Интернет-услуг) или в локальной сети, но также могут быть кэшированы на компьютере отдельного пользователя. Информация DNS хранится в кэше DNS операционной системы (клиентская служба DNS в Microsoft Windows). Большинство браузеров имеют собственный кеш, независимый от операционной системы. Пока браузер сохраняет эту запись в своем кеше, он не будет запрашивать DNS у операционной системы.
По умолчанию IE кэширует запросы DNS в течение 30 минут, как указано в параметре реестра DnsCacheTimeout. Firefox кэширует в течение 1 минуты, которую можно установить с помощью элемента конфигурации network.dnsCacheExpiration. (Fasterfox изменил время кэширования на 1 час PS Fasterfox - плагин для ускорения ФФ)
Если кэш DNS клиента пуст (включая браузер и операционную систему), количество поисков DNS равно количеству различных имен хостов на странице, включая URL-адреса страниц, изображения, файлы сценариев, таблицы стилей, объекты Flash и другие. Имя хоста, сокращение различных имен хостов может уменьшить количество запросов DNS.
Уменьшение количества различных имен хостов также уменьшает количество компонентов, которые страница может загружать параллельно. Отказ от поиска DNS сокращает время ответа, а уменьшение количества параллельных загрузок увеличивает время ответа. Мое правило — распределять компоненты по 2–4 именам хостов, что является компромиссом между сокращением DNS-запросов и обеспечением большого количества одновременных загрузок.
3. Избегайте перенаправленийВ перенаправлениях используются коды состояния 301 и 302. Вот заголовок HTTP с кодом состояния 301:
HTTP/1.1 301 Перемещено навсегда. Местоположение: http://example.com/newuriContent. Тип: text/html.
Браузер автоматически перейдет на URL-адрес, указанный в поле «Местоположение». Вся информация, необходимая для перенаправления, находится в заголовке HTTP, а тело ответа обычно пусто. Фактически, дополнительные заголовки HTTP, такие как Expires и Cache-Control, также представляют собой перенаправления. Есть и другие способы перенаправления: обновить метатеги и JavaScript, но если вам необходимо выполнить перенаправление, лучше всего использовать стандартный код состояния HTTP 3xx, главным образом для того, чтобы кнопка «Назад» работала правильно.
Имейте в виду, что перенаправления могут замедлить работу пользователя. Вставка перенаправления между пользователем и HTML-документом приведет к задержке всего на странице. Страница не будет отображаться, и компоненты не начнут загружаться, пока HTML-документ не будет передан на сервер. браузер.
Существует распространенное перенаправление, которое чрезвычайно расточительно расходует ресурсы, и веб-разработчики, как правило, не знают об этом, и это происходит, когда в конце URL-адреса отсутствует косая черта. Например, переход на http://astrology.yahoo.com/astrology вернет ответ 301, который перенаправляет на http://astrology.yahoo.com/astrology/ (обратите внимание на косую черту в конце). В Apache вы можете использовать инструкции Alias, mod_rewrite или DirectorySlash для отмены ненужных перенаправлений.
Чаще всего перенаправление используется для подключения старого сайта к новому сайту. Оно также может соединять разные части одного и того же сайта и выполнять некоторую обработку в зависимости от различных ситуаций пользователя (тип браузера, тип учетной записи пользователя и т. д.). . Соединение двух веб-сайтов с помощью перенаправлений является самым простым и требует лишь небольшого количества дополнительного кода. Хотя использование перенаправлений в это время снижает сложность разработки для разработчиков, оно снижает удобство для пользователей. Альтернативой является использование Alias и mod_rewrite при условии, что оба пути кода находятся на одном сервере. Если перенаправление используется из-за изменения имени домена, вы можете создать CNAME (создать запись DNS, указывающую на другое доменное имя в качестве псевдонима) в сочетании с директивой Alias или mod_rewrite.
4. Сделайте Ajax кэшируемымОдним из преимуществ Ajax является то, что он может обеспечить немедленную обратную связь пользователю, поскольку он может асинхронно запрашивать информацию с внутреннего сервера. Однако при использовании Ajax нет никакой гарантии, что пользователям не будет скучно ждать возвращения асинхронных ответов JavaScript и XML. Во многих приложениях способность пользователя ждать зависит от того, как используется Ajax. Например, в веб-клиенте электронной почты пользователи будут сосредоточены на результатах, возвращаемых запросами Ajax, чтобы найти сообщения электронной почты, соответствующие их критериям поиска. Важно помнить, что асинхронность не означает мгновенность.
Для повышения производительности решающее значение имеет оптимизация ответов Ajax. Самый важный способ улучшить производительность Ajax — сделать ответ кэшируемым, как описано в разделе «Добавление HTTP-заголовков Expires или Cache-Control». К Ajax применяются следующие дополнительные правила:
Давайте рассмотрим пример почтового клиента Web 2.0, использующего Ajax для загрузки адресной книги пользователя для функции автозаполнения. Если пользователь не изменял свою адресную книгу с момента последнего использования, а ответ Ajax кэшируется и имеет HTTP-заголовок Expires или Cache-Control, срок действия которого еще не истек, то предыдущую адресную книгу можно прочитать из кэша. Браузер должен быть проинформирован, следует ли ему продолжать использовать ранее кэшированный ответ адресной книги или запросить новый. Этого можно добиться, добавив к URL-адресу Ajax адресной книги метку времени, указывающую время последнего изменения адресной книги пользователя, например &t=1190241612. Если адресная книга не менялась с момента последней загрузки и временная метка остается неизменной, адресная книга будет считываться непосредственно из кэша браузера, что позволяет избежать дополнительного HTTP-обмена. Если пользователь изменил адресную книгу, временная метка также гарантирует, что новый URL-адрес не будет соответствовать кэшированному ответу, и браузер запросит новую запись адресной книги.
Несмотря на то, что ответы Ajax создаются динамически и могут быть доступны только одному пользователю, их можно кэшировать, что ускорит работу вашего приложения Web 2.0.
5. Ленивая загрузка компонентовПрисмотритесь к странице и спросите себя: что необходимо для рендеринга страницы в первую очередь? Остальное может подождать.
JavaScript — идеальный выбор для разделения событий до и после события загрузки. Например, если у вас есть код JavaScript и библиотеки, поддерживающие перетаскивание и анимацию, они могут подождать, поскольку элемент перетаскивания возникает после первоначальной визуализации страницы. Другие разделы, которые можно загружать с отложенной загрузкой, включают скрытый контент (контент, который появляется после взаимодействия) и свернутые изображения.
Инструменты могут помочь снизить рабочую нагрузку: YUI Image Loader может отложенно загружать свернутые изображения, а утилита YUI Get — это простой способ добавить JS и CSS. Домашняя страница Yahoo! является примером. Вы можете открыть сетевую панель Firebug и рассмотреть ее поближе.
Лучше всего согласовать цели производительности с другими передовыми практиками веб-разработки, такими как прогрессивное улучшение. Если клиент поддерживает JavaScript, взаимодействие с пользователем можно улучшить, но вы должны убедиться, что страница работает правильно, когда JavaScript не поддерживается. Итак, как только вы убедитесь, что ваша страница работает правильно, вы можете улучшить ее с помощью сценариев отложенной загрузки для поддержки некоторых необычных эффектов, таких как перетаскивание и анимация.
6. Предварительная загрузка компонентов
Предварительная загрузка может показаться противоположностью отложенной загрузки, но на самом деле она преследует другую цель. Предварительно загружая компоненты, вы можете в полной мере использовать время простоя браузера для запроса компонентов (изображений, стилей и скриптов), которые будут использоваться в будущем. Когда пользователь обращается к следующей странице, большинство компонентов уже находятся в кеше, поэтому с точки зрения пользователя страница загружается быстрее.
В реальных приложениях существуют следующие типы предварительной загрузки:
Сложная страница означает необходимость загрузки большего количества байтов, а доступ к DOM с помощью JavaScript будет медленнее. Например, если вы хотите добавить обработчик событий, существует разница между циклическим перебором 500 элементов DOM на странице и 5000 элементов DOM.
Большое количество элементов DOM — признак того, что на странице имеется ненужная разметка, которую необходимо очистить. Используете ли вы вложенные таблицы для макета? Или вы добавили кучу <div> только для того, чтобы исправить проблему с макетом? Возможно, следует использовать лучшую семантическую разметку.
Утилиты YUI CSS очень полезны для макетирования: Grids.css предназначен для общего макета, а Fonts.css и Reset.css можно использовать для удаления форматирования браузера по умолчанию. Это хорошая возможность начать очищать и думать о своей разметке, например, использовать <div> только тогда, когда это имеет семантический смысл, а не потому, что он отображает новую строку.
Количество элементов DOM легко проверить, просто введите в консоли Firebug:
document.getElementsByTagName('*').lengthТак сколько элементов DOM слишком много? Вы можете ссылаться на другие подобные хорошо заметные страницы. Например, домашняя страница Yahoo! довольно загружена, но содержит менее 700 элементов (тегов HTML).
8. Междоменное разделение компонентовРазделение компонентов может максимизировать параллельную загрузку, но убедитесь, что вы используете не более 2–4 доменов, так как за поиск DNS взимается штраф. Например, вы можете развернуть HTML и динамический контент на сайте www.example.org и разделить статические компоненты на static1.example.org и static2.example.org.
9. Используйте iframe как можно меньшеВы можете использовать iframe для вставки HTML-документа в родительский документ. Важно понимать, как работает iframe, и эффективно его использовать.
Преимущества <iframe>:
Недостатки <iframe>:
HTTP-запросы являются дорогостоящими. Нет необходимости использовать HTTP-запрос для получения бесполезного ответа (например, 404 Not Found). Это только замедлит работу пользователя без какой-либо пользы.
Некоторые сайты используют полезный код 404 — вы имеете в виду xxx? , Это полезно для пользователя, но при этом тратится ресурсы сервера (например, базы данных и т. д.). Хуже всего то, что внешний JavaScript, на который вы ссылаетесь, содержит ошибку и результат — 404. Во-первых, такие загрузки будут блокировать параллельные загрузки. Во-вторых, браузер попытается проанализировать тело ответа 404, поскольку это код JavaScript, и ему необходимо выяснить, какие его части доступны.
CSS-часть 11. Избегайте использования выражений CSSИспользование выражений CSS для динамической установки свойств CSS — мощный и опасный способ. Поддерживается в IE5, но не рекомендуется в IE8. Например, вы можете использовать выражение CSS, чтобы изменить цвет фона по часам:
цвет фона: выражение( (новая дата()).getHours()%2 ? #B8D4FF : #F08A00 );12. Выберите <ссылка>, чтобы отменить @import.
Лучшая практика упоминалась ранее: для достижения прогрессивного рендеринга CSS следует размещать вверху.
Использование @import в IE имеет тот же эффект, что и использование <link> внизу, поэтому лучше его не использовать.
13. Избегайте использования фильтровСобственный фильтр AlphaImageLoader от IE можно использовать для решения проблемы полупрозрачных изображений PNG в версиях до IE7. В процессе загрузки изображения этот фильтр будет блокировать рендеринг, зависать в браузере, увеличивать потребление памяти и применяется к каждому элементу, а не к каждому изображению, поэтому проблем будет много.
Лучший способ — просто не использовать AlphaImageLoader и плавно перейти на использование изображений PNG8, которые хорошо поддерживаются в IE. Если вам необходимо использовать AlphaImageLoader, вам следует использовать подчеркивание hack:_filter, чтобы не влиять на пользователей IE7 и выше.
14. Поместите таблицу стилей вверху.Изучая производительность в Yahoo!, мы обнаружили, что размещение таблиц стилей в разделе HEAD документа приводит к ускорению загрузки страницы. Это связано с тем, что размещение таблицы стилей в заголовке позволяет странице отображаться постепенно.
Разработчики внешнего интерфейса, которые беспокоятся о производительности, хотят, чтобы страница отображалась постепенно. Другими словами, мы хотим, чтобы браузер отображал существующий контент как можно быстрее, что особенно важно, когда на странице много контента или когда интернет-соединение пользователя очень медленное. Важность предоставления пользователям обратной связи (например, индикаторов прогресса) широко изучалась и документировалась. В нашем случае HTML-страница является индикатором прогресса! Когда браузер постепенно загружает заголовок страницы, панель навигации, верхний логотип и т. д., они используются в качестве обратной связи пользователями, ожидающими загрузки страницы, что может улучшить общее впечатление от пользователя.
js-часть 15. Удалите повторяющиеся скрипты.Страницы, содержащие повторяющиеся файлы сценариев, могут повлиять на производительность больше, чем вы думаете. При обзоре 10 лучших веб-сайтов в США только два сайта содержали повторяющиеся скрипты. Две основные причины увеличивают вероятность появления дубликатов сценариев на одной странице: размер команды и количество сценариев. В этом случае дублирующиеся скрипты создают ненужные HTTP-запросы, выполняют бесполезный код JavaScript и влияют на производительность страницы.
IE генерирует ненужные HTTP-запросы, а Firefox — нет. В IE, если некэшируемый внешний скрипт дважды вводится на странице, он генерирует два HTTP-запроса при загрузке страницы. Даже если сценарий кэшируется, он будет генерировать дополнительные HTTP-запросы, когда пользователь перезагружает страницу.
Помимо генерации бессмысленных HTTP-запросов, многократное выполнение сценария приводит к потере времени. Потому что независимо от того, кэшируется скрипт или нет, в Firefox и IE будет выполняться избыточный код JavaScript.
Один из способов избежать случайного импорта одного и того же сценария дважды — реализовать модуль управления сценариями в системе шаблонов. Типичный способ внедрения скриптов — использование тегов SCRIPT на страницах HTML:
<тип сценария=текст/javascript src=menu_1.0.17.js></script>16. Минимизируйте доступ к DOM
Доступ к элементам DOM с помощью JavaScript происходит очень медленно, поэтому, чтобы сделать страницу более отзывчивой, вам следует:
Иногда создается впечатление, что страница недостаточно отзывчива, потому что к различным элементам дерева DOM добавлено слишком много часто выполняемых обработчиков событий. Именно поэтому рекомендуется делегировать события. Если в элементе div 10 кнопок, вам следует добавить в контейнер элемента div только один обработчик событий вместо одного для каждой кнопки. События могут всплывать, поэтому вы можете зафиксировать событие и узнать, какая кнопка является его источником.
18. Поместите скрипт внизуСкрипт блокирует параллельные загрузки. Официальная документация HTTP/1.1 рекомендует браузеру не загружать более двух компонентов параллельно на одно имя хоста. Если изображение поступает с нескольких имен хостов, количество параллельных загрузок может превышать два. Если скрипт загружается, браузер не будет запускать другие задачи загрузки, даже под другим именем хоста.
Иногда непросто переместить скрипт вниз. Например, если сценарий вставлен в содержимое страницы с помощью document.write, переместить его дальше вниз невозможно. Также могут возникнуть проблемы с объемом работ, которые в большинстве случаев можно решить.
Распространенным предложением является использование отложенных сценариев. Сценарии с атрибутом DEFER означают, что они не могут содержать document.write и запрашивают браузер сообщить им, что они могут продолжить рендеринг. К сожалению, Firefox не поддерживает атрибут DEFER. В IE сценарий может быть отложен, но не так, как ожидалось. Если сценарий можно отложить, мы можем переместить его в конец страницы, и страница будет загружаться быстрее.
яваскрипт, CSS 19. Держите JavaScript и CSS снаружиМногие принципы производительности касаются того, как управлять внешними компонентами, однако, прежде чем возникнут эти проблемы, вам следует задать более простой вопрос: следует ли размещать JavaScript и CSS во внешних файлах или писать непосредственно на странице?
Фактически, использование внешних файлов может ускорить работу страницы, поскольку файлы JavaScript и CSS будут кэшироваться в браузере. Встроенный код JavaScript и CSS в HTML-документе загружаются повторно каждый раз, когда запрашивается HTML-документ. Это уменьшит количество требуемых HTTP-запросов, но увеличит размер HTML-документа. С другой стороны, если JavaScript и CSS находятся во внешних файлах и кэшируются браузером, то мы успешно уменьшили размер HTML-документа, не увеличивая количество HTTP-запросов.
20. Минимизируйте JavaScript и CSSСжатие специально удаляет ненужные символы из кода, чтобы уменьшить его размер и тем самым повысить скорость загрузки. Минимизация кода означает удаление всех комментариев и ненужных пробелов (пробелов, новых строк и табуляции). Выполнение этого с помощью JavaScript может улучшить скорость реагирования, поскольку загружаемый файл имеет меньший размер. Двумя наиболее часто используемыми инструментами сжатия кода JavaScript являются JSMin и YUI Compressor. Компрессор YUI также может сжимать CSS.
Запутывание — это дополнительная мера по оптимизации исходного кода, которая более сложна, чем сжатие, поэтому процесс запутывания также с большей вероятностью приведет к возникновению ошибок. По данным опроса десяти крупнейших веб-сайтов США, сжатие может уменьшить размер на 21%, а запутывание — на 25%. Хотя запутывание обеспечивает более высокую степень сокращения, оно более рискованно, чем сжатие.
Помимо сжатия внешних скриптов и стилей, можно также сжимать встроенные блоки <script> и <style>. Даже если модуль gzip включен, предварительное сжатие может уменьшить размер на 5% и более. JavaScript и CSS используются все больше и больше, поэтому сжатие кода будет иметь хороший эффект.
картина 21. Оптимизируйте изображенияПопробуйте преобразовать формат GIF в формат PNG и посмотрите, сэкономит ли это место. Запустите pngcrush (или другой инструмент оптимизации PNG) для всех изображений PNG.
22. Оптимизация CSS-спрайтаНе используйте изображения большего размера, чем вам нужно, только потому, что вы можете установить ширину и высоту в HTML. если необходимо
<img width=100 height=100 src=mycat.jpg Хост: us.yimg.com If-Modified-Since: вторник, 12 декабря 2006 г. 03:03:59 GMT If-None-Match: 10c24bc-4ab-457e1c1f HTTP/ 1.1 304 Не изменено32. Используйте запрос GET для Ajax.
Команда Yahoo! Mailbox обнаружила, что при использовании XMLHttpRequest POST-запрос браузера реализуется в виде двухэтапного процесса: сначала отправка HTTP-заголовка, а затем отправка данных. Поэтому лучше всего использовать запрос GET, который должен отправить только TCP-сообщение (если только файлов cookie не слишком много). Максимальная длина URL-адреса IE составляет 2 КБ, поэтому, если отправляемые данные превышают 2 КБ, использовать GET невозможно.
Интересным побочным эффектом запросов POST является то, что данные фактически не отправляются, как запросы GET. Как описано в документации HTTP, запросы GET используются для получения информации. Таким образом, его семантика предназначена только для запроса данных с помощью запроса GET, а не для отправки данных, которые необходимо сохранить на сервере.
33. Очистите буфер как можно раньшеКогда пользователь запрашивает страницу, серверу требуется от 200 до 500 миллисекунд для сборки HTML-страницы, в течение этого времени браузер простаивает и ожидает поступления данных. В PHP есть функцияlush(), которая позволяет отправить часть подготовленного HTML-ответа в браузер, чтобы браузер мог начать получать компоненты, одновременно подготавливая оставшуюся часть в фоновом режиме. в очень загруженном фоне или в очень легком интерфейсе На странице (PS Другими словами, преимущество лучше всего отражается, когда время отклика в основном происходит в фоновом режиме).
Идеальное место для очистки буфера — после HEAD, потому что HEAD-часть HTML обычно легче сгенерировать и позволяет вводить любые файлы CSS и JavaScript, позволяя браузеру начать извлекать компоненты параллельно, пока фоновый процесс все еще обрабатывается. .
Например:
... <!-- css, js --> </head> <?phplush() ?> <body> ... <!-- контент -->34. Используйте CDN (сеть доставки контента).
Физическое расстояние пользователя от сервера также влияет на время отклика. Развертывание контента на нескольких географически разнесенных серверах позволяет пользователям быстрее загружать страницы. Но как это сделать?
Первый шаг к созданию географически распределенного контента: не пытайтесь перепроектировать свое веб-приложение, чтобы оно соответствовало распределенной структуре. В зависимости от приложения изменение структуры может включать в себя сложные задачи, такие как синхронизация состояния сеанса и репликация транзакций базы данных между серверами (переводы могут быть неточными). Предложения по сокращению дистанции между пользователями и контентом могут быть отложены или просто невозможны из-за этой трудности.
Помните, что от 80% до 90% времени ответа конечного пользователя тратится на загрузку компонентов страницы: изображений, стилей, скриптов, Flash и т. д. Это золотое правило производительности. Лучше сначала децентрализовать статический контент, чем перепроектировать структуру приложения с самого начала. Это не только значительно сокращает время ответа, но и упрощает демонстрацию вклада CDN.
Сеть доставки контента (CDN) — это группа веб-серверов, разбросанных в разных географических точках для более эффективной доставки контента пользователям. Обычно выбор сервера для доставки контента зависит от расстояния в сети. Например: выберите сервер с наименьшим количеством прыжков или самым быстрым временем отклика.
35. Добавьте HTTP-заголовок Expires или Cache-Control.У этого правила есть два аспекта:
Веб-дизайн становится богаче, а это значит, что на странице появляется больше скриптов, изображений и Flash. Новым посетителям сайта, возможно, все равно придется отправить несколько HTTP-запросов, но при использовании даты истечения срока действия компонент становится кэшируемым, что позволяет избежать ненужных HTTP-запросов во время последующих сеансов просмотра. HTTP-заголовки с истекающим сроком действия обычно используются в изображениях, но их следует использовать во всех компонентах, включая сценарии, стили и компоненты Flash.
Браузеры (и прокси-серверы) используют кеширование, чтобы уменьшить количество и размер HTTP-запросов, чтобы страницы загружались быстрее. Веб-сервер использует HTTP-заголовок ответа Expiration, чтобы сообщить клиенту, как долго следует кэшировать каждый компонент страницы. Использование времени в отдаленном будущем в качестве даты истечения срока действия сообщает браузеру, что этот ответ не изменится до 15 апреля 2010 года.
Истекает: четверг, 15 апреля 2010 г., 20:00:00 GMT.
Если вы используете сервер Apache, используйте директиву ExpiresDefault, чтобы установить дату истечения срока действия относительно текущей даты. В следующем примере устанавливается период действия 10 лет с момента запроса:
Срок действия Доступ по умолчанию плюс 10 лет
Выше приведено все содержание этой статьи. Я надеюсь, что она будет полезна для изучения всеми. Я также надеюсь, что все поддержат сеть VeVb Wulin.