От автора: в OpenCart кэширование — важный фактор, ведь вы имеете дело с веб-разработкой. Оно действительно помогает разгрузить тяжелый подъем, который должен выполнять веб-сервер, чтобы обслуживать тысячи, если не миллионы запросов одновременно. В настоящее время есть множество доступных возможностей, которые обеспечивают повышение производительности вашего веб-приложения, но основная концепция кэширования остается прежней.
Цель кэширования
Прошли те времена, когда нужно было просто создать статический HTML-сайт, содержащий пару страниц, и все было готово. В этом случае не нужно было беспокоиться о параллельных запросах и интенсивном трафике, создаваемом на веб-сайте, так как гораздо быстрее отправлять эти статические HTML-страницы, чем динамические веб-страницы, которые занимают довольно много серверных ресурсов для сборки самих себя.
Типичная динамическая страница делает много, начиная с запроса базы данных и получения данных от сторонних поставщиков услуг. Это требует многого для отображения страницы, которая содержит большое количество информации в разных форматах. В частности, нельзя запросить базу данных для получения одной и той же сложной информации для каждого запроса по мере увеличения трафика. Скоро серверы будут тесно связаны с ресурсами, и прежде чем вы сможете что-то сделать, они исчезнут!
Таким образом, нам нужно что-то среднее, что ускоряет работу, и именно здесь даёт о себе знать кэширование. Идея кэширования очень проста — где-то сохраняются вычисленные / отформатированные результаты и извлекаются, когда это необходимо. Это «где-то» может быть где угодно: файловая система, память или база данных.
Кроме того, имеется множество опций для кеширования — Memcached, Redis, Varnish и другие. Их можно использовать в соответствии с личными требованиями, а иногда сочетание нескольких компонентов помогает повысить производительность экспоненциально.
Поскольку для объяснения входов и выходов кэширования потребуется полная серия, а также что-то вне рамок этой статьи, мы вернемся к контексту OpenCart и продолжим его в следующем разделе.
Будет использоваться последняя версия OpenCart, поэтому убедитесь, что она установлена.
Как работает базовое кэширование в OpenCart
Библиотека кэширования предоставляется в ядре, поэтому давайте сразу исследуем ее. Идите и откройте system/library/cache.php файл в своем любимом текстовом редакторе.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?php class Cache { private $cache; public function __construct($driver, $expire = 3600) { $class = 'Cache\\' . $driver; if (class_exists($class)) { $this->cache = new $class($expire); } else { exit('Error: Could not load cache driver ' . $driver . ' cache!'); } } public function get($key) { return $this->cache->get($key); } public function set($key, $value) { return $this->cache->set($key, $value); } public function delete($key) { return $this->cache->delete($key); } } |
Начнём с конструктора, он инициализирует драйвер кэша, переданный в аргументе конструктора. Если класс доступен для запрошенного адаптера кэширования, он будет инициализирован этим $this->cache свойством, иначе он выйдет с сообщением об ошибке. В следующем разделе мы увидим различные кэширующие адаптеры.
Кроме того, существует три функции-обертки, которые используются для выполнения всех операций, связанных с кэшированием.
get метод используется для извлечения значения из кэша.
1 |
$this->cache->get($key); |
set метод используется для хранения значения в кэше.
1 |
$this->cache->set($key, $value); |
delete метод используется для удаления отображения ключа / значения из кэша.
1 |
$this->cache->delete($key); |
Поэтому очень просто использовать функции кэширования в модулях.
Во front-end есть много мест, где данные извлекаются из хранилища кэшей. Перечислим некоторые из них:
latest products (новейшие продукты)
bestseller products (популярные продукты)
list of manufacturers (список производителей)
list of countries (список стран)
list of currencies (список валют)
list of zones ( список зон)
store settings (настройки магазина)
В случае кэширования файлов вы сможете найти все файлы кэша, хранящиеся в system/cache каталоге. И хотя OpenCart очищает кэш при определённых событиях, вы также можете очистить эти файлы вручную, чтобы получить последние данные.
Это то, что касается кэширующей обертки. В следующем разделе мы увидим различные адаптеры кэширования, доступные в ядре, и фактический тяжелый подъем, который они выполняют.
Кэширующие адаптеры
Доступно три адаптера кэширования в ядре: OpenCart-file, memcache и apc . Кэширующий адаптер по умолчанию, используемый в OpenCart – это файл.
Вот index.php фрагмент, из которого инициализируется $cache объект с помощью адаптера кэширования по умолчанию.
1 2 3 |
// Cache $cache = new Cache('file'); $registry->set('cache', $cache); |
К сожалению, нет настраиваемого способа, позволяющего переключать адаптер кэширования, поскольку он жестко закодирован. Можно использовать OCMOD для изменения адаптера кэширования по умолчанию без изменения основного файла.
Поскольку реализация каждого кэширующего адаптера почти одинакова, мы рассмотрим только один из адаптеров кэширования, чтобы узнать, что происходит. Давайте возьмем memcache, например. Откройте system/library/cache/mem.php. В том же каталоге можно изучить два других адаптера file.php и apc.php.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php namespace Cache; class Mem { private $expire; private $cache; public function __construct($expire) { $this->expire = $expire; $this->cache = new \Memcache(); $this->cache->pconnect(CACHE_HOSTNAME, CACHE_PORT); } public function get($key) { return $this->cache->get(CACHE_PREFIX . $key); } public function set($key,$value) { return $this->cache->set(CACHE_PREFIX . $key, $value, MEMCACHE_COMPRESSED, $this->expire); } public function delete($key) { $this->cache->delete(CACHE_PREFIX . $key); } } |
Каждый адаптер кэширования», чтобы избежать конфликтов, определяется в пространстве имен как «Cache».
Те методы, которые мы обсуждали в последнем разделе, заканчиваются здесь. Поэтому, когда вы вызываете get метод в Cache классе, он по сути вызывает get метод, определенный в фактическом классе адаптера, — в нашем случае это Mem класс.
Логика управления записями кэша происходит в методах класса адаптера. Как можно увидеть, в конструкторе Mem класса мы инициализировали объект Memcache и установили соединение с помощью pconnect метода. Наконец, мы используем методы get, set и delete объекта Memcache для управления записями кэша.
С другой стороны, если вы посмотрите на реализацию обработчика кэша файлов, потребуется немного усилий для хранения и извлечения записей кэша с использованием функций файловой системы. Кроме того, нет никакой разницы в реализации.
Это то, что касается кэширующих адаптеров в OpenCart. Конечно, вы можете пойти вперед и сделать свой собственный обработчик кэширования, если это необходимо. Вам просто нужно реализовать необходимые методы, и все готово.
Вот и все. Я надеюсь, что вам понравился учебник, и он будет помогать вам использовать кэширование в ваших настраиваемых модулях по мере необходимости.
Заключение
Сегодня мы обсудили кэширование в OpenCart. Мы начали с основ, и по мере того, как мы продвигались, мы исследовали, как кэширование используется во front-end. Наконец, мы прошли через различные кэширующие адаптеры, доступные в OpenCart.
Автор: Sajal Soni
Источник: //code.tutsplus.com/
Редакция: Команда webformyself.