К основному контенту

Блочное кэширование в Codeigniter или Страничное кэширование с HMVC и MVC структурами

Практически каждый WEB разработчик стремится мгновенной готовности для отдачи страниц в браузер.

Но здесь необходимо выбрать два пути решения этой задачи:

1) Использование оперативной памяти

2) Использование дискового пространства

2й метод предназначен для сайтов с небольшой посещаемостью (100-2000 в день) которые находятся на шарэд хостингах

1й метод для сайтов с посещаемостью больше 10 тысяч хостов в день. Используется лишь тогда когда технические возможности не позволяют выгружать одновременно такое количество файлов. (memcached)

Золотой серединой является метод Static web page, используется файловая система и частично память.
Это не значит что страницы будут не динамическими, они могут все также обрабатываться на минимальном уровне, и при необходимости вновь генерироваться.

Блочное кэширование

Самое главное разобраться в теории. Для начала разобьем термин “блочное кэширование” на составляющие, а именно кэш и блоки, и ответим на вопросы:

- Что такое блок?

Блочное от слова блок как часть целого  объекта.

- Что такое кэш?

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

Итак, разобрав составляющие, мы подошли к основному вопросу: - что же такое блочное кэширование?
Блоки еще называют лэйаутами, виджетами, или областями на странице.

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

Предупрежу: в CodeIgniter кэш формируется из запроса к серверу, то есть на один запрос существует один файл кэша.

Формирование блока с MVC архитектурой происходит в последней строке вывода view(), на сегодняшний день в CodeIgniter нет этой функции, но ее можно при желании легко дописать.

Формирование блока с расширенной HMVC архитектурой в CodeIgniter может осуществляться прямо в контроллерах, так как контроллеры уже будут выполнять функции блоков.

Теоретические сведения о кэшировании (все в одном)

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

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

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

Алгоритм работы кэша с отложенной записью

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

  1. пытается найти в хеш-таблице заголовок буфера с заданным номером;
  2. в случае, если полученный буфер занят, ждёт его освобождения;
  3. в случае, если буфер не найден в хеш-таблице, берёт первый буфер из хвоста списка свободных;
  4. в случае, если список свободных буферов пуст, то выполняется алгоритм вытеснения (см. ниже);
  5. в случае, если полученный буфер помечен как «грязный», выполняет асинхронную запись содержимого буфера во внешнюю память.
  6. удаляет буфер из хеш-таблицы, если он был помещён в неё;
  7. помещает буфер в хеш-таблицу с новым номером.

Процесс читает данные в полученный буфер и освобождает его. В случае модификации процесс перед освобождением помечает буфер как «грязный». При освобождении буфер помещается в голову списка свободных буферов.

Таким образом:

  1. если процесс прочитал некоторый блок в буфер, то велика вероятность, что другой процесс при чтении этого блока найдёт буфер в оперативной памяти;
  2. запись данных во внешнюю память выполняется только тогда, когда не хватает «чистых» буферов, либо по запросу.


Кэширование с помощью Zend Cache в CodeIgniter

руководство

Для начала протестирую кэширование прямо в контроллере, хотя это и не очень то и корректно

без библиотеки страница грузится со скоростью загрузки 0,05 – 0,05
размер памяти 1,016,504 bytes

со стандартным кэшировании 0,0057

с библиотекой Zend в контроллере
скорость загрузки 0.0579
размер памяти 1,616,504 bytes

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

Теория Zend cache

В этой библиотеке используется механизм бэкэнда и фронд энда, это значит что ставятся некие функции:

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

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

Комментарии

Популярные сообщения из этого блога

Русская кодировка ASCII, ANSI и UTF-8, windows-1251 (CR, LF, CR LF)

Что нужно знать: Encoding – это кодировка для вывода данных (UTF-8, windows-1251) Line Endings – формат строк (CR, LF, CR LF) Byte Order Marker (BOM) – системная область в начале файла. LF – используется в UNIX вместе с кодировками UTF-8 или windows-1251 CR – используется в MAC системах. на сервере лучше использовать кодировку ANSI это и есть кириллица (Windows), символ занимает 1 байт (оптимизированный ASCII) UTF-8 может содержать заголовок BOM который содержит системную информацию, символ занимает 2 байта wysiwyg редакторы добавляют метатег в html страницы с кодировкой кирилицы. это не очень хорошо, если сервер настроен на UTF-8, в этой кодировке корректно работают некоторые библиотеки приложения и прочие

Как узнать время включения/выключения компьютера.

Способов масса, одни из них: в журнале событий windows  выбрать eventlog, теперь в таблице легко найти события с кодами: 6005 - событие остановки eventlog - компьютер выключился 6006 - событие запуска eventlog - компьютер включился обычно эта служба запускается и остонавли во время включения/выключения компьютера, и пишет в журнале событий системы код события и время.

Извлечение, редактирование и публикация файлов в SharePoint

Теги: Sharepoint в sharepoint designer на ленте за извлечение / редактирование или отмену извлечений отвечают кнопки  в браузере это выглядит по другому   файл извлечен и пока редактируется пользователем   страница с индивидуальным дизайном возврат страницы с индивидуальным дизайном к определению узла (к первоначальному виду не изменяя веб-части) Возврат извлеченной страницы с отменой всех внесенных изменений Изначально извлечение было создано для исключения конфликтов при редактировании файлов. Например если один пользователь открыл документ и редактирует, то второй не сможет открыть пока первый не вернет документ на место. Простыми словами извлечение значит, что пользователь забирает документ для редактирования. И возвращает после окончания редактирования. Само редактирование может выполняться и без подключения к сети, документ хранится в черновиках моих документов. В официальной документации сказано: Извлечение файлов позволяет избежать ситуации, когда несколь