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

Здесь  мы собрали некоторые рекомендации, которые могут избежать возможных проблем с медленными запросами 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 для нахождения проблемных запросов. 

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

  • потребляет много памяти
  • долго выполняется
  • потребляет много CPU
  • создает дедлоки
  • возвращает очень много строк (больше 300). 

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

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

  • отрезать медленную часть 
  • оптимизировать его загрузку с сохранением функций
  • отключить совсем
  • добавить индексы на задействованные таблицы

Falcon Space - функциональная веб-платформа разработки на узком стеке MS SQL/Bootstrap. Вводная по Falcon Space
Насколько полезной была статья?

Google поиск по нашей документации

Выгода от использования Falcon Space

В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Нужна бесплатная консультация?
Получить оценку проекта
Создайте концепцию проекта на основе нашего шаблона и получите оценку проекта в виде КП.
Демо-сайт решений
Базисные решения, которые можно гибко адаптировать под себя: менять внешний вид, бизнес-логику и даже структуру базы данных.
Сайт использует Cookie. Правила конфиденциальности OK