Лично мне — сначала было неудобно. Но когда немного покрутил-повертел, понял, что этот инструмент, на самом деле, весьма гибкий, и позволяет планировать моменты перехода на сервер более прозрачно, чтоли. Ведь каждый переход на сервер — это дополнительные расходы, для версии 8.2 это примерно от 0,02 секунды для вызова без контекста и от 0,08, причем сильно зависит от размера того самого контекста.
Это как бы заставляет писать более «модульные» и менее зависимые функции
Во вложении — пример, который показывает, как выполнить одну и ту же функцию на клиенте или на сервере. также можно замерить оверхэд на вызов сервера с контекстом или без него. А также демонстрируется подход, который я использовал в многопоточном тесте производительности — когда в тонком клиенте код, который не может выполняться в тонком клиенте — выполняется на сервере, а в толстом — когда доступна модификация данных и куча всяких интересных объектов — этот же код выполняется на клиенте.
Отследить момент перехода на сервер (кстати, верно и для управляемого и для обычного приложения, которое может начать «тупить» при переходе с фалойого варианта на клиент-серверный — одна из (не основных, но все-же) причин ухудшения производительности) можно в замере производительности 1с — это последняя колонка, т.е. если в строке нарисован «клиент» и «стрелочка перехода» — это это и есть переход на сервер, если таких вызовов много — то суммарно может накопиться достаточно ощутимое время задержек. Те присловутые «запросы в цикле», если их «условно невозможно» было перенести в один запрос — то ускорялись на пару ~0,1 секунды на итерацию, если перенести место выполнения целиком на сервер.
Кстати, если внимательно посомтреть на замер производительности, то можно заметить, что строки, которые выполнялись и на клиенте и на сервере — присутствуют в замере дважды 🙂
Статья не расчитана на «гуру» управляемых форм, так что сильно не пинайте, если для вас ничего нового не нашлось.
Стал переводить разработку на 8.3.3 со всеми прелестями пересмотра кода на клиент-серверный вариант, и даже как-то втянулся) Все таки есть что-то в этом, писать код считая сколько ты можешь потерять каждый раз вызывая сервер, и соответственно оптимизировать алгоритмы и структуру программы.
Жаль, что мало в информации в самой статье. Лучше бы примеры из приложенной обработки (код) перетянуть в саму статью, и расписать подробно, почему это делается так, а это — по-другому.
(2) mikhailovaew, там всей обработки 97 строк, включая пустые
А кто-нибудь знает, как избавиться от процедуры «УходимНаСервер» при «автоматическом» выборе места выполнения?
Ага, особенно и там и там можно выполнить самые ресурсоемкие операции — запросы к базе.
В толстом вообще нельзя «физически» разделить, где что исполняется. А если файловая база — так и вообще вся база тянется клиенту на комп.
было бы описание объектов «там и там» и разбор в статье — было бы что обсуждать. А так — получается, кто что увидит, или хочет увидеть — то и увидит.
это проблема УФ, а не клиент-серверной архитектуры, которой, считаю, у 1С нет, не было, и уже не будет.
«Ускорение» в 0,1 сек — это те же потери на «переговоры» 1с-клиента и 1с-сервера («…Ведь каждый переход на сервер — это дополнительные расходы, для версии 8.2 это примерно от 0,02 секунды для вызова без контекста и от 0,08, причем сильно зависит от размера того самого контекста.»)
А не «перенос» функционала с клиента на сервер и обратно. Т.к. в одном случае запрос начинается на «клиенте» (типа клиент, потому и в скобках), и непосредственно выполняется на сервере, а во втором — непосредственно начинается на сервере, и выполняется на сервере. И где тут «разделение на клиента и сервер»?
(6)
Нет, вы мне покажите, как выполнить код НаКлиенте, если в 1С заложено — только НаСервере. И наоборот.
А то, что описываете — это не разделение Клиент-Сервер, а разнесение выполнения инструкций внутри платформы. Что можно было сделать в «невидимом» режиме полностью автоматически, безо всяких «НаКлиенте» «НаСервере».
Так как роли они практически никакой не играют.
Ну так а ваша заслуга, как программиста, какая в этом процессе «разделения»?
(7) AlexO, в платформе заложено, что какие-либо методы доступны: в толстом клиенте, в тонком клиенте или на сервере (условно). Если выбор есть — выбирайте, что вам больше нравится (например арифметические операции для тонкого клиента). Если выбора нет (тонкий клиент и нужно получить данные из базы) — контролируйте количество (серверные вызовы в цикле против цикла в одном серверном вызове) и моменты переходов (переход на сервере, например, в обработке ожидания (при необходимости с использованием фонового задания) при необходимости получения данных например в момент прокрутки списка).
(8)
Выбора нет в практически во всех случаях, а выбор «сложить на клиенте или на сервере» — надеюсь, понятно, что это вообще не тема.
И уж тем более — не для клиент-сервера. Это который настоящий.
Как я могу тут что-либо контролировать, если это определяеться алгоритмом? Если мне надо цикл на форме — покой он мне нужен на сервере, если в итоге я получу на форме не результат каждой итерации, а конечный итог?
Прокрутка списка или визуализация чего-либо — слабое место 1С от начала, без привязки к УФ или ОФ. И думать об этом приходится хоть в клиенте, хоть файловой базе.
Этот инструмент не несет ничего гибкого.
Никакого практического ускорения я не замечал на проектах.
Кучу ненужного кода замечаю очень хорошо.
Автор статьи неявно предполагает «тупизну» 1С ников, пишущих запросы в цикле и тупизну разработчиков платформы, не в состоянии оптимизировать автоматически клиент серверные вызовы и использования кэша.