Имя: Пароль:
1C
 
Как сериализовать структуру в конфу так, чтобы она максимально быстро десериализовывалась?
0 Гений 1С
 
гуру
13.01.22
11:37
Есть настройки формы в виде структуры, я их готовлю на этапе разработки (тиражное решение).
В продакшне хочу быстро эту структуру восстановить из макета в конфигурации.
Вопрос - как максимально быстро это сделать.
Так то понятно, что можно использовать текстовый JSON или даже ЗначениеВСтрокуВнутр, но хочется чего-нибудь бинарного.
1 acht
 
13.01.22
11:43
ХранилищеЗначений, гггеня.
2 H A D G E H O G s
 
13.01.22
11:46
Никак
3 fisher
 
13.01.22
11:48
Ума не приложу, где критична "максимально быстрая десериализация преднастроек".
ИМХО, как не положи - скорость будет достаточна. Поэтому ложить надо "как удобнее", а не "как быстрее".
(2) Ему не сохранять. Ему читать преднастройки.
4 Галахад
 
гуру
13.01.22
11:54
"хочется чего-нибудь бинарного" - секреты что-ли?
5 H A D G E H O G s
 
13.01.22
11:56
Хранилище значений - это та же ЗначениеВСтрокуВнутр
Получать из макета гораздо дольше, чем из константы или РС. Поэтому лучше пытаться вытащить из константы, если в ней пусто - из макета, и закешировать в константу. Если планируется обновлять - при обновлении затираем константу. А лучше webservice на Goo, конечно же. Конечно же WebService. Да.
6 Гений 1С
 
гуру
13.01.22
11:57
(3) ну хорошо, в структуре я храню добавляемые в форму элементы (вложенная форма). Мне нужно чтобы вложенная форма максимально быстро отрисовывалась при открытии формы.
7 fisher
 
13.01.22
11:58
(5) Вангую, что "тиражное решение" представляет собой обработку.
8 acht
 
13.01.22
11:59
(5) > это та же ЗначениеВСтрокуВнутр
Зато сжатая
9 Гений 1С
 
гуру
13.01.22
11:59
(1) (5) Я не могу хранить значение типа ХранилищеЗначения в базе, могу хранить только бинарный файл в макете, но как из него структуру получить, хз...
10 Гений 1С
 
гуру
13.01.22
12:00
(7) расширение.
11 pechkin
 
13.01.22
12:00
Для однократной загрузки вообще не важно
12 Гений 1С
 
гуру
13.01.22
12:00
(9) т.е. не в базе а в CFE-файле, мне надо хранить эту структуру в файле расширения.
13 Гений 1С
 
гуру
13.01.22
12:01
(11) а с чего ты взял что у меня однократная загрузка? Хотя может там десериализация из ЗначениеВСтрокуВнутр и быстро происходит, хз.
14 acht
 
13.01.22
12:01
Хтоническая хрень из Коллеги, мне поручили сделать вложенную форму, есть опыт? пытается вырваться наружу
15 Гений 1С
 
гуру
13.01.22
12:01
(4) Секреты - это крипта.
(14) она уже давно реализована, сейчас речь об ее ускорении.
16 pechkin
 
13.01.22
12:02
(6) ты уверен что именно на чтении макета основной затык?
17 H A D G E H O G s
 
13.01.22
12:03
(14)бля. Жгите ее вогнемэтами!
18 fisher
 
13.01.22
12:03
Оптимизировать ненаписанный код - это сильно.
Ты напиши сначала и замеры сделай, если не понравится.
"Доставание" переписать там если что - будет раз плюнуть.
19 fisher
 
13.01.22
12:06
(15) Т.е. замер производительности показывает что тормоза на "доставании"? Ну, покажи результаты замеров, что ли. Интересно.
20 Гений 1С
 
гуру
13.01.22
12:27
(19) ок, проверю. Пока что у меня кодом форма разбирается, это долго. Посмотрю, если сохранить разбор в конфигурации, будет ли долго.
21 FIXXXL
 
13.01.22
12:28
22 Гений 1С
 
гуру
13.01.22
12:47
(21) Это каким боком сюда?
23 FIXXXL
 
13.01.22
13:16
(22) кэширование, что бы не читать макет каждый раз
24 Гений 1С
 
