Кешування

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

Використання кешу в Yii — це, головним чином, конфігурування та виклик компонента кешу. Нижче показана конфігурація, яка визначає компонент кешу, який використовує memcache з двома кеш-серверами.

array('components'=>array('cache'=>array(
            'class'=>'system.caching.CMemCache',
            'servers'=>array(
                array('host'=>'server1', 'port'=>11211, 'weight'=>60),
                array('host'=>'server2', 'port'=>11211, 'weight'=>40),
            ),
        ),
    ),
);

Під час роботи додатка звернутися до компоненту, який відповідає за кешування, можна так: Yii::app()->cache.

Yii забезпечує різні кеш-компоненти, кешуючи дані в різних сховищах. Наприклад, компонент CMemCache інкапсулює доповнення memcache для PHP і використовує памʼять як сховище кешу; компонент CApcCache інкапсулює доповнення APC для PHP, і компонент CDbCache зберігає кешовані дані в базі даних. Далі наведено перелік доступних компонентів кешування:

Підказка: Всі ці компоненти кешування успадковуються від базового класу CCache, тому можна переключатися між різними типами кешування без зміни коду, який використовує кеш.

Кешування може використовуватися на різних рівнях. На нижчому рівні ми використовуємо кешування для зберігання «атомарних» (одиночних) шматків даних, таких як змінні, і називаємо це кешуванням даних. На наступному рівні, ми зберігаємо в кеші фрагменти сторінки, які генеруються частиною скрипта представлення. І на вищому рівні ми зберігаємо в кеші цілу сторінку і отримуємо її з кеша при необхідності.

У наступних декількох підрозділах ми детально розберемо, як використовувати кешування на цих рівнях.

Примітка: За визначенням, кеш - енергозалежне середовище. Тому немає гарантій збереження кешованих даних, навіть якщо вони не старіють. Тому не використовуйте кеш як постійне сховище даних (наприклад, не використовуйте кеш для зберігання даних сесій).