Онлайн-руководство разработчика NetCat
Новогодние скидки до 25%!
Подробнее
Модуль «Поиск по сайту» 12.2.1Начало работы с модулем 12.2.2Язык запросов 12.2.3Способы хранения индекса 12.2.4Интерфейс модуля в панели управления сайтом 12.2.5Области индексирования 12.2.6Области HTML-страниц 12.2.7Области поиска на сайте 12.2.8Индексирование по расписанию, запуск индексирования в фоновом режиме 12.2.9Правила индексирования 12.2.10Постановка задачи переиндексирования в очередь 12.2.11Интеграция модуля в макеты дизайна сайта 12.2.12Простая форма поиска 12.2.13Расширенная форма поиска 12.2.14Вывод результатов поиска 12.2.15Стилизация списка подсказок 12.2.16Расширенные настройки 12.2.17Разработка расширений модуля 12.2.18Обзор архитектуры модуля 12.2.19Обработчики документов различных типов 12.2.20Текстовые фильтры 12.2.21Анализаторы текста 12.2.22Корректировщики запросов 12.2.23Подключение других поисковых систем 12.2.24Решение проблем с поиском 12.2.25Решение проблем с индексированием 12.2.26Справочник API

Модуль «Кэширование»

Предисловие

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

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

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

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

Примеры из жизни

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

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

Принцип работы кэша

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

Файлы кэша расположены в папках на сервере, связанных с определёнными сущностями (сайт, раздел и компонент в разделе). Имя файла строится на основе адреса запрашиваемой страницы. Стоит иметь ввиду, что страница с адресом /news/news_5.html и страница /news/news_5.html?curPos=2 для системы — два разных набора данных для кэширования, которые будут храниться в разных файлах, но в одной папке на сервере.

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

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

Тем не менее, очень часто нет необходимости кэшировать все данные на сайте. Например, нельзя кэшировать закрытые данные из профайла пользователя, иначе они станут доступны другим посетителям сайта. В предлагаемом модуле кэширования есть решение для данной задачи — блоки "nocache". О них будет сказано чуть позже.

Рассмотрим теперь непосредственно использование кэширования в рамках системы NetСat.

Далее в разделе

Описание проекта