Как отследить и ограничить большое количество однородных запросов на сайте
Очень легко случайно положить в таблицу разметку другого компонента, и это приведет к многократному вызову вложенных компонентов.
Например, если у вас 50 строк в таблице, и вы положили в каждую строку по 2 сниппета формы, то это приведет к 2 * 50 дополнительным запросам, которые создадут ненужную нагрузку на сервер. И это только от одного пользователя. А если он открыл 5-10 подобных страниц сразу? А если несколько пользователей сделают одновременно подобные действия? В итоге получается, что при небольшой посещаемости создается значительная нагрузка по запросам к серверу и БД.
Как этого избежать - очень просто, использовать as-form-modal, as-form-link, sub_ и modal_ поля строки таблицы. Таким образом загрузка конкретной формы будет идти только по клику пользователя. Т.е. средства как правильно сделать есть, но никто не застрахован от ошибок, а нужен инструмент выявления и правильной обработки подобных ситуаций.
В этой статье мы рассмотрим механизм как защититься от таких "невзгод".
Для этого в системе предусмотрены специальные настройки в as.systemOptions:
{ "disableDebugMode": false, // возможность отключить показ отладочных сообщений в консоли браузера
"doubleRequests.disableCheck": false, // отключить контроль количества одинаковых запросов на странице
"doubleRequests.count": 3, // порог по количеству запросов, после которого будет идти уведомление в trace с кодом dblreq
"doubleRequests.countLimit": 4, // после превышения данного порога запрос будет отбрасываться и выводиться сообщение юзеру
"doubleRequests.duration": 2000, // длительность в течение которого учитывается количество запросов (в миллисекундах)
}
В случае наступления 1 порога (count), мы просто фиксируем это в trace. В случае наступления 2 порога - блокируем запросы и выводим на странице сообщение. Это предотвратит чрезмерную загрузку сервера.
В профилактике проекта можно добавить такой запрос для выявления этих ситуаций:
-- show too many dublicate requests per page
select top 200 itemID reqCount,
dbo.as_stripHTML(replace(text, '
', char(10))) text,
convert(nvarchar(20), created, 120) + iif(len(username)>0, ' - ' + username, '') details
from as_trace where code='dblreq' order by id desc
Таким образом, периодически, смотря в профилактику, можно обнаружить подобные ситуации.
Google поиск по нашей документации
- Руководства
- Основа Falcon Space
- Основные компоненты
- Возможности
- Коммуникация с пользователем
- Дизайн, стилизация
- Лендинги
- Универсальный API
- Примеры интеграций
- Каталоги
- Навигация
- Документы
- Дополнительные компоненты
- Продвижение, SEO
- Системные моменты Как быстро перенести решение (таблицы, формы, страницы) на другую базу? Где я могу редактировать процедуру поиска, процедуру общих элементов Layout, процедуры периодического запуска и др? Как изменить длительность показа сообщений Отслеживание изменений хранимых процедур и страниц (logChanges) Форма обратной связи по ошибкам, предложениям suggestion Как разграничивать права на уровне бизнес-логики хранимых процедур Безопасная обработка данных и проверка доступа в хранимых процедурах Использование типовой разметки в виде сниппетов для решения различных задач Работа с редактором кода в личном кабинете разработчика Логирование изменений объектов на примере хранимых процедур Как логировать клики на определенных элементах в системе Обработка старых браузеров (сообщение об устаревшем браузере) Как отследить и ограничить большое количество однородных запросов на сайте Безопасность. Как скрыть некоторые заголовки (http headers) в запросах Логирование событий в приложении (trace) Отображение сообщения об offline (Нет сети) Рабочее место разработчика через терминал Обновляемые метки времени в сообщениях на сайте Подсказка по интерфейсам хранимых процедур компонентов Защита от CSRF атак через дополнительный токен в формах Дополнительные параметры в @parameters (во многих хранимых процедурах) Как логировать события в Falcon в другую базу (чтобы ограничить рост основной базы данных) Сообщение об использовании куки (Cookies) Действия в браузере actions JSON Как искать код некоего компонента (таблицы, формы и т.д.) на странице
- Системное администрирование
- HOWTO
- Таблицы
- Формы
- Загрузка файлов, картинок
- Работа с SQL
- HOWTO JS
- HOWTO Верстка
- Решение проблем
Falcon Space
Это снижение стоимости владения
за счет меньшего количества людей для поддержки и узкого стека разработки. Про снижение стоимости владения продуктом
Это быстрое внесение изменений
по ходу эксплуатации программы. Как создается функционал на платформе
Это простой удобный интерфейс
адаптация под мобильные устройства. Про юзабилити платформы