Швидке створення web-сайтів за допомогою cakephp, частина 5 додавання кешування

Слідкуйте за виходом нових статей цієї серії.

Цей контент є частиною серії: Швидке створення Web-сайтів за допомогою CakePHP, Частина 5

Слідкуйте за виходом нових статей цієї серії.

Дана серія посібників призначена для тих розробників додатків на PHP, хто хоче почати використовувати CakePHP, щоб полегшити собі життя. Прочитавши до кінця, ви навчитеся встановлювати і налаштовувати конфігурацію CakePHP, вивчіть основи проектування Модель-Представлення-Контролер (MVC), дізнаєтеся, як проводити валідацію призначених для користувача даних в CakePHP, як застосовувати помічників CakePHP, і як, використовуючи CakePHP, можна швидко написати і запустити додаток. Може здатися, що потрібно вивчити дуже багато, але не переживайте - більшу частину CakePHP зробить за вас.

Передбачається, що ви вже прочитали першу. другу. третю. і четверту частини даної серії, і у вас є робоче середовище, яка була встановлена ​​для виконання прикладів. Якщо у вас не встановлено CakePHP, то перш ніж йти далі, необхідно звернутися до першої та другої частин даної серії.

Передбачається, що ви знаєте мову програмування PHP, володієте фундаментальним розумінням проектування баз даних, і не боїтеся забруднити рук.

Системні вимоги

Для того щоб почати роботу, у вас повинна бути середовище, в якому можна працювати. CakePHP ставить мінімальні розумні вимоги до сервера:

  1. Сервер HTTP з підтримкою сесій (і бажано mod_rewrite). Даний посібник було написано при використанні Apache V1.3 з mod_rewrite.
  2. PHP версії 4.3.2 або вище (включаючи PHP версії 5). Даний посібник створювалося на основі PHP версії 5.0.4
  3. Підтримуване ядро ​​бази даних (на сьогоднішній день - MySQL, PostgreSQL або використовуючи надбудову над ADODB). Керівництво було написано при використанні MySQL V4.1.15.

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

Найпростіший спосіб отримати CakePHP - це зайти на сайт CakeForge.org і завантажити найостаннішу стабільну версію. Даний посібник створювалося на основі версії 1.1.8. (Повні збірки і копії Subversion також доступні для завантаження. Докладний опис наведений в Довіднику по CakePHP - см. Ресурси).

В кінці четвертої частини. вам було задано вдосконалити Tor. Впоралися?

Додавання уявлення і функції Favorites

Лістинг 1. Додавання функції favorites в контролер users

Також необхідно додати файл favorites.html в директорію app / views / users /, який може виглядати так, як показано в лістингу 2.

Лістинг 2. Favorites.html

Додавання посилання Remove From Favorites (видалити зі списку обраних)

Отже, ваше завдання полягало в додаванні посилання Remove From Favorites (видалити зі списку обраних) в таблицю products, налаштувавши її таким чином, щоб користувач бачив посилання Remove (видалити), якщо товар присутній в його списку favorites (Вибране), і посилання Add (додати ), якщо цього товару немає в списку favorites (Вибране) користувача. Давайте подивимося на таблицю products ще раз, так як це дуже важливо.

Лістинг 3. Таблиця Рroducts

Також в контролері products повинна бути функція removeFromFavorites.

Лістинг 5. Функція removeFromFavorites

Аналогічно, необхідно створити метод removeFavorite в контролері users.

Лістинг 6. Створення методу removeFavorite

кешування

За своєю суттю, кешування іноді може бути дуже складним. Існують різні типи кешування, і у кожного є свої переваги і недоліки. Вкрай важливо розуміти, що мається на увазі під словом "кешування" в даному випадку.

поняття кешування

Ще один приклад кешування - запит браузером контенту у додатки. Якщо Web-додаток застосовує кешування, то воно може відповісти на запит попередньо створеної копією контента, що знижує зайві витрати ресурсів на вторинне створення контенту. Даний тип кешування і буде описаний в цьому додатку.

Навіщо кешувати?

Як правило, в додатку кешування використовується з двох причин. Перша - воно допомагає знизити споживання ресурсів на сервері. Хоча в більшості випадків ця економія мінімальна, але для часто відвіданих сайтів, які обслуговують велику кількість запитів, ці невеликі економії в сумі зводяться до значного збільшення продуктивності. Друга причина - швидкість. Так як з додатком не доводиться проходити через процес повторного створення контенту для запиту, то контент може бути надано набагато швидше. Знову ж таки, в більшості випадків, економія мінімальна, але використання кешування дозволяє часто переглядається сайтам отримувати приріст в швидкості.

Як кешувати?

