сравнение скорости CI и Yii
сравнение скорости CI и Yii
Не хочу никаких холи-варс, но мне просто интересно, а кто-нибудь сравнивал по скорости 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. Никаких "тонких" настроект не использовал
Сейчас решил сравнить свой тестовый проект (сранивал только индексную(первую) страницу):
Время генерации:
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
Идентичен ли код (хотя-бы по смыслу и возможностям)?
Используется ли APC/Xcache/eAccelerator?
Используется ли Active Record в Yii?
Включено ли кеширование метаданных?
Отключен ли отладочный режим?
Используется ли APC/Xcache/eAccelerator?
Используется ли Active Record в Yii?
Включено ли кеширование метаданных?
Отключен ли отладочный режим?
То, что Yiilite использует больше вполне логично. Ну и то, что Yii больше CI тоже: больше кода, нормальный Active Record.Использовано памяти:
CI: 3.79 MB;
Yii: 4.8 MB
Yiilite: 5.16 MB
Нравится Yii? Давайте сделаем его лучше!.
Re: сравнение скорости CI и Yii
Да.Sam Dark писал(а): Идентичен ли код (хотя-бы по смыслу и возможностям)?
А как это проверить? Вот phpinfo сервера, где лежат оба проекта: http://hermes.timeweb.ru/phpinfo.phpSam Dark писал(а): Используется ли APC/Xcache/eAccelerator?
Нет.Sam Dark писал(а): Используется ли Active Record в Yii?
В CI использую dbsimple (http://dklab.ru/lib/DbSimple/)
Я не знаю, важно ли это или нет, но я кеширую данные в проекте который на yii.
В Yii - да.Sam Dark писал(а): Включено ли кеширование метаданных?
В Yii - да.Sam Dark писал(а): Отключен ли отладочный режим?
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: сравнение скорости CI и Yii
Попробовать APC / eAccelerator определённо стоит.
Нравится Yii? Давайте сделаем его лучше!.
Re: сравнение скорости CI и Yii
Боюсь, что не дадут поставить APC на виртуальный хостинг.Sam Dark писал(а):Попробовать APC / eAccelerator определённо стоит.
Да и если, предположим, я отдам проект заказчику, то у меня не будет 100% уверенности, что у заказчика на его хостинге будет стоять APC...
Вообщем кругом одна засада и я в печали... что же выбрать для проекта...
-
- Сообщения: 1428
- Зарегистрирован: 2009.08.20, 22:54
- Откуда: Молдова, Бельцы
- Контактная информация:
Re: сравнение скорости CI и Yii
Имхо, если грамотно кэшировать, то на любом хостинге "летать" (не слетать и не лететь, а летать) будет.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: сравнение скорости CI и Yii
± 0.01 сек. и ± 1 Мб памяти — это совершенно не важно. Сравните, сколько у вас страница генерируется и сколько передаётся получателю.
Нравится Yii? Давайте сделаем его лучше!.
-
- Сообщения: 1428
- Зарегистрирован: 2009.08.20, 22:54
- Откуда: Молдова, Бельцы
- Контактная информация:
Re: сравнение скорости CI и Yii
Ну если нужно чтоб все летало, то может помочь аддон к файрфоксу - page speed от гугла.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: сравнение скорости CI и Yii
Именно. К самому фреймворку это отношения не имеет.
Нравится Yii? Давайте сделаем его лучше!.
Re: сравнение скорости CI и Yii
Согласен, но хочется добиться некой перфекцииSam Dark писал(а): ± 0.01 сек. и ± 1 Мб памяти — это совершенно не важно.
Остановлюсь, видимо, на yii, тем более, что хочется изучить что-то новое, а не стоять на месте.
Жаль только, что мои попытки прикрутить quicky в качестве рендера шаблонов, пока, не принесли результатов. Уж больно я привык к smarty-подобному синтаксису.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: сравнение скорости CI и Yii
Могу в этом помочь. Как раз есть вечер относительно свободный.
Нравится Yii? Давайте сделаем его лучше!.
Re: сравнение скорости CI и Yii
Давай попробуем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);
}
}
?>
И потом как "вкомпилить", например:
Код: Выделить всё
CHtml::link(CHtml::encode($item['txt_title']), array('category/show','txt_cattyp'=>$item['txt_cattyp'],'txt_title_seo'=>$item['txt_title_seo']));
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: сравнение скорости CI и Yii
CSmartyViewRenderer, если честно, у них кривоват. Попробую набросать свой. Для генерации ссылок надо писать свои теги для Quicky (точно так же, как и для всех остальных шаблонизаторов, которые не позволяют использовать PHP).
Нравится Yii? Давайте сделаем его лучше!.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: сравнение скорости CI и Yii
Пока уткнулся в http://code.google.com/p/quicky/issues/detail?id=9 (выкидывается ошибка, которую Yii превращает в Exception). Варианта три:
1. Ждать фикса.
2. Поправить в коде Quicky.
3. Отнаследоваться от Quicky и поправить без правок самого Quicky.
1. Ждать фикса.
2. Поправить в коде Quicky.
3. Отнаследоваться от Quicky и поправить без правок самого Quicky.
Нравится Yii? Давайте сделаем его лучше!.
Re: сравнение скорости CI и Yii
Вариант 3 мне кажется будет правильней.Sam Dark писал(а):Пока уткнулся в http://code.google.com/p/quicky/issues/detail?id=9 (выкидывается ошибка, которую Yii превращает в Exception). Варианта три:
1. Ждать фикса.
2. Поправить в коде Quicky.
3. Отнаследоваться от Quicky и поправить без правок самого Quicky.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: сравнение скорости CI и Yii
Нравится Yii? Давайте сделаем его лучше!.