More Related Content Similar to CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить с психологом? (блиц-доклад) Similar to CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить с психологом? (блиц-доклад) (20) CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить с психологом? (блиц-доклад)2. Общий подход
Class/Widget
Class/Widget
Class/Widget
Class/Widget
Class/Widget
Class/Widget
Class/Widget
4. Компоненты фреймворков
class DemoView extends View {
public function data($userId, $itemId) {
//check cache
if (!$result = Cache::get(‘demo_’ . $userId . ‘_’ . $itemId)) {
//retrieve heavy data
$data = Model::getHeavyData($userId, $itemId);
$result = $this->render($data);
//save cache
Cache::set(‘demo_’ . $userId . ‘_’ . $itemId, $result);
}
}
}
5. Компоненты фреймворков
class DemoView extends View {
public function data($userId, $itemId) {
//check cache
if (!$result = Cache::get(‘demo_’ . $userId . ‘_’ . $itemId)) {
//retrieve heavy data
$data = Model::getHeavyData($userId, $itemId);
$result = $this->render($data);
//save cache
Cache::set(‘demo_’ . $userId . ‘_’ . $itemId, $result);
}
}
}
6. Компоненты фреймворков
class DemoView extends View { Основная логика под “if”
public function data($userId, $itemId) {
//check cache
if (!$result = Cache::get(‘demo_’ . $userId . ‘_’ . $itemId)) {
//retrieve heavy data
$data = Model::getHeavyData($userId, $itemId);
$result = $this->render($data);
//save cache
Cache::set(‘demo_’ . $userId . ‘_’ . $itemId, $result);
}
}
}
8. Интеграция кеширования
class DemoView extends View {
protected function data($userId, $itemId) {
$this->data->userId = $userId;
$this->data->itemId = $itemId;
$this->data->heavy = Model::getHeavyData($userId, $itemId);
}
}
9. Интеграция кеширования
class DemoView extends View {
protected function data($userId, $itemId) {
$this->data->userId = $userId;
$this->data->itemId = $itemId;
$this->data->heavy = Model::getHeavyData($userId, $itemId);
}
}
10. Интеграция кеширования
class DemoView extends View {
//set light view data
protected function dynamic($userId, $itemId) {
$this->data->userId = $userId;
$this->data->itemId = $itemId;
}
//define which light data to use for key
public function getKey() {
return array($this->data->userId, $this->data->itemId);
}
// if cache did not work set heavy data
protected function cached () {
$this->data->heavy = Model::getHeavyData($userId, $itemId);
}
}
11. Интеграция кеширования
т разработчика теперь требуется только
Application разделить данные на формирующие
ключ и те, что можно кешировать в
шаблоне. Все.
?php $demo->render(); ?>
Cache component
еализован ли внутри кеш? Не имеет
значения.
16. Инвалидация кеша
search[title] search[name]
search[status]
search[price]
pagesort_field search[date]
sort_order search[seller]
user_id