сравнение скорости CI и Yii

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

сравнение скорости CI и Yii

Сообщение kosenka »

Не хочу никаких холи-варс, но мне просто интересно, а кто-нибудь сравнивал по скорости CI и Yii (не на простом 'Hello word', а на реальном проекте) ?
Сейчас решил сравнить свой тестовый проект (сранивал только индексную(первую) страницу):

Время генерации:
CI: 0.0212;
Yii: 0.03768
Yiilite: 0.01622

Использовано памяти:
CI: 3.79 MB;
Yii: 4.8 MB
Yiilite: 5.16 MB

В качестве рендера шаблонов:
CI использовал Quicky (http://code.google.com/p/quicky/)
Yii рендер по умолчанию

Я понимаю, что Yii: Yes, it is Yii -- a high-performance component-based PHP framework best for developing large-scale Web applications, но как-то меня расстраивает "время генерации" и "память".

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

Re: сравнение скорости CI и Yii

Сообщение samdark »

Идентичен ли код (хотя-бы по смыслу и возможностям)?
Используется ли APC/Xcache/eAccelerator?
Используется ли Active Record в Yii?
Включено ли кеширование метаданных?
Отключен ли отладочный режим?
Использовано памяти:
CI: 3.79 MB;
Yii: 4.8 MB
Yiilite: 5.16 MB
То, что Yiilite использует больше вполне логично. Ну и то, что Yii больше CI тоже: больше кода, нормальный Active Record.
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

Re: сравнение скорости CI и Yii

Сообщение kosenka »

Sam Dark писал(а): Идентичен ли код (хотя-бы по смыслу и возможностям)?
Да.
Sam Dark писал(а): Используется ли APC/Xcache/eAccelerator?
А как это проверить? Вот phpinfo сервера, где лежат оба проекта: http://hermes.timeweb.ru/phpinfo.php
Sam Dark писал(а): Используется ли Active Record в Yii?
Нет.
В CI использую dbsimple (http://dklab.ru/lib/DbSimple/)
Я не знаю, важно ли это или нет, но я кеширую данные в проекте который на yii.
Sam Dark писал(а): Включено ли кеширование метаданных?
В Yii - да.
Sam Dark писал(а): Отключен ли отладочный режим?
В Yii - да.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: сравнение скорости CI и Yii

Сообщение samdark »

Попробовать APC / eAccelerator определённо стоит.
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

Re: сравнение скорости CI и Yii

Сообщение kosenka »

Sam Dark писал(а):Попробовать APC / eAccelerator определённо стоит.
Боюсь, что не дадут поставить APC на виртуальный хостинг.
Да и если, предположим, я отдам проект заказчику, то у меня не будет 100% уверенности, что у заказчика на его хостинге будет стоять APC...

Вообщем кругом одна засада и я в печали... что же выбрать для проекта...
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: сравнение скорости CI и Yii

Сообщение Ekstazi »

Имхо, если грамотно кэшировать, то на любом хостинге "летать" (не слетать и не лететь, а летать) будет.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: сравнение скорости CI и Yii

Сообщение samdark »

± 0.01 сек. и ± 1 Мб памяти — это совершенно не важно. Сравните, сколько у вас страница генерируется и сколько передаётся получателю.
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: сравнение скорости CI и Yii

Сообщение Ekstazi »

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

Re: сравнение скорости CI и Yii

Сообщение samdark »

Именно. К самому фреймворку это отношения не имеет.
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

Re: сравнение скорости CI и Yii

Сообщение kosenka »

Sam Dark писал(а): ± 0.01 сек. и ± 1 Мб памяти — это совершенно не важно.
Согласен, но хочется добиться некой перфекции :)

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

Re: сравнение скорости CI и Yii

Сообщение samdark »

Могу в этом помочь. Как раз есть вечер относительно свободный.
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

Re: сравнение скорости CI и Yii

Сообщение kosenka »

Sam Dark писал(а):Могу в этом помочь. Как раз есть вечер относительно свободный.
Давай попробуем :)

