Имя: Пароль:
1C
1С v8
Сжатие данных на клиенте
,
0 7OH
 
15.12.15
10:43
Добрый день.

Ищу совета - как сжимать данные на клиенте для отправки на сервер.

Пример - читаем на клиенте файл (так как у серверов доступа нет обычно).
Прочитанное надо отправить для анализа и обработки на сервер.
В моём случае размер данных, отправляемых на сервер - 36 Мб - и приходится довольно долго ждать именно передачу параметра.
Хотелось бы сжимать (думаю текстовые данные должны существенно сжаться) и отдавать на сервер.

Пробовал через
хран = Новый ХранилищеЗначения(стрВнутр, Новый СжатиеДанных(9));

Но (как вычитал на этом же форуме) хоть в хэлпе и написано про ХранилищеЗначения, что "Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер)."

при этом стабильно получаем "Тип не определен (ХранилищеЗначения)
(Проверка: Тонкий клиент)"
1 Лефмихалыч
 
15.12.15
10:46
версия платформы?
2 7OH
 
15.12.15
10:49
8.3.4.408
3 Лефмихалыч
 
15.12.15
10:49
у меня в СП написано, про хранилище, что

Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
4 DmitrO
 
15.12.15
10:51
ХранилищеЗначения доступно только на сервере (в СП ошибка).
Предлагаю сжать во временный файл на клиенте объектом ЗаписьZipФайла, передать на сервер как двоичные данные.
5 7OH
 
15.12.15
11:02
(4) как вариант можно попробовать.
Работа с диском может занять много больше времени (запись + упаковка + чтение), чем передача текущего.
Всё таки в памяти работа на порядки быстрее.
Попробую с замером.
6 Лефмихалыч
 
15.12.15
11:06
(5) может просто файлы выкладывать в какое-то место, куда и у сервера, и уклиента есть доступ?
7 RomanYS
 
15.12.15
11:14
(6) Какова вероятность наличия такого места с каналом вдвое быстрее чем клиент-сервер? Имхо почти нулевая
8 Лефмихалыч
 
15.12.15
11:17
(7) голословно, бездоказательно и бессмысленно
9 RomanYS
 
15.12.15
11:22
(8) В (7) вопрос и мое мнение, ничего больше.
Просто я плохо представляю ситуацию, когда канал клиент-сервер меньше чем доступный с обоих сторон канал к третьему ресурсу. Хотя придумать такое можно.
10 7OH
 
15.12.15
11:48
(6) вопрос ставим принципиально - передаём с вёб-клиента на сервер.
Вряд ли у них есть общий доступ.
(4) остался вопрос - как сохранить структуру в файл?
ЗначениеВСтрокуВнутр на сервере тоже не доступно.

Эксперимент провёл ради интереса со сторокой, обработанной на сервере через ЗначениеВСтрокуВнутр.

Передача структуры на сервер и возврат стрВнутр - 106 сек.
Передача на сервер стрВнутр - 6 сек.

Сохранение в файл - 12 сек.
Упаковка файла - 7 сек.
Чтение двоичных данных из зип - 0.1 сек.

Передача на сервер двоичных данных - 0.6 сек.

Итого: 6 сек против 20 сек уже сжатой (106 сек) строки.

То есть через файл не вариант даже с учетом того, что в файл структуру ещё как-то записать надо без сервера.
11 DmitrO
 
15.12.15
14:14
(5)понятно что не писать данные на диск, а получить что-то сжатое в памяти и это сразу передать - будет быстрее.
Но суть в том, что 1С так попросту не умеет.

" и приходится довольно долго ждать именно передачу параметра"
А как передавал, ДвоичнымиДанными?

Надо попробовать через ПоместитьФайлы (НачатьПомещениеФайлов).
12 Лефмихалыч
 
15.12.15
14:16
(10) зачем сохранять структуру в файл? Она легко передается между клиентом и сервером безо всяких там файлов
13 H A D G E H O G s
 
15.12.15
14:24
жесть какая-то
14 H A D G E H O G s
 
15.12.15
14:24
(0) Как передаешь строку на сервер?
15 7OH
 
15.12.15
16:29
(11) (12) Вот именно при передаче структуры с данными (с большим размером) - долго ждёт.
А при поместить файл - он разве его при этом на сервер не будет отправлять ?
(14) - зря я написал "строку" - думал так легче будет.
У меня в структуре загруженные данные с листов XLS - данных много.
16 disla
 
15.12.15
16:55
Я делал ПоместитьВоВременноеХранилище на клиенте, а потом ПолучитьИзВременногоХранилища на сервере, передавал двоичные данные. И наоборот также.
17 disla
 
15.12.15
16:56
данные - zip-файлы, которые пакуюся/распакуются на клиенте
18 DTX 4th
 
15.12.15
17:07
(10) А как ты строку в файл сохранял?
ЗначениеВФайл для помещения структуры в файл
19 7OH
 
15.12.15
17:54
(18) ЗначениеВФайл
Сервер, толстый клиент, внешнее соединение

а поместить надо бы на клиенте
20 H A D G E H O G s
 
15.12.15
18:03
(15) Зряяя.
Код передачи покажи.
21 H A D G E H O G s
 
15.12.15
18:04
(15) "долго ждёт. "

Вооот. Уже ближе.
22 7OH
 
15.12.15
18:45
(20)
&НаКлиенте
Процедура ПроцедураПрочитать()

    //получаем структуру со значениями и информацией о файле EXCEL
    СтруктураФайла = ПрочитатьФайлEXCELВсеЛисты(ИмяФайла);
    
    ОбработатьДанныеНаСервере(СтруктураФайла);
    
КонецПроцедуры

&НаСервере
Процедура ОбработатьДанныеНаСервере(СтруктураФайла)

    //тут со структурой что-то делаем
    //но от момента вызова до момент входа в  процедуру - минута-две, в зависимости от размера файла
    
КонецПроцедуры
23 H A D G E H O G s
 
15.12.15
18:47
Шаг первый:

&НаСервереБезКонтекста
Процедура ОбработатьДанныеНаСервере(Знач СтруктураФайла)

    //тут со структурой что-то делаем

    //но от момента вызова до момент входа в  процедуру - минута-две, в зависимости от размера файла

    
КонецПроцедуры
24 H A D G E H O G s
 
15.12.15
18:48
А по факту у тебя тормоза не на передаче данных, а на сериализации/десериализации.
25 7OH
 
15.12.15
18:55
(24) это и понятно
"Передача на сервер стрВнутр - 6 сек."

самому рисовать преобразователь структуры в строку как-то не очень улыбается.

Под рукой 8.3.6 нету, чтобы проверить как с этим справится JSON (и возможна ли работа с ним на клиенте).
26 H A D G E H O G s
 
15.12.15
18:56
(25) csv ?
27 7OH
 
15.12.15
19:05
(26) XLS к сожалению
28 H A D G E H O G s
 
15.12.15
19:06
(27) Разбери его в csv, строку передай на сервер.
29 H A D G E H O G s
 
15.12.15
19:07
(27) Ну и безконтекстный вызов и передача по значению.
30 Garykom
 
гуру
15.12.15
19:14
да похоже на "сериализации/десериализации" все тормоза, а не "на передаче"
31 H A D G E H O G s
 
15.12.15
19:15
(30) Ты уже написал убийцу ТимВиевера?
32 Garykom
 
гуру
15.12.15
19:29
(31) План уже написал, как и планировал, а что?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший