Что такое кэширование сайта и почему это важно?

Что такое кэширование сайта и почему это важно?

Что такое кэширование

Кэширование — это процесс, при котором элементы сайта или страница целиком сохраняются в кэше (хранилищах быстрого доступа). Благодаря этому контент не генерируется заново для каждого посетителя, создавая нагрузку на сервер, а извлекается из кэша в готовом виде и отдаётся пользователям быстрее.

Рассмотрим на примере. На большинстве сайтов есть страница «Контакты» с адресами и телефонами офиса, email, формой обратной связи и т. д. Как правило, она меняется нечасто. То, как будет загружаться эта страница, зависит от того, включено ли на веб-сайте кэширование.

Вариант 1. Кэширование выключено

Каждый пользователь, открывший «Контакты», отправляет запрос серверу и ждёт, пока тот сгенерирует контент (хэдер, текст, карту, футер сайта). Если на страницу зайдёт 20 человек, сервер выполнит одну и ту же операцию 20 раз.

Вариант 2. Кэширование включено

Сервер преобразует все элементы страницы в HTML-файл (например, contacts.html). Когда пользователь откроет «Контакты», сервер не будет ничего генерировать заново, а просто отдаст содержимое файла contacts.html из кэша. Таким образом, один раз закэшировав данные, сервер не повторяет действия много раз.

Использование кэширования позволяет:

Отключение кэширование основано на обновлении даты

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

Вообще, я не слишком в этом хорош. Мне кажется, что каждый раз спрашивать сервер при просмотре страницы будет крайне опасно. Раньше я вообще искал фото на сервере по его размерам! Будьте осторожны, в общем.

Основные плагины для кэширования


К счастью уже существует очень много плагинов, которые помогут оптимизировать скорость ваших сайтов. Ниже некоторые их самых популярных:

  • W3 Total Cache — комплексное решение для оптимизации кэширования, которое используется на миллионах сайтов на WordPress по всему миру. Он совместим почти со всеми видами хостинга. Плагин осуществляет кэширование страницы, баз данных и объектов через общий диск или Memcached почти для всех видов веб-ресурсов. Это по-настоящему универсальный плагин: у него есть дополнительные функции, такие как минимизация и возможность интеграции с популярными инструментами мониторинга;
  • Redis Object Cache – серверное приложение для кэша постоянных объектов, работающее на базе Redis, сервиса с открытым кодом для хранения структуры данных в памяти. У плагина простой пользовательский интерфейс. Обратите внимание: плагин не для использования на виртуальном хостинге;
  • BatCache – это еще один плагин для кэширования объектов, использующий Memcached для предупреждения сбоев работы сайта в связи с всплеском трафика. Для установки необходимо скопировать файлы и внести изменения в файл конфигурации. Пользовательского интерфейса нет. Советую пользователям сервера Memcached рассмотреть этот плагин. Обратите внимание: и этот плагин не совместим с виртуальным хостингом;
  • WP Super Cache пригодится тем, кому нужна высокая скорость кэширования файлов веб-страниц. WP Super Cache для передачи данных пользователям генерирует статические html-файлы вашего сайта WordPress, а не динамически создает страницы в момент получения запроса. Вариант отлично пойдет для виртуального и выделенного хостинга;
  • WP Rocket – прекрасный вариант для виртуального хостинга. Плагин платный, в основном предназначен для кэширования страницы и браузера, а также для предварительной загрузки из кэша. Его легко установить и настроить под собственные потребности (а еще у него прекрасный персонал службы поддержки). Доступны дополнительные настройки, например отложенная загрузка и оптимизация шрифта.

Есть вопросы или советы, связанные с кэшированием? Пишите в комментариях!

HOSTING.cafe предлагает инструменты для поиска виртуальных и выделенных серверов, виртуального хостинга и SSL-сертификатов.

Что такое кэширование сайта и почему это важно

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

Сама идея реализации кеширования проста. Позвольте мне привести пример.

