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

20.08.13

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

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

Скачать файлы

Наименование Файл Версия Размер
ChooseExecutionPlace_002.epf
.epf 7,37Kb
29
.epf 7,37Kb 29 Скачать

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

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

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

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

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

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

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

См. также

Планы обмена VS История данных

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

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

11.12.2023    6163    dsdred    36    

110

1С-ная магия

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

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

06.10.2023    18198    SeiOkami    46    

116

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    8559    YA_418728146    6    

139

MS SQL Server: изучаем планы запросов

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

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

20.06.2023    15486    Филин    37    

112

Расширение глобального поиска 1С, или Глобальный поиск "на максималках"

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

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

27.03.2023    6880    SeiOkami    10    

140

Версионирование объектов VS История данных

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

Давайте разберемся в механизме «История данных» и поэкспериментируем для наглядности. Сравним «Версионирование объектов» и «Историю данных».

06.03.2023    18452    dsdred    54    

191

Практическая шпаргалка по новым возможностям языка запросов 1С

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

В предлагаемой статье решил привести примеры применения новых возможностей языка запросов 1С, начиная с версии платформы 8.3.20.

21.11.2022    23175    quazare    36    

121
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. botokash 389 20.08.13 19:59 Сейчас в теме
Стал переводить разработку на 8.3.3 со всеми прелестями пересмотра кода на клиент-серверный вариант, и даже как-то втянулся) Все таки есть что-то в этом, писать код считая сколько ты можешь потерять каждый раз вызывая сервер, и соответственно оптимизировать алгоритмы и структуру программы.
2. mikhailovaew 127 28.08.13 09:48 Сейчас в теме
Жаль, что мало в информации в самой статье. Лучше бы примеры из приложенной обработки (код) перетянуть в саму статью, и расписать подробно, почему это делается так, а это - по-другому.
3. Fragster 1137 28.08.13 20:35 Сейчас в теме
(2) mikhailovaew, там всей обработки 97 строк, включая пустые
4. Fragster 1137 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 1137 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 1137 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 Ответить
Оставьте свое сообщение