Оптимизация производительности сайта. Как избежать тормозов на сайте

Здесь  мы собрали некоторые рекомендации, которые могут избежать возможных проблем с медленными запросами SQL, долгой загрузкой данных на страницах личных кабинетов. 

Не нужно в табах (вкладках) грузить таблицы

Дело в том, что таблицы будут сразу подгружаться на странице. Т.е. человек может просмотреть только 1 вкладку, а грузятся все. 

Решение - используются модальные таблицы. Модальные таблицы и формы грузятся только при клике на кнопку.

Медленное и тяжелое - в модальные таблицы или модальные формы 

Есть таблицы, которые в любом случае затрагивают много ресурсов. Для таких таблиц используйте загрузку по требованию (модальные таблицы), также максимально уменьшите пагинацию (10-20). 

Избегайте много подгружаемых данных через подзапросы

Контролируйте сложность подгрузки по полям в таблице. Не грузите очень много данных в строке таблицы, что требует загрузки данных через сложный подзапрос в SELECT.

Используйте подтаблицы, дополнительные формы. 

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

Избегайте постоянного пересчета данных (рейтинги, количество элементов, средний чек и др.)

Создайте поле у сущности (например, поле Рейтинг у пользователя), в котором будет храниться вычисленное значение.

Создайте функцию, которая будет пересчитывать для данного конкретного пользователя рейтинг dbo.updateUserRating(userID). 

Вызывайте эту функцию в местах, которые приводят к изменению рейтинга (создание заказа, факт оплаты заказа и т.д.).

Таким образом вы сможете быстро получать список пользователей с сохраненными актуальными рейтингами, избежав при этом массовых сложных вычислений (когда для каждой строки таблицы пользователей выполняется большая и сложная процедура вычисления рейтинга). 

Как решать проблему медленных страниц

Если таблица работает медленно - уберите все сложные элементы, добейтесь хорошей скорости и затем постепенно добавляйте обратно возможности в запрос (фильтрация, подзапросы, сортировки). 

Сохраните начальный вариант, и начинайте массово все убирать - в компоненте это просто не выведется. Также используйте для этого Отладку с замером времени (кнопка Debug в окне редактирования SP). 

Если вы пока не знаете какая страница вызывает торможение, то действуйте следующим образом: 

  1. смотрим по as_perf проблемные запросы/ХП
  2. отключаем соответствующие компоненты (в GetItems: Select 1; return)
  3. добиваемся разгрузки системы
  4. постепенно добавляем обратно компоненты и анализируем загрузку

Понимание работы запроса изнутри

Хорошо представляйте как внутри работает запрос - так вы лучше будете понимать где и какие затруднения будут возникать у движка при выборке. 

Используйте exec as_perf

Обязательно используйте as_perf для нахождения проблемных запросов. 

Запрос проблемный, если он: 

Если проблемный запрос найден - это половина решения. 

Что можно сделать с проблемным запросом: 

Страница-источник на сайте falconspace.ru