Если я спрошу вас, сколько будет 5 умножить 3, вы поймете, что правильный ответ 15. При этом не нужно его вычислять — вы просто помните результат, и не осуществляете никакой умственной обработки. Примерно так и работает кеширование.

Сайты тысячи, а иногда и миллионы раз в месяц. Каждый раз, когда браузер запрашивает веб-страницу, сервер должен выполнять кучу сложных вычислений. Он извлекает последние записи, генерирует шапку и подвал сайта, находит виджеты боковой панели и так далее. Но во многих случаях результат вычислений будет неизменным. Здорово, если бы мы могли заставить сервер запомнить окончательный результат, а не обрабатывать каждый запрос отдельно. Это именно то, что делает кеширование!

Интернет кэш — что это такое? Сейчас поясню. Допустим, у вас есть блог с включенным кэшированием. Когда кто-то посещает главную страницу вашего блога в первый раз, он получает ее обычным способом: запрос обрабатывается на сервере, и полученная веб-страница, которая должна быть отображена, преобразуется в HTML-файл и отправляется в браузер посетителя.

Поскольку кэширование включено, сервер сохраняет этот HTML-файл в своей «оперативной памяти» (или RAM), это делается очень быстро. В следующий раз, когда вы захотите просмотреть главную страницу, серверу не придется выполнять обработку и преобразование в HTML. Вместо этого он отправит ранее подготовленный HTML-файл в браузер.

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

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

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

Сайт, разработанный и реализованный надлежащим образом, может загружаться всего за две секунды. Разве это недостаточно быстро? Необходимо ли использовать кэширование? Ответ — однозначно, да.

Используя кэширование в браузере и на сервере, вы все равно сможете сократить время загрузки. А когда речь идет о скорости загрузки, всегда стоит сделать так много, как только возможно!

Насколько эффективно кэширование? Согласно недавнему исследованию YUI, кэширование в браузере может увеличить скорость сайта на целых 300%!

Существует два типа кэширования — серверный и браузерный. Давайте рассмотрим различия между ними.

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

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

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

Возможно, вы столкнетесь с терминами «кэш объектов» и «полный кэш страниц». Оба обозначают методы кэширования на сервере. Кэш полной страницы — это то, о чем мы говорили до сих пор.

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

Есть три вещи, которые нужно знать о кешировании в WordPress: написание эффективного кода, использование плагинов кэширования и использование встроенного кэша хостинга.

Самое важное правило – никогда не используйте одновременно больше одного плагина кэша страниц интернета. Это не сделает ваш сайт быстрее, а намного медленнее и в результате просто сломает.

Используйте одновременно только один плагин кэширования. При правильной настройке это поможет значительно ускорить работу сайта. Лучшие плагины кэширования — WP Rocket, W3 Total Cache и WP Super Cache.

Это относится к сайтам, которые работают на WordPress. Я могу рекомендовать WPEngine, Flywheel и Kinsta. Все они предоставляют превосходные сервисы кэширования.

Системы кэширования, используемые этими хостингами, работают на гораздо более низком уровне по сравнению с плагинами для WordPress, что намного эффективнее. Они настроены специально для работы с WordPress и используемым хостингом, что еще больше увеличивает их ценность.

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

Мы не будем вдаваться в подробности, но первое, что вы должны знать — это то, как устроен WordPress.

Например, если вы получаете метаданные для записи, и вызываете get_post_meta($post_id, ‘co-author’, true );,WordPress извлекает все метаданные для этого поста. Поэтому наличие 50 отдельных запросов get_post_meta() для извлечения одной записи не является расточительством.

Следующее, что вам нужно изучить, это как правильно использовать переходные процессы в WordPress. Переходные процессы — это своеобразное решение для кэширования объектов с датой истечения срока действия. Их можно использовать для кэширования подвала или шапки, которые не изменяются с течением времени, за исключением особых случаев. Тогда вы просто очищаете кэш.

Сейчас ищут техподдержку:  Что делать, если не получается подтвердить паспорт на портале Госуслуг

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

