Миниблог

Modx и вывод данных из БД

И вначале реклама, небольшой блок. Прошу не сердиться и не вносить ее в фильтры блокировщиков.

подробнее о рекламодателе можно узнать внутри блока
Спасибо. А теперь сам материал.

Простой скрипт замера работы getintegrator, stmt или getcollection

 Данные из таблицы в MODX можно выводить по-разному - с помощью $modx->getIntegrator, с помощью стандартных для PDO методов prepare(); и потом stmt->execute(); Есть еще getCollection . Выбирая, что применить, нашел эту статью, где сравнивают getcollection и pdo. Но нигде не нашел сравнения с getIntegrator, который должен быть легче для всего. В итоге с помощью доков и подручных средств набросал скрипт проверки работы для своего класса, может и вам пригодиться

$q = $modx->newQuery('ClassTable');
//условия для выборки или что-то еще, для реальной проверки, которая будет использоваться
$q->where(array('param'=>'value'));

$start = microtime(true);
$resultsIterator = $modx->getIterator('ClassTable', $q);
$resultsArrayIterator = [];
foreach ($resultsIterator as $result) {
$resultsArrayIterator[] = $result->toArray();
}
$end = microtime(true);
$timeIterator = $end - $start;
$countIterator = count($resultsArrayIterator);

$start = microtime(true);
$resultsCollection = $modx->getCollection('ClassTable', $q);
$resultsArrayCollection = [];
foreach ($resultsCollection as $result) {
$resultsArrayCollection[] = $result->toArray();
}
$end = microtime(true);
$timeCollection = $end - $start;
$countCollection = count($resultsArrayCollection);

$start = microtime(true);
$stmt = $q->prepare();
$stmt->execute();
$resultsArrayExecute = $stmt->fetchAll(PDO::FETCH_ASSOC);
$end = microtime(true);
$timeExecute = $end - $start;
$countExecute = count($resultsArrayExecute);

// Вывод результатов
echo "Результаты с использованием getIterator():\n";
echo "Количество результатов: " . $countIterator . "\n";
echo "Время выполнения: " . $timeIterator . " сек.\n\n";

echo "Результаты с использованием getCollection():\n";
echo "Количество результатов: " . $countCollection . "\n";
echo "Время выполнения: " . $timeCollection . " сек.\n\n";

echo "Результаты с использованием execute() и fetchAll():\n";
echo "Количество результатов: " . $countExecute . "\n";
echo "Время выполнения: " . $timeExecute . " сек.\n";

// Вывод массивов данных для проверки при необходимости
echo "Массив данных, полученный с использованием getIterator():\n";
var_dump($resultsArrayIterator);

echo "Массив данных, полученный с использованием getCollection():\n";
var_dump($resultsArrayCollection);

echo "Массив данных, полученный с использованием execute() и fetchAll():\n";
var_dump($resultsArrayExecute);

В итоге у меня были такие показатели

Результаты с использованием getIterator():
Количество результатов: 163
Время выполнения: 0,048829078674316 сек.

Результаты с использованием getCollection():
Количество результатов: 163
Время выполнения: 0,052037954330444 сек.

Результаты с использованием execute() и fetchAll():
Количество результатов: 163
Время выполнения: 0,0012261867523193 сек.

Но для справедливости замечу, что если не выводить массив, а проводить другие операции, то getIntegrator быстрее всех т.к. по умолчанию он не возвращает массив данных, а позволяет пошагово работать . Я же просчитывал именно с получением сразу массивом данных (его я буду передавать в чанк), поэтому для меня оказался быстрее метод pdo. Но это не значит, что и вам подойдет, просто я в восторге от этого скрипта и решил поделиться. Но я в восторге и от getIntegrator :-) вот официальная документация по нему https://docs.modx.com/3.x/ru/extending-modx/xpdo/class-reference/xpdo/xpdo.getiterator для небольшого объема данных он очень удобен. Вобщем я еще в сомнении, что все-таки применять, поэтому слишком серьезно не относитесь и прошу прощения, если этот код вызвал у вас стыд. 

Похожее

draw I
draw I
draw I
draw I

 quote a81ca

Если вдруг вам было здесь полезно, уютно и приятно, что захотелось меня отблагодарить - вы можете пожертвовать мне на кофе.

 

i

Будет осуществлен переход на сайт Yoomoney

 

draw I

 


Внимание: На сайте могут присутствовать ссылки ePN

Мини-портфолио

очередной бесполезный блог