Бортовой журнал Ктулху

Оптимизация modx revo

getCollection() - получает массив объектов.

Если нужно получать не целиком объекты, а какие-либо данные, например id объекта, можно воспользоваться пользовательским запросом, который вернет массив только с необходимыми данными.

Например, этот запрос получает все объекты текущего пользователя.

$res = $modx->getCollection('as_cart', array('id_user' => $modx->getLoginUserID() ));

На выходе - большая простыня данных. А если нужны только id, user_id, то проще воспользоваться обычным запросом.

 $query = $modx->query("SELECT 'id', 'id_item', 'id_user' FROM 'as_cart' WHERE 'id_user' = ".$modx->getLoginUserID());
$res = $query->fetchAll(PDO::FETCH_ASSOC);

На выходе - аккуратный массив только с необходимыми данными.

Проведем опыт: сравним обычный запрос с выборкой объектов.

 

Дано: 140 объектов.

1. getCollection(): страница не отвечает, расход памяти - 87,5 МБ, время - 1,5 минуты.

90efb9e5a62030cb2528da3de2527866e84c7b59

2. Запрос: 16,9 кб, 147 мс.

01ac6e8c5a934ec9b4f3254fd42d7b87066f0d6f

 

Дано: 1 объект.

1. getCollection(): страница не отвечает, расход памяти - 72,6 кб, время - 470мс.

a7c81a0c3c1a2e569a7c98d6656f556d1b38af89

2. Запрос: 523 б, 135 мс.

88154866767e367608311a94389c205fd5c978f1

 

Как видно, с небольшим количеством объектов разница не слишком большая.

Разумеется, это не для всех случаев, т.к. в первом случае получаем уже объект, а во втором - только массив, с которым нужно будет проводить еще некоторые действия.

 

Ссылки на подобные материалы:

Оптимизация чтения ресурсов MODX Revolution

Советы по оптимизации сайта штатными средствами MODX

Гонки на скорость, часть вторая. Ускорение Modx Revo более чем в 8 раз

Оптимизация сайта на MODX Revo. Первый взгляд

Ускорение MODX-а за счет облегчения ядра