Если вы еще не кэшируете свой сайт, сделайте это! Чтобы начать работу с кэшированием, ознакомьтесь с упомянутыми выше плагинами.

Данная публикация является переводом статьи «What is Website Caching and Why is it so Important» , подготовленная редакцией проекта.

▍веб-ускорители

Веб-ускоритель (web accelerator) — это прокси-сервер, который уменьшает время доступа к сайту. Он делает это, заранее запрашивая у сервера документы, которые, вероятнее всего, понадобятся клиентам в ближайшем будущем. Подобные серверы, кроме того, могут сжимать документы, ускорять выполнение операций шифрования, уменьшать качество и размер изображений, и так далее.

▍обратные прокси-серверы

Обратный прокси-сервер (reverse proxy) — это обычно сервер, расположенный там же, где и веб-сервер, с которым он взаимодействует. Обратные прокси-серверы предназначены для предотвращения прямого доступа к серверам, расположенным в частных сетях. Обратные прокси используются для балансировки нагрузки между несколькими внутренними серверами, предоставляют возможности SSL-аутентификации или кэширования запросов.

▍пограничное кэширование

Обратные прокси-серверы расположены близко к серверам. Существует и технология, при использовании которой кэширующие серверы располагаются как можно ближе к потребителям данных. Это — так называемое пограничное кэширование (edge caching), представленное сетями доставки контента (CDN, Content Delivery Network).

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

Прокси-серверы в инфраструктуре обмена данными между клиентом и сервером

▍прямые прокси-серверы

Прямой прокси-сервер (forward proxy, часто такие серверы называют просто proxy server) обычно устанавливается на стороне клиента. Веб-браузер, который настроен на использование прямого прокси-сервера, будет отправлять исходящие запросы этому серверу.

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

▍шлюзы

Шлюз (gateway) — это прокси-сервер, который перенаправляет входящие запросы или исходящие ответы, не модифицируя их. Такие прокси-серверы ещё называют туннелирующими прокси (tunneling proxy), веб-прокси (web proxy), прокси (proxy), или прокси уровня приложения (application level proxy).

Css необходимо кэшировать, это очень важно…

Просто посмотрим на то, как выглядят заголовки для кэширования CSS файлов:

Нам нужны Cache-Control и Expires. Я не эксперт в области конфигурации серверов, обычно я смотрю в H5BP конфиги. Но в нашем случае есть классический способ через Apache/HTAccess:

Etag’и

Возможно ETag’и покажутся хорошей идеей, так как большинство из них это информация о том, имеются ли уже у браузера копии файлов. Но большинство советчиков в интернете говорят: «отключайте ETag заголовки». Yahoo говорит:

«Вся проблема с ETag’ами в том, что они создаются с помощью атрибутов, которые делают их уникальными для каждого сервера. ETag’и не совпадут, если браузер получил компонент от одного сервера, и тот пытается проверить компонент на другом сервере. Общая проблема сайтов, построенных на кластерных серверах.»

Другая проблема в том, что они просто не эффективны при кэшировании. Для проверки ETag’ов все еще нужно делать сетевые запросы. Это не просто загрузка файлов, которая уменьшает производительность, а также различные задержки на стороне сервера при обработке запросов.

И снова я не эксперт в этой тематике, но рекомендуется отключить их в Apache:

Асинхронная загрузка css

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

Виртуальный хостинг

Это самый популярный (и самый экономный) вид веб-хостинга. При таком варианте большое количество сайтов размещаются на одном сервере, подключенному к сети. Часто встречается подвид виртуального хостинга — распределенный хостинг, который разделяет потребности сайтов по всем серверам в кластере, аналогично электросети (например, Grid от Media Temple).

На виртуальном хостинге скорость зависит от выделяемого объема RAM и вида носителя. Потрясающих показателей или полного доступа к системе у вас не будет, но в самом худшем случае вы можете рассчитывать на 200 Мб RAM и хранение на SSD.

Выделенный сервер и виртуальное честное облако


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

