Практически каждый WEB разработчик стремится мгновенной готовности для отдачи страниц в браузер.
Но здесь необходимо выбрать два пути решения этой задачи:
1) Использование оперативной памяти
2) Использование дискового пространства
2й метод предназначен для сайтов с небольшой посещаемостью (100-2000 в день) которые находятся на шарэд хостингах
1й метод для сайтов с посещаемостью больше 10 тысяч хостов в день. Используется лишь тогда когда технические возможности не позволяют выгружать одновременно такое количество файлов. (memcached)
Золотой серединой является метод Static web page, используется файловая система и частично память.
Это не значит что страницы будут не динамическими, они могут все также обрабатываться на минимальном уровне, и при необходимости вновь генерироваться.
Блочное кэширование
Самое главное разобраться в теории. Для начала разобьем термин “блочное кэширование” на составляющие, а именно кэш и блоки, и ответим на вопросы:
- Что такое блок?
Блочное от слова блок как часть целого объекта.
- Что такое кэш?
Кэш – это область системы с быстрым доступом к данным, которая не обращается к функциям несущим нагрузку. В CodeIgniter кэш как и должен по определению выводится до загрузки контроллера моделей и выводов. Этот процесс управляется роутером, который перенаправляет запрос в класс кэша, который в свою очередь выводит данные.
Итак, разобрав составляющие, мы подошли к основному вопросу: - что же такое блочное кэширование?
Блоки еще называют лэйаутами, виджетами, или областями на странице.
Это тоже кэширование страниц, которое в свою очередь разбивается на блочное кэширование и в кэш ложится каждый блок отдельно.
В коде блоки с MVC структурой формируются контроллерами моделями и функциями вывода,
блоки с HMVC структурой формируются модулями контроллерами моделями и функциями вывода.
Предупрежу: в CodeIgniter кэш формируется из запроса к серверу, то есть на один запрос существует один файл кэша.
Формирование блока с MVC архитектурой происходит в последней строке вывода view(), на сегодняшний день в CodeIgniter нет этой функции, но ее можно при желании легко дописать.
Формирование блока с расширенной HMVC архитектурой в CodeIgniter может осуществляться прямо в контроллерах, так как контроллеры уже будут выполнять функции блоков.
Теоретические сведения о кэшировании (все в одном)
Ассоциативность кэша – это так сказать не последовательный доступ, перебирая каждый элемент до цели. А прямой. Суть в том что запись в кэш осуществляется случайным образом, или в большинстве случаев не ассоциативным, а чтение с указанием пути.
В базе данных ассоциативность выборки осуществляется с помощью индекса. к примеру если индекса не было бы, то выборка из миллиона записей выполнялась бы намного дольше.
Пример из операционной системы, кэш состоит из следующих элементов:
используются хэш таблицы которые содержат в себе заголовки обращенные в MD5( )
используются страницы соответствующие определенному блоку на внешних дисках
набор заголовков буферов описывающие состояния соответствующего буфера
списки свободных буферов
Алгоритм работы кэша с отложенной записью
Изначально все заголовки буферов помещаются в список свободных буферов. Если процесс намеревается прочитать или модифицировать блок, то он выполняет следующий алгоритм:
- пытается найти в хеш-таблице заголовок буфера с заданным номером;
- в случае, если полученный буфер занят, ждёт его освобождения;
- в случае, если буфер не найден в хеш-таблице, берёт первый буфер из хвоста списка свободных;
- в случае, если список свободных буферов пуст, то выполняется алгоритм вытеснения (см. ниже);
- в случае, если полученный буфер помечен как «грязный», выполняет асинхронную запись содержимого буфера во внешнюю память.
- удаляет буфер из хеш-таблицы, если он был помещён в неё;
- помещает буфер в хеш-таблицу с новым номером.
Процесс читает данные в полученный буфер и освобождает его. В случае модификации процесс перед освобождением помечает буфер как «грязный». При освобождении буфер помещается в голову списка свободных буферов.
Таким образом:
- если процесс прочитал некоторый блок в буфер, то велика вероятность, что другой процесс при чтении этого блока найдёт буфер в оперативной памяти;
- запись данных во внешнюю память выполняется только тогда, когда не хватает «чистых» буферов, либо по запросу.
Кэширование с помощью Zend Cache в CodeIgniter
Для начала протестирую кэширование прямо в контроллере, хотя это и не очень то и корректно
без библиотеки страница грузится со скоростью загрузки 0,05 – 0,05
размер памяти 1,016,504 bytes
со стандартным кэшировании 0,0057
скорость загрузки 0.0579
размер памяти 1,616,504 bytes
Таким образом зенд кэширование в контроллере не актуален со страницами которые не загромождены блоками, время загрузки классов которых не превышает времени загрузки и обработки зенд библиотеки.
Теория Zend cache
В этой библиотеке используется механизм бэкэнда и фронд энда, это значит что ставятся некие функции:
start() и end(), между которыми находится все то что должно кэшироваться и обходиться. при следующем запуске весь код будет пропущен, и будет выполняться только фронтэнд start().
обычно считают что в бэкэнде записываются данные в кэш, а во фронтэнде контроллируется вывод кэша, либо выводит либо запускает функции между фрондэндом и бэкэндом.
Комментарии
Отправить комментарий