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

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

SQL-инструмент для создания личных кабинетов на сайте

Суть подхода и история создания Falcon Space

Платформа Falcon Space

Это снижение стоимости владения

за счет меньшего количества людей для поддержки

Это быстрое внесение изменений

по ходу эксплуатации программы

Это современный интерфейс

полная адаптация под мобильные устройства

Веб-приложения на MS SQL. Партнерская программа для разработчиков и веб-студий

Вы можете разрабатывать самостоятельно или сотрудничать с нами в плане веб-разработки на платформе Falcon Space, используя только SQL и HTML.
Смотреть примеры с кодом SQL
Документация по платформе

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