Выделенный хостинг предоставляет целый сервер с полноценным доступом к нему средствами Linux или Windows. Как и раньше, ваш выбор следует делать в пользу большего объема RAM (или по крайней мере, в соответствии с вашими потребностями) и хранилища данных на базе SSD накопителей.

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

На VPS-хостинге пользователи получают отдельную виртуальную машину. Поставщик услуги резервирует необходимые ресурсы из собственной сети и разделяет их таким образом, который не затрагивает базовое оборудование. Как и у выделенного хостинга, у VPS есть целый ряд применений.

Дело для фреймворков

Rails файлопровод

Я немного поработал с Rails файлопроводом и Sprockets. Если вы спросите меня, что это, я отвечу, что это фреймворки мечты. Я указал ссылку в шаблоне:

Которая генерирует HTML:

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

WordPress

Если вы применяете кэширование страниц в WordPress, типа W3 TotalCache или еще что-то, то вам можно не беспокоиться, что filemtime нагрузит сервер. Gilbert Pellegrom написал статью о технике отключения кэша на WordPress, в ней он использовал этот код:

Плагин Busted! делает то же самое, только автоматически.

CodeKit

В CodeKit нету встроенного метода изменения имени файлов, но есть способ написать Shell скрипт.

У Michael Russell есть статья о том, как вставить временные отметки в самих себя, которые, как я уверен, можно модифицировать, чтобы изменить имя файла.

Сборки

Во всех популярных таск-раннерах есть плагин для изменения имени файла. У Sufian Rhazi есть статья о том, как делать это через Node.js.

Grunt

grunt-cache-bust

Gulp

Broccoli

broccoli-rev

С помощью препроцессоров

Во время линковки различных ресурсов (к примеру, изображение из LESS файла) можно подключить препроцессор. У Ben Nadel есть статья.

Запрет кэширования

Пересохраните файл test-1.php с новым именем test-2.php и измените его следующим образом:

Запросы

Сейчас браузеры видят URL с какими-либо запросами, как отдельные файлы и просто обновляют их на свежие копии. Большинство CDN поддерживают такую функцию и рекомендуют ее.

Что-то не так? Измените на это:

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

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

Изменение имени файла

Запросы не всегда срабатывают. Некоторые браузеры не различают разные строки запросов, как разные файлы. А некоторое ПО (Squid) вообще не кэширует файлы по строковым запросам. Steve Souders в своей статье рассказывает, почему не стоит использовать строковые запросы. Похожая техника применяется с изменением имени файла. Как в HTML ниже:

Необходимо программно изменить имя файла, а не просто вбить готовое. Таким образом, файл на самом деле не существует вообще, вам придется написать пару строк кода, чтобы попасть к нужному файлу. Совсем недавно Jeremy Keith открыл эту технику.

Сервер будет игнорировать цифры в именах файлов CSS и JavaScript, однако браузер все же будет считать названия файлами и будет пытаться обновить код. Jeremy Keith пользуется Twig и применяет следующий шаблон:

Уверен, что вы можете представить похожий код на любом backend языке (типа ASP). Можно потренироваться с написанием данного скрипта для обновления переменной.

Как настроить кэширование сайта (wordpress)

Настроить кэширование на сайте можно с помощью плагинов/расширений CMS вашего сайта. Многие популярные плагины позволяют его настроить так же тонко, как и в ручном режиме. Ниже рассмотрим, какие решения подойдут для этого в WordPress.

Кэш жёсткого диска

Жёсткие диски (HDD, Hard Disk Drive), применяемые для постоянного хранения данных — это, в сравнении с оперативной памятью, предназначенной для кратковременного хранения информации, устройства довольно медленные. Однако надо отметить, что скорость постоянных хранилищ информации увеличивается благодаря распространению твердотельных накопителей (SSD, Solid State Drive).

Сейчас ищут техподдержку:  Крупнейший независимый архив судебных решений объявил о закрытии из-за угроз — Meduza

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

Кэш жёсткого диска

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

Кэширование баз данных

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

Простой веб-сервер с базой данных

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

Кэширование и выбор хостинга

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

