два небольших рецепта

Обсуждение документации. Переводы Cookbook и авторские рецепты.
Ответить
astronin
Сообщения: 606
Зарегистрирован: 2012.01.30, 17:46

два небольших рецепта

Сообщение astronin »

1. Использование master/slave в моделях CActiveRecord.

Добавляем новый компонент подключения в конфиге:

Код: Выделить всё

'components' => array(
    ....
    'db_slave' => array(
            ...
    ),
),
 
Создаем базовую модель и пишем:

Код: Выделить всё

class CommonModel extends CActiveRecord {

    public function setDbConnection($name){
        parent::$db = Yii::app()->getComponent($name);
    }

    protected function beforeDelete() {
        $this->setDbConnection('db');
        return parent::beforeDelete();
    }

    protected function beforeSave() {
        $this->setDbConnection('db');
        return parent::beforeSave();
    }

    protected function beforeFind() {
        $this->setDbConnection('db_slave');
        parent::beforeFind();
    }
 
2. Чисто визуальное ускорение работы сайта

Все что не участвует в отображении информации на открываемой странице можно перенести после

Код: Выделить всё

$this->render('page'); 
К примеру учет каких-то служебных данных или статистик. Пользователь получит свою страницу, а скрипт дальше доработает свои задачи.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: два небольших рецепта

Сообщение samdark »

У №2 можно добавить своевременное ручное закрытие сессии. Так, если она на файлах, не будет изличшней блокировки.

Может всё это сюда закинете? https://github.com/samdark/yiiframework_ru_cookbook
astronin
Сообщения: 606
Зарегистрирован: 2012.01.30, 17:46

Re: два небольших рецепта

Сообщение astronin »

Закину, но там кажись доступ нужен(ssh ключ), а как файлы добавлять с сайта github я не нашел(может и нету его там...)


На счет второго рецепта оказалось все очень запутанно...
Оказывается после $this->render('page'); инфа не уходит в браузер. Тестировал с помощью sleep(5);
Посмотрел по фреймворку. Инфа уходит только после $this->onEndRequest(new CEvent($this)); в CApplication.php
Поставил в котроллере после render():

Код: Выделить всё

Yii::app()->end(0, false);
sleep(5); 
Все равно не помогает... Нужна помощь, может кто лучше знает как во фрейморке обрабатывается вывод, а главное где.
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: два небольших рецепта

Сообщение lancecoder »

то что вы хотели показать в п.2 осуществляется через очереди
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: два небольших рецепта

Сообщение samdark »

Не всегда очередь в этом случае оправдана.
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: два небольших рецепта

Сообщение lancecoder »

я вообще не вижу смысла откладывать такие действия на после рендеринга, ну если уж надо то я за очереди
Ответить