гуру
13.01.22
13:47
(23) это понятно, но и самый первый раз занимает какое-то время. можно конечно его в фоне дернуть, хз
25 Гений 1С
 
гуру
13.01.22
13:59
Хотя семен семеныч, можно хранилище же сериализовать в XML: v8: Сериализация Хранилища Значений
Тогда в текстовый макет закидываю XML с сериализованным хранилищем и из него получаю значение хранилища, из него - искомую структуру. Бинго!
Можно и не текстовый макет, а бинарный файл XML, но не хочу издеваться над разработчиками, чтобы они лишний раз в файл скидывали XML
26 Гений 1С
 
гуру
14.01.22
16:43
возможна сериализация только ЗначениеВСтрокуВнутр, т.к. все сериализации XML ругаются на серверный тип 'ВертикальноеПоложениеЭлемента' (ну и на другие подобные).

Десериализация в принципе быстрая из ЗначениеВСтрокуВнутр, занимает лишь 3% от времени отрисовки вложенной формы.

И все же чую, что десериализация неоптимальная, хотелось бы сразу струтуру получать в приложении. Но думаю, что тут уж ничего не сделаешь.

Как вариант можно еще структуру в хранилище значения запихнуть и уже из него десериализовать, не знаю, надо потестить, насколько это быстро. Потестирую - напишу
27 mistеr
 
14.01.22
18:15
(26) Вспомни молодость платформы, все хранится в табличном виде в табличных макетах.

Надеюсь, ты не будешь спорить, что табдок читается достаточно быстро?
28 VladZ
 
14.01.22
18:37
(0) Я таки не понял, зачем это нужно.
29 Кирпич
 
16.01.22
09:59
(28) Мультфильмы наверное делает. Он же у нас, последнее время, творчеством занимается.
30 Кирпич
 
16.01.22
10:02
про кнопочку Сформировать и волшебника Уф.
31 Гений 1С
 
гуру
16.01.22
10:02
(28) это нужно для вложенных форм, поищи в теме, там прописано зачем нужно иметь возможность быстро восстановить структуру
32 acht
 
16.01.22
10:12
Кстати, структура управляемой формы может быть изменена пользователем. Ну, это так, для тех кто не знает.
33 Гений 1С
 
гуру
16.01.22
12:46
(32) Это вы к чему, КЭП?
34 pechkin
 
16.01.22
12:50
(32) что такое структура формы?
35 SleepyHead
 
гуру
16.01.22
12:57
(34) Наверное, имеется ввиду перенос элементов управления в другие группы/страницы, или что-то подобное.
36 Гений 1С
 
гуру
17.01.22
11:14
(34) (35) список элементов, команд, реквизитов вложенной формы, которые я вставляю в другую форму, храню всё это добро в виде структуры.

Попробовал использовать ХранилищеЗначения, но там тоже не сериализуется из-за интерфейсных элементов, так что оставил ЗначениеВСтрокуВнутр:
Переданное значение не может быть помещено в ХранилищеЗначения, поскольку не сериализуется или содержит вложенный несериализуемый элемент
37 pechkin
 
17.01.22
11:23
чтоб быстрее работало - сохраняй и восстанавливай только те свойства, что отличаются от дефолтных
38 pechkin
 
17.01.22
11:25
для всяких вертикальных положений можно строковое представление хранить и восстанавливать
ВертикальноеПоложениеЭлемента["Авто"]
39 Гений 1С
 
гуру
17.01.22
12:08
(38) это дольше, чем ЗначениеВСтрокуВнутр при сериализации. Вместо одной команды будет анализ содержимого.
40 Гений 1С
 
гуру
17.01.22
12:08
(37) там нет такого, там нужно все элементы восстановить.
41 Гений 1С
 
гуру
21.01.22
08:35
В общем, по теме докладываю, что убрал из разбора те элементы, которые создаются платформой автоматически, скорость отрисовки формы увеличилась в 2 раза, раньше она на попытках-исключение работала, сейчас убрал все попытки, и так хорошо без ошибок создает элементы.

При этом конечно, десериализация занимает немного времени. жаль, конечно, что нельзя сразу бинарник в структуру заколошматить, но что поделать, это 1С а не С
Закон Брукера: Даже маленькая практика стоит большой теории.