Кэширование и прокси-серверы

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

Кэш-шлюз (gateway cache)

Также известные как “реверсивные прокси-кэши” (reverse proxy cache) или “суррогаты” (surrogate cache) шлюзы тоже являются посредниками, но вместо того, чтобы использоваться системными администраторами для сохранения пропускной способности канала, они (шлюзы) обычно используются веб-мастерами для того, чтобы сделать их сайты более масштабируемыми, надежными и эффективными.

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

Сети доставки контента (content delivery networks, CDN) распространяют шлюзы по всему интернету (или некоторой его части) и отдают кэшированный контент заинтересованным веб-сайтам. Speedera и Akamai являются примерами CDN.

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

Мемоизация функций

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

Мемоизация функции с помощью таблицы поиска

Мемоизация — это обычный приём, используемый для повышения производительности программ. Однако он может быть не особенно полезным при работе с ресурсоёмкими функциями, которые вызываются редко, или с функциями, которые, и без мемоизации, работают достаточно быстро.

Мощность для производительности


Механизм кэширования зависит от аппаратной составляющей, на которой он применяется. Чем быстрее работает оборудование, тем быстрее запрошенная информация извлекается из кэша.

Самый медленный вариант — обыкновенный жесткий диск, который обрабатывает 200 мегабайт в секунду (Мб/с) и осуществляет 100 операций ввода-вывода в секунду (IOPS). Твердотельный накопитель (SSD) передает 600 Мб/с и осуществляет 300000 IOPS — намного лучше, чем обыкновенный жесткий диск. Но SSD проигрывают по сравнению со скоростью RAM: целых 20 Гб/с и четыре миллиона IOPS.

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

Наглядный пример: enterprise wordpress от media temple


В этом году мы запустили

, новый сервис корпоративного уровня для WordPress. В нем сочетается управление хостингом WordPress, Amazon Web Services (AWS), круглосуточная техническая поддержка и управление выделенной учетной записью. В Enterprise WordPress используется множество разнообразных способов кэширования, что гарантирует пользователям наивысшую скорость облачного хостинга. В целом мы следуем общей схеме:

Практически каждый упомянутый нами тип кэширования используется для оптимизации сайтов на Enterprise WordPress. Во-первых, MySQL сервер, настроен на улучшение кэширования баз данных. Кэширование объектов осуществляется на отдельных серверах, полностью в оперативной памяти.

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

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

Немного о кэшировании

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

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

Если вы посмотрите в папки кэша на вашем диске (для IE эта папка обычно находится здесь: «C:Documents and Settingsимя_пользователяLocal SettingsTemporary Internet Files», для Firefox: «C:Documents and Settingsимя_пользователяLocal SettingsApplication DataMozillaFirefoxProfiles_случайная_строка_.defaultCache»), то вы заметите, сколько файлов было сохранено вашим браузером.

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

Например, если будет кэшироваться страница чата, то пользователи просто не увидят новые сообщения. Веб-мастера часто считают кэш злом, и борются с этим злом в меру своих сил.

Нужно ли нам использовать кэширование?

Перед тем как приняться кэшировать все подряд, определимся нужно ли оно нам? Оно может понадобится в двух случаях:

— Снижение нагрузки на сервер. Тут все понятно, сервер

захлебывается

не справляется с поставленной задачей.

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

О быстродействии жёстких дисков и оперативной памяти


Разница между временным хранением данных в оперативной памяти и постоянным хранением на жёстком диске проявляется в скорости работы с информацией, в стоимости носителей и в близости их к процессору.

Время отклика оперативной памяти составляет десятки наносекунд, в то время как жёсткому диску нужны десятки миллисекунд. Разница в быстродействии дисков и памяти составляет шесть порядков!

Одна миллисекунда равна миллиону наносекунд

Обратимся к первоисточникам

В чем же проблема? Проблема в неправильном использовании заголовков ответа. В спецификации RFC2616 кэшированию посвящена целая глава.

