Немного об управлении местом выполнения кода в управляемых формах

20.08.13

База данных - HighLoad оптимизация

Многим программистам не нравится концепция управляемых форм, зачем все эти &НаСервере, &НаКлиенте и так далее...

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
ChooseExecutionPlace_002.epf
.epf 7,37Kb
29
29 Скачать (1 SM) Купить за 1 850 руб.

Лично мне - сначала было неудобно. Но когда немного покрутил-повертел, понял, что этот инструмент, на самом деле, весьма гибкий, и позволяет планировать моменты перехода на сервер более прозрачно, чтоли. Ведь каждый переход на сервер - это дополнительные расходы, для версии 8.2 это примерно от 0,02 секунды для вызова без контекста и от 0,08, причем сильно зависит от размера того самого контекста.

Это как бы заставляет писать более "модульные" и менее зависимые функции

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

Отследить момент перехода на сервер (кстати, верно и для управляемого и для обычного приложения, которое может начать "тупить" при переходе с фалойого варианта на клиент-серверный - одна из (не основных, но все-же) причин ухудшения производительности) можно в замере производительности 1с - это последняя колонка, т.е. если в строке нарисован "клиент" и "стрелочка перехода" - это это и есть переход на сервер, если таких вызовов много - то суммарно может накопиться достаточно ощутимое время задержек. Те присловутые "запросы в цикле", если их "условно невозможно" было перенести в один запрос - то ускорялись на пару ~0,1 секунды на итерацию, если перенести место выполнения целиком на сервер.

Кстати, если внимательно посомтреть на замер производительности, то можно заметить, что строки, которые выполнялись и на клиенте и на сервере - присутствуют в замере дважды :)

Статья не расчитана на "гуру" управляемых форм, так что сильно не пинайте, если для вас ничего нового не нашлось.

Управляемые формы контекст клиент-сервер

См. также

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    7457    bayselonarrend    20    

154

HighLoad оптимизация Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка для простого и удобного анализа настроек, нагрузки и проблем с SQL сервером с упором на использование оного для 1С. Анализ текущих запросов на sql, ожиданий, конвертация запроса в 1С и рекомендации, где может тормозить.

2 стартмани

15.02.2024    12422    241    ZAOSTG    80    

115

Перенос данных 1C Механизмы платформы 1С Системный администратор Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    11226    dsdred    44    

130

Механизмы платформы 1С Программист Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    23763    SeiOkami    48    

135

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    14734    YA_418728146    7    

166

Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    25533    SeiOkami    31    

113

Запросы HighLoad оптимизация Программист Запросы Бесплатно (free)

Многие знают, что для ускорения работы запроса нужно «изучить план». При этом сам план обычно обескураживает: куча разноцветных иконок и стрелочек; ничего не понятно, но очень интересно! Аналитик производительности Александр Денисов на конференции Infostart Event 2021 Moscow Premiere рассказал, как выполняется план запроса и что нужно сделать, чтобы с его помощью находить проблемы производительности.

20.06.2023    28183    Филин    37    

118

Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Мало кто знает, что поле "Глобального поиска" в 1С можно доработать. Добавить свои варианты поиска, кнопочки в результатах и даже целые пользовательские меню.

27.03.2023    8582    SeiOkami    10    

143
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. botokash 394 20.08.13 19:59 Сейчас в теме
Стал переводить разработку на 8.3.3 со всеми прелестями пересмотра кода на клиент-серверный вариант, и даже как-то втянулся) Все таки есть что-то в этом, писать код считая сколько ты можешь потерять каждый раз вызывая сервер, и соответственно оптимизировать алгоритмы и структуру программы.
2. mikhailovaew 127 28.08.13 09:48 Сейчас в теме
Жаль, что мало в информации в самой статье. Лучше бы примеры из приложенной обработки (код) перетянуть в саму статью, и расписать подробно, почему это делается так, а это - по-другому.
3. Fragster 1151 28.08.13 20:35 Сейчас в теме
(2) mikhailovaew, там всей обработки 97 строк, включая пустые
4. Fragster 1151 11.10.13 16:27 Сейчас в теме
А кто-нибудь знает, как избавиться от процедуры "УходимНаСервер" при "автоматическом" выборе места выполнения?
5. AlexO 135 17.06.14 15:47 Сейчас в теме
пример, который показывает, как выполнить одну и ту же функцию на клиенте или на сервере

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

