Как уменьшить выборку из базы данных

    Давеча занимался немного оптимизацией одного сайта. Главная страница изначально открывались около 7 секунд. Добавил к выборке одну строчку и страница стала 3 секунды открываться. 

    Добавил к выборке: ?extProps=name,h1,photo,anons,publish_time,url,hit,novinka.

    Т.е. было: 'udata://catalog/getObjectsList//', page/@id, '///2/'

    Стало:      'udata://catalog/getObjectsList//', page/@id, '///2/?extProps=name,h1,photo,anons,publish_time,url,hit,novinka'

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

     

    На странице каталог продукции достаточно обширный размещён, т.е. около 100 карточек товаров выводится одним махом на одной странице.

    Понятно, что в данном случае нужно в первую очередь было оптимизировать вывод одной карточки, ибо с учётом их большого количества это сразу давало существенный результат.

    Суть добавления в выборку парамета ?extProps сводиться к тому, что после этого в результат сразу добавляются значения указанных нами полей, что освобождает нас о необходимости повторного их получения для отображения каждой карточки в списке по отдельности.

    Пример: выборка 'udata://catalog/getObjectsList//', page/@id, '///2/' даёт нам в результате:

    а такая 'udata://catalog/getObjectsList//', page/@id, '///2/?extProps=name,h1,price' уже с доп. полями внутри:

     

    Таким образом такой вот пустяк, а забывать о нём никак не след.

    Правда надо отметить, что возможность вставлять параметр extProps есть не во всех версиях юми, а появилась только начиная с 2.8.какой-то версии.

    Беглый анализ временных издержек удобно проводить с помощью параметра ?showStreamsCalls.

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

     

    						$extPropsInfo = array();
    						$extProps = explode(",", getRequest('extProps'));
    						foreach ($extProps as $fieldName) {
    							if (strlen($fieldName) < 2) continue;
    							if ($fieldName == 'name' && !isset($item['attribute:name'], $item['@name'])) {
    								$item['@name'] = $element->getName();
    							} elseif ($extProp = $element->getObject()->getPropByName($fieldName)) {
    								$extPropsInfo[] = $extProp;
    							}
    						}
    						$item['extended']['properties']['nodes:property'] = $extPropsInfo;