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

20.08.13

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

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

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

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

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

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

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

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

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

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

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

См. также

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

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

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

27.03.2023    5488    SeiOkami    10    

129

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

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

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

06.03.2023    10286    dsdred    48    

144

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

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

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

21.11.2022    19538    quazare    34    

120

Утилита тестирования сервера 1С от HADGEHOGs

HighLoad оптимизация Мониторинг Платформа 1С v8.3 Россия Бесплатно (free)

Программа для тестирования вашей инфраструктуры 1С. Анализ ключевых параметров оборудования и ПО серверов 1С и MS SQL, поиск ошибок в базах 1С на стороне MS SQL, тестирование производительности серверов MS SQL и 1С, обмен результатами замеров с сообществом, построение отчета.

21.09.2022    15449    1176    Hadgehogs    56    

135

Быстрый фронт в базе размером 6.8 терабайт – наши стандарты при разработке и рефакторинге запросов

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

От быстродействия запросов, которые обращаются к крупным таблицам, напрямую зависит скорость работы всей базы в целом. Артем Кузнецов, тимлид команды 1С в компании ООО «Финтех решения» на конференции Infostart Event 2021 Moscow Premiere рассказал, как оптимизировать производительность при поддержке больших систем. Показал, на что следует обращать внимание при код-ревью запросов, как оптимизировать RLS, виртуальные таблицы, индексы и условия, и как доработка архитектуры решения может ускорить работу базы.

29.08.2022    7455    Chernazem    44    

114

Шпаргалка по функциям АСИНХ

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

При знакомстве с новой механикой работы с асинхронностью (обещание, ждать и асинх) делал пометки, которыми и хочу поделиться. Ничего сверхъестественного в них нет, просто небольшие примеры и некоторые всплывшие нюансы использования.

29.07.2022    25828    zeltyr    19    

174

Производительный режим работы RLS

HighLoad оптимизация Роли и права Платформа 1С v8.3 8.3.14 8.3.6 8.3.8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х Бесплатно (free)

Функционал подсистемы УправлениеДоступом позволяет работать с RLS в двух режимах: стандартном и производительном. Каждый из режимов имеет свои преимущества и недостатки относительно другого. Основные из них будут рассмотрены в данном материале.

14.06.2022    12591    Neti    7    

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

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

В толстом вообще нельзя "физически" разделить, где что исполняется. А если файловая база - так и вообще вся база тянется клиенту на комп.
Во вложении - пример, который показывает, как выполнить одну и ту же функцию на клиенте или на сервере. также можно замерить оверхэд на вызов сервера с контекстом или без него.
было бы описание объектов "там и там" и разбор в статье - было бы что обсуждать. А так - получается, кто что увидит, или хочет увидеть - то и увидит.
Те присловутые "запросы в цикле", если их "условно невозможно" было перенести в один запрос - то ускорялись на пару ~0,1 секунды на итерацию, если перенести место выполнения целиком на сервер.
это проблема УФ, а не клиент-серверной архитектуры, которой, считаю, у 1С нет, не было, и уже не будет.
"Ускорение" в 0,1 сек - это те же потери на "переговоры" 1с-клиента и 1с-сервера ("...Ведь каждый переход на сервер - это дополнительные расходы, для версии 8.2 это примерно от 0,02 секунды для вызова без контекста и от 0,08, причем сильно зависит от размера того самого контекста.")
А не "перенос" функционала с клиента на сервер и обратно. Т.к. в одном случае запрос начинается на "клиенте" (типа клиент, потому и в скобках), и непосредственно выполняется на сервере, а во втором - непосредственно начинается на сервере, и выполняется на сервере. И где тут "разделение на клиента и сервер"?
6. Fragster 1130 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 134 18.06.14 09:49 Сейчас в теме
(6)
что место выполнения кода прекрасно контролируется директивами &НаСервере и т.п.

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

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

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

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

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