В толстом вообще нельзя "физически" разделить, где что исполняется. А если файловая база - так и вообще вся база тянется клиенту на комп.
Во вложении - пример, который показывает, как выполнить одну и ту же функцию на клиенте или на сервере. также можно замерить оверхэд на вызов сервера с контекстом или без него.
было бы описание объектов "там и там" и разбор в статье - было бы что обсуждать. А так - получается, кто что увидит, или хочет увидеть - то и увидит.
Те присловутые "запросы в цикле", если их "условно невозможно" было перенести в один запрос - то ускорялись на пару ~0,1 секунды на итерацию, если перенести место выполнения целиком на сервер.
это проблема УФ, а не клиент-серверной архитектуры, которой, считаю, у 1С нет, не было, и уже не будет.
"Ускорение" в 0,1 сек - это те же потери на "переговоры" 1с-клиента и 1с-сервера ("...Ведь каждый переход на сервер - это дополнительные расходы, для версии 8.2 это примерно от 0,02 секунды для вызова без контекста и от 0,08, причем сильно зависит от размера того самого контекста.")
А не "перенос" функционала с клиента на сервер и обратно. Т.к. в одном случае запрос начинается на "клиенте" (типа клиент, потому и в скобках), и непосредственно выполняется на сервере, а во втором - непосредственно начинается на сервере, и выполняется на сервере. И где тут "разделение на клиента и сервер"?
6. Fragster 1151 17.06.14 19:17 Сейчас в теме
(5) AlexO, ваш сарказм неуместен.

[IS-QUOTE]пример, который показывает, как выполнить одну и ту же функцию на клиенте или на сервере

Ага, особенно и там и там можно выполнить самые ресурсоемкие операции - запросы к базе.
[/IS-QUOTE]
В тонком клиенте нет запросов и вам это прекрасно известно. Но, например, в тонком нет веб-сервисов, а в толстом - есть.
[IS-QUOTE]а в толстом - когда доступна модификация данных и куча всяких интересных объектов - этот же код выполняется на клиенте.

В толстом вообще нельзя "физически" разделить, где что исполняется. А если файловая база - так и вообще вся база тянется клиенту на комп.
[/IS-QUOTE]
Если вы сделаете замер производительности, то увидите те самые стрелочки перехода на сервер, про которые я говорю.

Если вы запустите эту обработку в толстом клиенте и управляемом приложении и посмотрите на результаты при разном выборе места выполнения - увидите, что место выполнения кода прекрасно контролируется директивами &НаСервере и т.п.

В "неуправляемом" приложении также есть общие модули только с галкой "сервер" для контроля места выполнения (по умолчанию - это клиент, но стрелки перехода в замере и там дают представление о моментах прыжков с клиента на сервер).


[IS-QUOTE]Во вложении - пример, который показывает, как выполнить одну и ту же функцию на клиенте или на сервере. также можно замерить оверхэд на вызов сервера с контекстом или без него.

было бы описание объектов "там и там" и разбор в статье - было бы что обсуждать. А так - получается, кто что увидит, или хочет увидеть - то и увидит.[/IS-QUOTE]
Какие объекты доступны в каком режиме - прекрасно описано в синтакс-помощнике в блоке "доступность".

[IS-QUOTE]Те присловутые "запросы в цикле", если их "условно невозможно" было перенести в один запрос - то ускорялись на пару ~0,1 секунды на итерацию, если перенести место выполнения целиком на сервер.

это проблема УФ, а не клиент-серверной архитектуры, которой, считаю, у 1С нет, не было, и уже не будет.[/IS-QUOTE]
если вы посмотрите на замер "запроса в цикле" в толстом клиенте, то вы увидите проблему - именно что переход с клиента на сервер и обратнго

