Параметры сеанса произвольного типа

30.11.10

Разработка - Механизмы платформы 1С

При создании параметра сеанса конфигураци выбор типа ограничен весьма небольшим списком: примитивные типы, ссылочные типы, фиксированные коллекции, системные перечисления, NULL, хранилище значения, уникальный идентификатор, характеристики и описание типов.
Но в версии 8.2 платформы появилась возможность создать параметр сеанса произвольного типа!

Итак.

Как это делается.

Дано: необходимо в некой конфигурации реализовать вычисление времени с точностью до миллисекунды.

Один из способов решения: для вычисления времени с заданной точностью применим ява скрипт.

Инициализацию скрипта опишем в функции:

Функция ПолучитьЯваСкрипт() ЭКСПОРТ

    ЯваСкрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
    ЯваСкрипт.Language = "JavaScript";

    Возврат
ЯваСкрипт;

КонецФункции

Функцию опишем в общем модуле ДополнительныеПараметрыСенаса.

И вот теперь самое главное: у этого модуля установим свойство "Повторное использование возвращаемых значений" в значение "На время сеанса"!

 

Что нам это дает?

Давайте посмотрим на два замера производительности.

Первый замер сделан с использованием непосредственного создания COM-объекта в цикле из 10 тыс. итераций.

Производилось это в функции ВернутьТочноеВремя_Простая():

Функция ВернутьТочноеВремя_Простая() ЭКСПОРТ

   
ЯваСкрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
   
ЯваСкрипт.Language = "JavaScript";

    Возврат
ЯваСкрипт.Eval("new Date().valueOf()");

КонецФункции
// ВернутьТочноеВремя_Простая()

Как видим основное время - 72% - заняло создание нового экземпляра COM-объекта. И это создание происходило 10 тыс. раз!

 

Теперь давайте посмотрим на замеры функции из созданного нами модуля:

Функция ВернутьТочноеВремя() ЭКСПОРТ

   
ЯваСкрипт = ДополнительныеПараметрыСеанса.ПолучитьЯваСкрипт();

    Возврат
ЯваСкрипт.Eval("new Date().valueOf()");

КонецФункции
// ВернутьТочноеВремя()

Как видим здесь расклад уже иной - наиболее затратной операцией явилась операция вычисления точного времени!

Создание же COM-объекта происходило всего лишь один раз при самом первом вызове функции!

Давайте теперь посчитаем выигрыш в скорости - код с кэшированием возвращаемых значений отработал в 45 раз быстрее!

(При тестировании на циклах в 100 тыс. итераций этот показатель был скромнее - 38 раз. Но по времени выполнения эти 38 раз были ощутимы - 17 секунд против 643 секунд!)

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

На этом все!

Удачи!

 

P.S. Утверждение про все виды клиентов основано только на результатах проверки конфигурации со всеми выставленными флагами синтаксического контроля. Реально действие технологии проверялось, увы, только в толстом клиенте. Cry 

P.P.S. Буду признателен всем пользователям портала, которые протестируют данную технологию в других клиентах и сообщат о результатах

 

См. также

Сервисы интеграции без Шины и интеграции

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

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    2563    dsdred    16    

59

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

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

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    5907    dsdred    53    

83

Как готовить и есть массивы

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

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

24.01.2024    5861    YA_418728146    25    

68

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

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

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

11.12.2023    6967    dsdred    36    

113

1С-ная магия

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

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

06.10.2023    19067    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

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

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12774    human_new    27    

76

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

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

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

28.08.2023    9393    YA_418728146    6    

143

Внешние компоненты Native API на языке Rust - Просто!

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

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6528    sebekerga    54    

95
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. tormozit 7142 30.11.10 00:14 Сейчас в теме
Считаю, акцент на параметрах сеанса сделан неверно. ПараметрыСеанса имеют ключевую особенность - они автоматически синхронизируются между клиентским контекстном сеанса и серверным. А в данной статье продемонстрировано свойство неглобального общего модуля "Повторное использование возвращаемых значений".
PowerBoy; +1 Ответить
3. direktorSan 297 30.11.10 09:59 Сейчас в теме
(1)
Говоря об автоматической синхронизации - что Вы имеете в виду?
Поясню вопрос.
Выдержка из ИТС от сентября 2010г.: "В клиент-серверном варианте 1С:Предприятия значения параметров сеанса хранятся на сервере и доступны как с сервера, так и с клиента".
Т.е., как я понимаю, в данном режиме работы обращение к параметрам сеанса = обращению к серверу за значением соответствующего именованного параметра.

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

Т.е. параметр сеанса - это характеристика текущего сеанса работы - будь то на сервере, на толстом клиенте или при внешнем соединении.

А COM-объект, созданный в текущем сеансе работы - разве не может являться такой характеристикой?
И то, что этот COM-объект не виден серверу в клиент-серверном режиме работы, на мой взгляд, нисколько неуменьшает его значимости как некоего локального дополнительного параметра сеанса.

В одном с Вами соглашусь - параметры сеанса это объект метаданных и за их использованием 1С:Предприятие осуществляет повышенный контроль.
Такого контроля в случае использования неглобального модуля, возвращаемые значения функций которого кэшируются на время сеанса, скорее всего просто нет.
5. fomix 33 15.06.12 17:15 Сейчас в теме
(3) Действительно спорное название публикации, т.к. приведенный пример свойства "повторного использования на время сеанса" больше похож на рекурсию... А как в общем влияет это свойство на поведение всего модуля, если кроме подобной функции туда вставить другие процедуры и функции?
2. detec 136 30.11.10 09:57 Сейчас в теме
Ещё можно сохранять COM-объекты во временном хранилище. Тут уже были публикации на эту тему. Пример реализации:

&НаСервере
Функция СоздатьИСохранитьComОбъект(ИмяCOMОбъекта, УИДФормы, ПоИмениФайла = Ложь)

Если ПоИмениФайла Тогда
Обработчик = ПолучитьCOMОбъект(ИмяCOMОбъекта);
Иначе
Обработчик = Новый COMОбъект(ИмяCOMОбъекта);
КонецЕсли;



АдресCOMОбъекта = ПоместитьВоВременноеХранилище(Обработчик, УИДФормы);
Возврат АдресCOMОбъекта;
КонецФункции


На управляемую форму кидаем реквизиты с типом строка, куда записываются адреса сохранённых COM-объектов. И потом мы их функциями дёргаем, например:



&НаСервере
Функция ВернутьРеестр()

Возврат ПолучитьИзВременногоХранилища(АдресРеестра);

КонецФункции // ВернутьРеестр()
4. mailrum2004 1 05.04.12 16:55 Сейчас в теме
Исключать повторные создания COM-объектов - это хороший подход к увеличению производительности.
При измерении времени с помощью ЯваСкрипт.Eval("(new Date()).valueOf()") нужно понимать, что полученные значения идут с шагом 15-16, т.е. точность измерения времени 0.015 - 0.016 секунды.
Оставьте свое сообщение