Size: a a a

WebAssembly — русскоговорящее сообщество

2018 December 19

JD

John Doe in WebAssembly — русскоговорящее сообщество
Roman Sharkov
эксперементирую с генерацией бин. протокола на подобии protobuf
Вот можешь моё посмотреть. https://github.com/reklatsmasters/binary-data
источник

RS

Roman Sharkov in WebAssembly — русскоговорящее сообщество
тут суть вот в чём: видимо с бинаркой в JS работать менее выгодно чем с JSON'ом, я пытаюсь доказать обратное, но пока безуспешно
источник

RS

Roman Sharkov in WebAssembly — русскоговорящее сообщество
вернее, успех есть, но только в хроме, да и то не уверен что оптимальный
источник

JD

John Doe in WebAssembly — русскоговорящее сообщество
Ещё можно с этим сравнить. https://github.com/mafintosh/turbo-json-parse
источник

RS

Roman Sharkov in WebAssembly — русскоговорящее сообщество
я правильно понимаю что нам придётся платить дорогую таможню между мирами JS и WASM?

WASM ведь не умеет пока-что в вебсокеты, поэтому у нас JS -stream-> WASM -object-> JS
источник

JD

John Doe in WebAssembly — русскоговорящее сообщество
Roman Sharkov
я правильно понимаю что нам придётся платить дорогую таможню между мирами JS и WASM?

WASM ведь не умеет пока-что в вебсокеты, поэтому у нас JS -stream-> WASM -object-> JS
А при чём тут вебсокеты?
источник

RS

Roman Sharkov in WebAssembly — русскоговорящее сообщество
John Doe
А при чём тут вебсокеты?
по ним мы получаем бинарные структуры в первую очередь
источник

JD

John Doe in WebAssembly — русскоговорящее сообщество
Roman Sharkov
по ним мы получаем бинарные структуры в первую очередь
Из васма можно взять память и работать с ней как с обычным arraybuffer.
источник

RS

Roman Sharkov in WebAssembly — русскоговорящее сообщество
John Doe
Из васма можно взять память и работать с ней как с обычным arraybuffer.
да вот... проблема в том что нужна то строка, а кастнуть Uint16Array в string в JS никак низзя

придётся-ж копировать, причён foreach string value 🙃
источник

JD

John Doe in WebAssembly — русскоговорящее сообщество
Roman Sharkov
да вот... проблема в том что нужна то строка, а кастнуть Uint16Array в string в JS никак низзя

придётся-ж копировать, причён foreach string value 🙃
TextDecoder
источник

RS

Roman Sharkov in WebAssembly — русскоговорящее сообщество
John Doe
TextDecoder
жутко медленный, прям жутко
источник

JD

John Doe in WebAssembly — русскоговорящее сообщество
Roman Sharkov
жутко медленный, прям жутко
Ну сорян, конвертить буфер в строки и в ноде дорого. Пробуй в ascii, а не в utf8
источник

RS

Roman Sharkov in WebAssembly — русскоговорящее сообщество
John Doe
TextDecoder
ах да, там UTF-16LE уже не поддерживается, только UTF-8

т.е. пропарсить условный Uint16Array в строку спомощью TextDecoder не выйдет никак
источник

RS

Roman Sharkov in WebAssembly — русскоговорящее сообщество
John Doe
Ну сорян, конвертить буфер в строки и в ноде дорого. Пробуй в ascii, а не в utf8
что ASCII, что UTF8/16 - копировать придётся походу, ведь нельзя просто так строку отдать из WASM'а, мы ведь отдаём массив uint16, а его копируем в строку
источник

RS

Roman Sharkov in WebAssembly — русскоговорящее сообщество
"нельзя так просто взять и создать JS объект в WASM и отдать его JS"

печаль и боль
источник

JD

John Doe in WebAssembly — русскоговорящее сообщество
Roman Sharkov
"нельзя так просто взять и создать JS объект в WASM и отдать его JS"

печаль и боль
Да, нельзя. Я никак не пойму проблемы. У тебя разные типы объектов, arraybuffer и строки. Само сабой arraybuffer  не может содержать строки
источник

JD

John Doe in WebAssembly — русскоговорящее сообщество
Ещё есть метод %typedarray%.join
источник

RS

Roman Sharkov in WebAssembly — русскоговорящее сообщество
John Doe
Да, нельзя. Я никак не пойму проблемы. У тебя разные типы объектов, arraybuffer и строки. Само сабой arraybuffer  не может содержать строки
проблема по сути своей банальна:

есть у нас структура, из:
1х float64
1х uint32
1x uint16
3х uint32 флагов
и 3х unicode строк дин. размера

/* Message structure:
   step  field  len  offset
   64    a      8    0
   32    i      4    8
         n_l    4    12
         e_l    4    16
         s_l    4    20
   16    c      2    24
   8     n      n_l  26
         e      e_l  26+n_l
         s      s_l  26+n_l+e_l
   */

и приходит нам это по сети. Мы это хотим пропарсить и получить object, за кратчайшее время.

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

JD

John Doe in WebAssembly — русскоговорящее сообщество
Roman Sharkov
проблема по сути своей банальна:

есть у нас структура, из:
1х float64
1х uint32
1x uint16
3х uint32 флагов
и 3х unicode строк дин. размера

/* Message structure:
   step  field  len  offset
   64    a      8    0
   32    i      4    8
         n_l    4    12
         e_l    4    16
         s_l    4    20
   16    c      2    24
   8     n      n_l  26
         e      e_l  26+n_l
         s      s_l  26+n_l+e_l
   */

и приходит нам это по сети. Мы это хотим пропарсить и получить object, за кратчайшее время.

JSON для этого подходит так себе, кодировка и декодировка не бесплатные да и схемы у него нет, а тут схема заранее известна, даже декодер можно кодогенерировать под конкретный протокол.
Можно через proxy конвертить буфер в строку по запросу. Можно даже не копировать буферы
источник

RS

Roman Sharkov in WebAssembly — русскоговорящее сообщество
John Doe
Можно через proxy конвертить буфер в строку по запросу. Можно даже не копировать буферы
хмм, поясни плиз, о каком прокси идёт речь?
источник