Доктрина 1.2 Вложенный набор действительно медленный. Как я могу улучшить это. (NestedSet) - PullRequest
0 голосов
/ 08 января 2011

Я выполняю простой запрос с Doctrine 1.2.

Вот запрос.

$cat = Doctrine_Core::getTable('Model_Category')->find($CatID);
if( isset($cat) && $cat->getNode()->hasChildren())
            $this->view->CategoryTree = $cat->getNode()->getChildren();

Почему это так медленно?.

У любого есть решение, чтобы получить лучшую производительность этого.Спасибо

1 Ответ

3 голосов
/ 08 января 2011

Когда я тестировал свое приложение, я обнаружил, что использование Doctrine_Core :: HYDRATE_ARRAY имело большое значение.При использовании только в представлении это часто имеет смысл.

Если вам нужны более сложные вложенные наборы, может быть лучше просто использовать Doctrine_Query.

То, что вы хотите - это, вероятно, запрос наподобиеэто:

$query = Doctrine_Query::create();
$query->from('Model_Category cat')
    ->leftJoin('cat.Node n')
    ->leftJoin('n.Childre c')
    ->where('count(c.id) > 0')
    ->andWhere('cat.id = ?', $id);
$query->execute(array(1), Doctrine_Core::HYDRATE_ARRAY)

Профилирование Xdebug может быть очень полезным, если вы используете Ubuntu:

sudo apt-get install php5-xdebug

Тогда:

sudo gedit /etc/php5/apache2/conf.d/xdebug.ini

В xdebug.ini у меня есть:

zend_extension=/usr/lib/php5/20090626+lfs/xdebug.so
xdebug.profiler_enable=on
xdebug.profiler_output_dir="/tmp/xdebug"
xdebug.profiler_output_name = "cachegrind.out.%H.%R.%t"

Не забудьте создать каталог:

mkdir / tmp / xdebug

sudo chgrp www-data / tmp / xdebug

chmod 774 / tmp / xdebug

Затем я использую KCachegrind для просмотра результатов, надеюсь, это поможет

...