Но, к сожалению, веб-мастера не часто читают спецификации. Итак, что же обозначают те заголовки, которые мы только что передали? Давайте их посмотрим. Это очень удобно делать с помощью дополнения к браузеру Firefox Web Developer Toolbar: Information.  View Response Headers (для IE похожий инструмент называется DevToolbar):

Итак, мы передали следующие заголовки:

Expires: Mon, 26 Jul 1997 05:00:00 GMT — этот заголовок устанавливает время актуальности информации. Мы же пытаемся передать дату в прошлом, полагая, что это заставит браузер каждый раз загружать страницу с сервера. Не заставляет, как мы хорошо заметили на опыте.

Last-Modified: Sat, 26 Jan 2008 17:03:02 GMT — Дата и время изменения информации на странице. Этот заголовок ВООБЩЕ никак не влияет на кэширование (читаем в RFC2616!), разве что может использоваться для запроса с валидаторами. Например, поисковый робот может запросить данные так:

Определения и быстродействие

Если исходить из самого простого определения, то кэш — это временное пространство для хранения или временная память, позволяющее обеспечить быстрый доступ к данным. Кэширование зачастую классифицируется по вариантам использования. На сегодняшний день разработчики веб-сайтов используют как минимум пять основных видов кэша.

Первый — кэширование объектов, при котором объекты приложения сохраняются локально для их дальнейшего использования при будущих запросах без необходимости обращения к исходному серверу. Следующий — кэширование баз данных, позволяющее сохранить в буфер памяти данные запроса для увеличения скорости работы баз данных.

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

Сейчас ищут техподдержку:  Поддержка сайтов на Joomla (Джумла)

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

Практическое запрещение кэширования

Таким образом, мы научились выключать кэш. Значит ли это, что нужно приведенный выше код включать во все ваши страницы? Совсем нет! Если вам нужно запретить кэширование во всех файлах папки (а не только для исполняемых php скриптов) можно настроить сервер Apache на передачу нужных нам заголовков.

LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
...
AddModule mod_expires.c
AddModule mod_headers.c

Отлично! Теперь просто создайте в своей папке файл .htaccess и впишите в него следующее:

#
# Запрещение кеширования в этой папке
# Необходимо включение модулей
# mod_headers.c и mod_expires.c
#
# Заголовок Cache-Control

<IfModule mod_headers.c>
Header append Cache-Control "no-store, no-cache, must-revalidate"
</IfModule>

# Заголовок Expires
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "now"
</IfModule>

Все! Необходимые заголовки передаются автоматически, и специально из писать в PHP уже не нужно — кэш уже выключен! В этом легко убедится, если посмотреть заголовки, передаваемые при запросе ЛЮБОГО файла этой папки:

Приступаем к теории

Есть несколько тактик кэширования:

— Устаревание (на определенное время).

— Инвалидация (навсегда и при надобности сами его убиваем).

— Комбинирование (на определенное время, но так же при надобности сами его убиваем).

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

Проверяем кэширование

Итак, запустим Apache со стандартными, дефолтовыми настройками. Здесь и далее мы используем Apache и PHP. Но это ни в коем случае не говорит, что описываемой проблемы и вариантов ее решения нет на платформе других серверов, например, у Microsoft IIS.

Прокси-кэш (proxy cache)

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

Поскольку прокси не являются частью клиента или исходного сервера, но при этом обращены в сеть, запросы должны быть к ним как-то переадресованы. Одним из способов является использование настроек браузера для того, чтобы вручную указать ему к какому прокси обращаться; другой способ — использование перехвата (interception proxy).

Прокси-кэши являются своего рода общей кэш-памятью (shared cache): вместо обслуживания одного человека, они работают с большим числом пользователей и поэтому очень хороши в сокращении времени ожидания и сетевого трафика. В основном, из-за того, что популярный контент запрашивается много раз.

Простой веб-сервер

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

Простой веб-сервер

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

При первом запросе жёсткий диск проверит кэш, в котором, в данном случае, ничего не будет, что приведёт к так называемому «промаху кэша». Затем данные считаются с самого диска и попадут в его кэш, что соответствует предположению, касающемуся того, что эти данные могут понадобиться снова.

