Просмотров: 29331
Дата последнего изменения: 26.05.2021
Сложность урока:
3 уровень - средняя сложность. Необходимо внимание и немного подумать.
4
5
Недоступно в лицензиях:
Ограничений нет
При возникновении проблем в работе проекта для их устранения рекомендуем воспользоваться следующим алгоритмом:
- Ставьте перед собой конкретную цель. Так как процесс оптимизации, улучшения – бесконечный. Например: каждая страница с каталогом ваших товаров должна открываться за определенное время, скажем 0,2 секунды. Только установка таких конкретных целей и их решение может быть эффективна, в отличие от неясных и формализованных пожеланий, "чтобы лучше работало".
- С помощью страницы отладки (Настройки > Производительность > SQL Запросы) найти и убрать лишние запросы.
Лишний запрос – это:
- Запрос в цикле (вынести из цикла в переменную).
- Запросы, которые добирают данные в цикле. (Лучше собрать данные в фильтре, а потом одним запросом вывести данные, потом дополнительный цикл – разложить данные) в этом случае запросы не зависят линейно от количества элементов.
- Убрать из запросов неиспользуемые данные (
$arSelect
). Точно указывать поля, которые впоследствии будут использоваться. Это в разы повышает производительность, потому что такое четкое указание используемых данных означает для базы данных сокращение объемов сортировки. База данных производит такую сортировку не на жестком диске, а в оперативной памяти.
- Оценить возможность использования
PROPERTY_*
в сочетании с инфоблоками 2.0. Инфоблоки 2.0 хранят свои свойства в отдельной таблице. Эта таблица при упоминании PROPERTY_*
присоединяется на этапе выборки. И до выборки значения свойств присоединение этих свойств не происходит.
Когда это не применимо? Например, при малой выборке из большого числа элементов (10 новостей из нескольких тысяч записей). Момент этот не очень однозначный, и малозависим от разработчика. Причина в том, что результат выборки из инфоблоков и инфоблоков 2.0 – разный. В простом инфоблоке при выборке записи начинают размножаться. А инфоблоки 2.0 возвращают массив значения свойства. Если код в шаблоне не предусматривает эту ситуацию, то смена обычных инфоблоков на инфоблоки 2.0 приведет только к тому, что шаблон «развалится».
- Посмотреть план исполнения самых тяжелых запросов и добавить/удалить индексы.
Список ссылок по теме: