Как отследить и ограничить большое количество однородных запросов на сайте

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

Например, если у вас 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

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

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

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

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

Платформа Falcon Space

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

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

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

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

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

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

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

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

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