При последующих запросах, направленных на получение тех же данных, поиск в кэше окажется успешным, это — так называемое «попадание кэша». Данные в ответ на запрос будут поступать из дискового буфера до тех пор, пока они не будут перезаписаны, что, при повторном обращении к тем же данным, приведёт к промаху кэша.

Процессорный кэш

Начнём наш разговор о кэшах с самого низкого уровня — с процессора. Кэш-память процессора — это очень быстрая память, которая играет роль буфера между процессором (CPU) и оперативной памятью (RAM). Кэш-память хранит данные и инструкции, к которым обращаются чаще всего, благодаря чему процессор может получать ко всему этому доступ практически мгновенно.

В процессорах имеется особая память, представленная регистрами процессора, которая обычно представляет собой небольшое хранилище информации, обеспечивающее крайне высокую скорость обмена данными. Регистры — это самая быстрая память, с которой может работать процессор, которая расположена максимально близко к остальным его механизмам и имеет небольшой объём. Иногда регистры называют кэшем нулевого уровня (L0 Cache, L — это сокращение от Layer).

У процессоров, кроме того, имеется доступ к ещё нескольким уровням кэш-памяти. Это — до четырёх уровней кэша, которые, соответственно, называются кэшами первого, второго, третьего, и четвёртого уровня (L0 — L4 Cache). То, к какому именно уровню относятся регистры процессора, в частности, будет ли это кэш нулевого или первого уровня, определяется архитектурой процессора и материнской платы.

Структура памяти в некоторых новейших CPU

Разрешение кэширования

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

Я уже не говорю о том, что это приводит к возрастанию нагрузки на ваш сервер! Если ваша страница или ее часть формируется запросами в БД, вы, к тому же, увеличиваете нагрузку на сервер БД, что крайне негативно может сказаться на производительности вашего сервера в целом.

Вы же понимаете, о чем я говорю, например, посмотрите на работу Одноклассники.ру! Некоторые веб-мастера еще и хвастаются, выводя этакую «статистику» внизу страницы: «Страница сформирована за 0.9 сек, выполнено 9 SQL запросов». Ничего, кроме абсолютно бестолковой архитектуры Веб-приложения, это не  показывает!

Так давайте же наоборот постараемся разгрузить сервер, и ускорить работу нашего пользователя! И кэш в этом деле — один из мощных инструментов! Ну скажите пожалуйста, как часто меняется ваша страница «О компании»? Или что случится, если пользователь увидит вашу новость («ура! Мы переехали на новый движок») ЧАСОМ ПОЗЖЕ? Так зачем же запрещать кэширование таких страниц

Попробуйте пересохранить наш тестовый файл с именем test-4.php и напишите в него следующие строчки:

С чего начать?

И так, мы поняли, что кэширование вам необходимо как воздух. Но как определить места которые в нем нуждаются, и которым он точно не нужен? Давайте рассмотрим, как пример, обычный новостной сайт. В большинстве случаев узким местом становится база данных, значит нам нужно кэшировать выборки. Какие у нас самые посещаемые страницы?

Сила cdn

Ускорить работу сайта также можно с помощью дополнительного к хостингу сервиса Content Delivery Network (Сеть доставки содержимого, CDN). CDN — это сеть серверов, которая позволяет доставлять веб-страницы и другой контент пользователям в зависимости от их географического расположения, источника веб-страницы и ближайшего к пользователю сервера доставки содержимого.

CDN — толковое решение для повышения скорости загрузки сайта. Поскольку веб-ресурсы передаются на сервер, расположенный близко к пользователю, CDN позволяет сэкономить бесценные миллисекунды за счет кэширования изображений, видео, загруженных файлов, JS, CSS, и даже HTML.

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

Итоги

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

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

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

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

Уважаемые читатели! Какие технологии кэширования вы используете в своих проектах?

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...

Оставьте комментарий

Adblock
detector