За основу взял CSmartyViewRenderer (http://www.tecnoretales.com/programacio ... framework/)

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

<?php
/**
 * CQuickyViewRenderer implements a view renderer that allows users to use a template syntax similar to SMARTY templates.
 *
 * To use CQuickyViewRenderer
 * <pre>
 * array(
 *     'components'=>array(
 *         ::
 *         'viewRenderer'=>array(
 *             'class'=>'CQuickyViewRenderer',
 *         ),
 *     ),
 * )
 * </pre>
 */

//class CQuickyViewRenderer extends CApplicationComponent implements IViewRenderer
class CQuickyViewRenderer extends CViewRenderer
{
    private $_input;
    private $_output;
    private $_sourceFile;
    private $_quicky;

    function __construct()
    {
        Yii::import('application.vendors.*');
        require_once "Quicky/Quicky.class.php";
        
        $this->_quicky = new Quicky();
    $this->_quicky->force_compile = Yii::app()->params['smarty_force_compile'];
    $this->_quicky->compile_check = Yii::app()->params['smarty_compile_check'];

    $this->_quicky->template_dir = ''; //Yii::app()->basePath;
    $this->_quicky->compile_dir  = Yii::app()->basePath.DIRECTORY_SEPARATOR.'runtime'.DIRECTORY_SEPARATOR.'views'.DIRECTORY_SEPARATOR;

    $this->_quicky->assign("TIME",sprintf('%0.5f',Yii::getLogger()->getExecutionTime()));
    $this->_quicky->assign("MEMORY",round(Yii::getLogger()->getMemoryUsage()/(1024*1024),2)." MB");
    }

    /**
     * Parses the source view file and saves the results as another file.
     * This method is required by the parent class.
     * @param string the source view file path
     * @param string the resulting view file path
     */
    protected function generateViewFile($sourceFile,$viewFile)
    {
        $this->_output = $this->_quicky->fetch($sourceFile);
        file_put_contents($viewFile,$this->_output);
    }

    /**
     * Renders a view file.
     * This method is required by {@link IViewRenderer}.
     * @param CBaseController the controller or widget who is rendering the view file.
     * @param string the view file path
     * @param mixed the data to be passed to the view
     * @param boolean whether the rendering result should be returned
     * @return mixed the rendering result, or null if the rendering result is not needed.
     */
    public function renderFile($context,$sourceFile,$data,$return)
    {
        if(!empty($data))
    {
            if (is_array($data) || is_object($data))
        {
                foreach($data as $key=>$value) 
        {
                    if (is_array($value)) 
            {
                        if (is_a($value[0], "CActiveRecord"))
                {
                            foreach ($value as $valKey=>$valRec) {
                                $att[] = $valRec->getAttributes();
                            }
                            $this->_quicky->assign($key, $att);
                        } else {
                            $this->_quicky->assign($key, $value);
                        }
                    } else {
                        $this->_quicky->assign($key, $value);
                    }
               }
            } else {
                //GENERIC Data assign
                $this->_quicky->assign("__DATA__", $data);
            }
        }

        if(!is_file($sourceFile) || ($file=realpath($sourceFile))===false)
            throw new CException(Yii::t('yii','View file "{file}" does not exist.',array('{file}'=>$sourceFile)));

        $viewFile=$this->getViewFile($sourceFile);

        if(@filemtime($sourceFile)>@filemtime($viewFile))
        {
            $this->generateViewFile($sourceFile,$viewFile);
            @chmod($viewFile,$this->filePermission);
        }

        return $context->renderInternal($viewFile,$data,$return);
    }

}

?>
Все откомпилированные шаблоны падают в $this->_quicky->compile_dir , но вот как дальше, не соображу.
И потом как "вкомпилить", например:

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

CHtml::link(CHtml::encode($item['txt_title']), array('category/show','txt_cattyp'=>$item['txt_cattyp'],'txt_title_seo'=>$item['txt_title_seo']));
 
т.е., чтобы quicky корректно генерировал ссылку, хотя догадываюсь, что это уже надо к актору quicky писать.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: сравнение скорости CI и Yii

Сообщение samdark »

CSmartyViewRenderer, если честно, у них кривоват. Попробую набросать свой. Для генерации ссылок надо писать свои теги для Quicky (точно так же, как и для всех остальных шаблонизаторов, которые не позволяют использовать PHP).
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: сравнение скорости CI и Yii

Сообщение samdark »

Пока уткнулся в http://code.google.com/p/quicky/issues/detail?id=9 (выкидывается ошибка, которую Yii превращает в Exception). Варианта три:
1. Ждать фикса.
2. Поправить в коде Quicky.
3. Отнаследоваться от Quicky и поправить без правок самого Quicky.
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

Re: сравнение скорости CI и Yii

Сообщение kosenka »

Sam Dark писал(а):Пока уткнулся в http://code.google.com/p/quicky/issues/detail?id=9 (выкидывается ошибка, которую Yii превращает в Exception). Варианта три:
1. Ждать фикса.
2. Поправить в коде Quicky.
3. Отнаследоваться от Quicky и поправить без правок самого Quicky.
Вариант 3 мне кажется будет правильней.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: сравнение скорости CI и Yii

Сообщение samdark »

Готов: viewtopic.php?f=9&t=240

Функционал базовый. Дополнительных плагинов нет.
Ответить