← Назад ко всем вопросам

Что такое «чрезмерные клиент-серверные переходы»

1️⃣ Как кратко ответить

Чрезмерные клиент-серверные переходы — это ситуация, когда в приложении 1С происходит слишком много обращений от клиента к серверу и обратно, что может привести к снижению производительности системы. Это происходит из-за неэффективной организации кода, когда операции, которые могли бы быть выполнены на клиенте или сервере, требуют постоянного обмена данными между ними.

2️⃣ Подробное объяснение темы

В архитектуре клиент-сервер приложения 1С, клиентская часть отвечает за интерфейс и взаимодействие с пользователем, а серверная часть — за обработку данных и выполнение бизнес-логики. Клиент-серверные переходы — это обмен данными между клиентом и сервером, который происходит, когда клиент запрашивает выполнение определенной операции на сервере или получает данные от него.

Почему чрезмерные переходы — это плохо?

  1. Снижение производительности: Каждый переход требует времени на передачу данных по сети, что может замедлить работу приложения, особенно при медленном соединении или большом объеме данных.
  2. Увеличение нагрузки на сервер: Частые обращения к серверу могут перегрузить его, что приведет к снижению общей производительности системы.
  3. Увеличение времени отклика: Пользователь может заметить задержки в работе приложения, что ухудшает пользовательский опыт.

Как это происходит?

Чрезмерные клиент-серверные переходы часто возникают из-за неэффективного проектирования кода. Например, если в коде часто вызываются серверные методы из клиентского кода для выполнения простых операций, которые могли бы быть выполнены на клиенте, это приводит к избыточным переходам.

Пример:

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

// Клиентский код
Процедура ПоказатьЦеныТоваров()
    // Получаем список товаров с сервера
    Товары = ПолучитьТоварыСервера();
​
    // Для каждого товара получаем цену с сервера
    Для каждого Товар Из Товары Цикл
        Цена = ПолучитьЦенуТовараСервера(Товар);
        Сообщить("Товар: " + Товар + ", Цена: " + Цена);
    КонецЦикла;
КонецПроцедуры
​
// Серверный код
Функция ПолучитьТоварыСервера() Экспорт
    // Возвращает список всех товаров из базы данных
    Возврат Запрос("ВЫБРАТЬ Товар ИЗ Товары").Выполнить().Выгрузить();
КонецФункции
​
Функция ПолучитьЦенуТовараСервера(Товар) Экспорт
    // Возвращает цену для конкретного товара
    Запрос = Новый Запрос("ВЫБРАТЬ Цена ИЗ Цены ГДЕ Товар = &Товар");
    Запрос.УстановитьПараметр("Товар", Товар);
    Результат = Запрос.Выполнить().Выбрать();
    Если Результат.НайтиСледующий() Тогда
        Возврат Результат.Цена;
    Иначе
        Возврат 0;
    КонецЕсли;
КонецФункции

Проблема в примере:

  • Для каждого товара выполняется отдельный запрос к серверу для получения цены, что приводит к множеству клиент-серверных переходов.

Как оптимизировать:

  • Получить все данные за один запрос и обработать их на клиенте.
// Оптимизированный клиентский код
Процедура ПоказатьЦеныТоваров()
    // Получаем список товаров и их цен с сервера за один запрос
    ТоварыСЦенами = ПолучитьТоварыСЦенамиСервера();
​
    // Выводим информацию о товарах и их ценах
    Для каждого ТоварСЦеной Из ТоварыСЦенами Цикл
        Сообщить("Товар: " + ТоварСЦеной.Товар + ", Цена: " + ТоварСЦеной.Цена);
    КонецЦикла;
КонецПроцедуры
​
// Оптимизированный серверный код
Функция ПолучитьТоварыСЦенамиСервера() Экспорт
    // Возвращает список всех товаров и их цен из базы данных
    Запрос = Новый Запрос("ВЫБРАТЬ Товар, Цена ИЗ Цены");
    Возврат Запрос.Выполнить().Выгрузить();
КонецФункции

Преимущества оптимизации:

  • Снижение количества клиент-серверных переходов.
  • Уменьшение нагрузки на сервер и сети.
  • Ускорение времени отклика приложения.

Таким образом, для повышения производительности приложения важно минимизировать количество клиент-серверных переходов, объединяя запросы и обрабатывая данные на стороне, где это наиболее эффективно.

Тема: Формы и клиент-сервер
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки