Перейти к содержимому
  • Нет вызова сервера в цикле. Данные для обработки собираются на клиенте и передаются на сервер одним вызовом (и наоборот: сервер возвращает всё нужное за один раз).
  • Вызов без контекста, где контекст не нужен. &НаСервереБезКонтекста не сериализует и не гоняет по сети данные формы — если метод работает только с переданными параметрами, контекстный вызов оплачивается зря.
  • Тяжёлая бизнес-логика живёт в общих модулях на сервере, а не в модуле формы. Форма только собирает параметры и показывает результат.
  • Серверные методы формы не экспортные: форма — не программный интерфейс. Нужен API — это общий модуль.
  • Между клиентом и сервером передаётся минимум данных: не гонять весь объект, когда нужны три поля; не возвращать на клиент таблицы «на всякий случай».

Каждый серверный вызов — это сетевой круг «клиент → сервер → клиент» плюс сериализация контекста формы. В веб-клиенте и на тонких каналах (удалённые точки, VPN) вызов стоит десятки–сотни миллисекунд: цикл по 200 строкам с вызовом сервера — это полминуты «зависшей» формы. Логика в модуле формы не переиспользуется и дублируется в следующей форме.

Если метод не обращается к реквизитам формы — он внеконтекстный:

Не оценивайте на глаз: включите показатели производительности (в тонком клиенте: Сервис и настройки → Параметры → «Отображать показатели производительности»). У каждого действия появится число серверных вызовов — норма для команды формы 1, «кнопка стоит 200 вызовов» видна сразу. Это тот же критерий, который фиксируется в перф-прогоне для горячих мест.

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