Отже, вас умовили. Тепер ви готові до того, щоб кешувати все і завжди. Як це зробити? Як CakePHP може спростити це завдання?

Для початку, необхідно включити кешування. За замовчуванням воно відключено. Включити його можна в app / config / core.php - знайдіть запис: define ( 'CACHE_CHECK', false); і змініть її на define ( 'CACHE_CHECK', true); .

Ставлячи значення true (істина), ви, тим самим, вказуєте CakePHP, що кешування включено. Давайте підемо далі, так як налаштувати кешування можна пізніше. Ми ще не закінчили: необхідно вказати CakePHP, що конкретно необхідно кешувати і на який проміжок часу.

Що кешувати?

Включивши кешування, необхідно вказати, що потрібно кешувати. Це можна реалізувати в контролері для уявлень, які необхідно кешувати, додавши кешування в масив helpers. Наприклад, якщо необхідно кешувати подання products, то в масиві helpers контролера products має бути присутнім кешування. Коли ви створювали контролер products в Tor, то вказали, що використовуються helpers (помощніікі) форм і HTML. При додаванні кешування в цей список масив helpers буде виглядати наступним чином: var $ helpers = array ( 'Html', 'Form', 'Cache'); .

Тепер, коли використовується помічник кешування, необхідно вказати, що конкретно слід кешувати. Це можна виконати різними способами, однак всі вони залежать від масиву $ cacheAction.

Кешування конкретного запиту

Лістинг 7. $ cacheAction

Кешування цілої функції

Можливо, простого кешування декількох товарів буде недостатньо і з'явиться бажання кешувати все уявлення певної функції. Припустимо, що необхідно кешувати подання функції редагування (edit). Для цього, слід визначити функцію як ключ масиву і вказати проміжок часу, протягом якого уявлення повинні зберігатися в кеші, практично так само, як ви робили це раніше.

Можна навіть змішати і узгодити.

Лістинг 8. Змішування та узгодження

Кешування всіх функцій контролера

Можливо, необхідно кешувати все, що робить контролер. В цьому випадку, немає ніякої необхідності описувати кожну функцію в масиві $ cacheAction. Можна просто в якості значення $ cacheAction задати проміжок часу зберігання кешованої інформації: var $ cacheAction = "+1 hour"; .

Значним повинна бути рядок, яку може інтерпретувати strtotime (). Якщо задати $ cacheAction тільки одне значення, то це вкаже CakePHP, що потрібно кешувати все уявлення контролера.

Кешування з функції

Так як $ cacheAction є змінною класу, то можна звертатися до змінної безпосередньо з функції. Припустимо, що необхідно змінити $ cacheAction з функції. В цьому випадку, буде той же самий синтаксис, який використовується для зміни будь-якої змінної класу.

Як правило, в цьому немає ніякої необхідності, але може виникнути ситуація, коли знадобиться і таке кешування. Якщо ви зіткнетеся з такою ситуацією, то тепер знаєте, як це можна зробити. У CakePHP є різні способи кешування уявлень. Це легко. Більш складним завданням, є визначення коли потрібно, а точніше, коли не потрібно кешувати.

Коли використовувати кешування?

Можливо, у вас з'явилося відчуття, що кешування - це саме чудове винахід людства. Більш того, дуже часто так і є. Однак виникає питання, в якому випадку не слід кешувати уявлення?

Найчастіше, не слід кешувати дані, які постійно змінюються. Наприклад, припустимо, що користувачі Tor додають товари кілька разів на хвилин. В цьому випадку, кешування уявлення index може стати на заваді. Якщо контент змінюється так часто, що кешована сторінка ніколи не використовується, то виходить, що ви просто збільшили витрати ресурсів на зберігання кешованої сторінки і перевірку при кожному запиті, чи не була вона змінена.

Однак це зовсім не означає, що кешування не потрібно використовувати взагалі. Просто необхідно уточнити CakePHP що слід кешувати.

Використання розмітки в поданні

У поданні або макеті, CakePHP дозволяє виключити деякий контент з кешування, якщо укласти його в теги . Коректне використання цієї розмітки дозволить CakePHP кешувати статичні частині подання або макета, і гарантувати, що динамічні складові сторінки зчитуються при кожному запиті.

Чи не всю інформацію можна укладати в теги . А саме, не можна просто укласти змінні в теги для того, щоб зробити їх динамічними. По суті кажучи, в теги можна укладати конструкції CakePHP, наприклад, помічників і виклики елементів.

Наприклад, в Tor. яка буде використовуватися під макет, створений в четвертій частині повинен виглядати приблизно так:

Лістинг 9. Макет, яка буде використовуватися під

Якщо кешування включено, то при першому завантаженні будь-якої сторінки, яка використовує макет за замовчуванням, Welcome