"Ускорение" в 0,1 сек - это те же потери на "переговоры" 1с-клиента и 1с-сервера ("...Ведь каждый переход на сервер - это дополнительные расходы, для версии 8.2 это примерно от 0,02 секунды для вызова без контекста и от 0,08, причем сильно зависит от размера того самого контекста.") А не "перенос" функционала с клиента на сервер и обратно. Т.к. в одном случае запрос начинается на "клиенте" (типа клиент, потому и в скобках), и непосредственно выполняется на сервере, а во втором - непосредственно начинается на сервере, и выполняется на сервере. И где тут "разделение на клиента и сервер"?

речь идет как раз про потери на диалог. а функционал часто может быть выполнен и на клиенте и на сервере, (например пересчет суммы при изменении количества/цены) но если разработчик не понимает этого, не "управляет" местом выполнения, то это может негативно сказаться на отзывчивости приложения. Например частая ошибка - это контекстные вызовы вместо неконтекстных, или вызов функции на сервере, когда она может выполниться и на клиенте и на сервере без перехода.



Может быть вы знаете, как в данном примере избавиться от функции "УходимНаСервер" для перехода на сервер в случае тонкого клиента при "автоматическом" выборе места выполнения?
7. AlexO 135 18.06.14 09:49 Сейчас в теме
(6)
что место выполнения кода прекрасно контролируется директивами &НаСервере и т.п.

Нет, вы мне покажите, как выполнить код НаКлиенте, если в 1С заложено - только НаСервере. И наоборот.
А то, что описываете - это не разделение Клиент-Сервер, а разнесение выполнения инструкций внутри платформы. Что можно было сделать в "невидимом" режиме полностью автоматически, безо всяких "НаКлиенте" "НаСервере".
Так как роли они практически никакой не играют.
Какие объекты доступны в каком режиме - прекрасно описано

Ну так а ваша заслуга, как программиста, какая в этом процессе "разделения"?
8. Fragster 1151 18.06.14 11:59 Сейчас в теме
(7) AlexO, в платформе заложено, что какие-либо методы доступны: в толстом клиенте, в тонком клиенте или на сервере (условно). Если выбор есть - выбирайте, что вам больше нравится (например арифметические операции для тонкого клиента). Если выбора нет (тонкий клиент и нужно получить данные из базы) - контролируйте количество (серверные вызовы в цикле против цикла в одном серверном вызове) и моменты переходов (переход на сервере, например, в обработке ожидания (при необходимости с использованием фонового задания) при необходимости получения данных например в момент прокрутки списка).
9. AlexO 135 20.06.14 15:51 Сейчас в теме
(8)
Если выбор есть - выбирайте

Выбора нет в практически во всех случаях, а выбор "сложить на клиенте или на сервере" - надеюсь, понятно, что это вообще не тема.
И уж тем более - не для клиент-сервера. Это который настоящий.
контролируйте количество (серверные вызовы в цикле против цикла в одном серверном вызове)

Как я могу тут что-либо контролировать, если это определяеться алгоритмом? Если мне надо цикл на форме - покой он мне нужен на сервере, если в итоге я получу на форме не результат каждой итерации, а конечный итог?
при необходимости получения данных например в момент прокрутки списка

Прокрутка списка или визуализация чего-либо - слабое место 1С от начала, без привязки к УФ или ОФ. И думать об этом приходится хоть в клиенте, хоть файловой базе.
10. kiruha 388 10.09.14 18:18 Сейчас в теме
Этот инструмент не несет ничего гибкого.
Никакого практического ускорения я не замечал на проектах.
Кучу ненужного кода замечаю очень хорошо.
Автор статьи неявно предполагает "тупизну" 1С ников, пишущих запросы в цикле и тупизну разработчиков платформы, не в состоянии оптимизировать автоматически клиент серверные вызовы и использования кэша.
CaSH_2004; +1 Ответить
Оставьте свое сообщение