URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 113356
[ Назад ]

Исходное сообщение
"Порт библиотеки сжатия Zstd на JavaScript"

Отправлено opennews , 21-Янв-18 19:24 
Опубликован (https://github.com/yoshihitoh/zstd-codec) JavaScript-порт библиотеки для архивации данных Zstd (https://www.opennet.ru/opennews/art.shtml?num=45058), обеспечивающей одно из лучших соотношений уровня сжатия к производительности. Порт сделан на основе оригинального кодека Zstandard (http://facebook.github.io/zstd/), преобразованного в  JavaScript при помощи компилятора Emscripten. Порт поддерживает использование словарей и может применяться в Node.js и в приложениях, выполняемых на стороне браузера.


URL: https://github.com/yoshihitoh/zstd-codec
Новость: http://www.opennet.ru/opennews/art.shtml?num=47941


Содержание

Сообщения в этом обсуждении
"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено фывфыв , 21-Янв-18 19:24 
> Порт библиотеки сжатия Zstd на JavaScript
> пи помощи компилятора Emscripten

Может уже хватит это портом называть? Тогда любую сборку программы можно назвать портом для arm, amd64, GNU/Linux и т.д. -_-


"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено Оболтус , 21-Янв-18 19:28 
> Может уже хватит это портом называть?

Ну если код потом обработали и привели в читаемый вид, то почему бы и нет?


"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено Xasd , 21-Янв-18 21:22 
> Ну если код потом обработали и привели в читаемый вид, то почему бы и нет?

кого привели в читаьельвый вид? бинарник?


"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено pavlinux , 21-Янв-18 23:09 
Где бинарник? https://github.com/yoshihitoh/zstd-codec/blob/develop/js/lib...

"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено irinat , 22-Янв-18 01:15 
https://github.com/yoshihitoh/zstd-codec/blob/develop/js/lib...

"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено pavlinux , 22-Янв-18 05:14 
> https://github.com/yoshihitoh/zstd-codec/blob/develop/js/lib...

Ещё раз: где бинарник?
...


var Module = function(Module) {
  Module = Module || {};

var Module;if(!Module)Module=typeof Module !== 'undefined' ? Module : {};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module["ENVIRONMENT"]){if(Module["ENVIRONMENT"]==="WEB"){ENVIRONMENT_IS_WEB=true}else if(Module["ENVIRONMENT"]==="WORKER"){ENVIRONMENT_IS_WORKER=true}else if(Module["ENVIRONMENT"]==="NODE"){ENVIRONMENT_IS_NODE=true}else if(Module["ENVIRONMENT"]==="SHELL"){ENVIRONMENT_IS_SHELL=true}else{throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.")}}else{ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof
require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_
....


"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено Аноним , 22-Янв-18 09:01 
> Ещё раз: где бинарник?

У вебмакак и бинарники под стать:


var ASM_CONSTS=[];STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+20192;__ATINIT__.push({func:(function(){__GLOBAL__sub_I_zstd_binding_cc()})},{func:(function(){__GLOBAL__sub_I_bind_cpp()})});memoryInitializer="data:application/octet-stream;base64,lB8AAIokAACUHwAAKyUAALwfAACdJAAAEAAAAAAAAACUHwAAbSUAALwfAACwJQAAEAAAAAAAAACUHwAANyYAALwfAABzJgAAEAAAAAAAAACUHwAA+CYAALwfAAAyJwAAEAAAAAAAAACUHwAAwicAALwfAAAHKAAAEAAAAAAAAACUHwAAkCgAALwfAADOKAAAEAAAAAAAAACUHwAAVSkAAJQfAAD7KQAAOCAAAM8pAAAAAAAAAQAAAKgAAAAAAAAAOCAAAKspAAAAAAAAAQAAALAAAAAAAAAAACAAACAqAAAAAAAAyAAAAAAgAABFKgAAAQAAAMgAAACUHwAAoyoAALwfAACNKgAAAAEAAAAAAAC8HwAAvSoAAGgDAAAAAAAAACAAANkqAAAAAAAACAEAAAAgAADwKgAAAQAAAAgBAACUHwAAICsAALwfAAAIKwAASAEAAAAAAAAAIAAAOisAAAAAAABQAQAAACAAAFMrAAABAAAAUAEAAJQfAABtKwAAACAAAHgrAAAAAAAAgAEAAAAgAACEKwAAAQAAAIABAACUHwAAoCsAAAAgAAC8KwAAAAAAAKgBAAAAIAAA2SsAAAEAAACoAQAAlB8AAPcrAAAAIAAAFSwAAAAAAADQAQAAACAAADQsAAABAAAA0AEAALwfAAB5LAAAIAIAAAAAAAAAIAAAVCwAAAAAAAAYAgAAHCAAAGcsAACUHwAAvywAALwfAAATLQAAUAIAAAAAAAAAIAAA7iwAAAAAAABIAgAAHCAAAAEtAACUHwAAWS0AALwfAACvLQAAgAIAAAAAAAAAIAAAiC0AAAAAAAB4AgAAHCAAAJwtAACUHwAA9i0AALwfAABNLgAAsAIAAAAAAAAAIAAAJi4AAAAAAACoAgAAHCAAADouAACUHwAAlC4AADggAAA+NAAAAAAAAAEAAABgAwAAAAAAADggAAD/MwAAAAAAAAEAAABgAwAAAAAAADggAACaMwAAAAAAAAEAAABgAwAAAAAAAJQfAAB7MwAAlB8AAFwzAACUHwAAPTMAAJQfAAAeMwAAlB8AAP8yAACUHwAA4DIAAJQfAADBMgAAlB8AAKIyAACUHwAAgzIAAJQfAABkMgAAlB8AAEUyAACUHwAAJjIAAJQfAADZMwAAlB8AAIo+AAC8HwAA6j4AAIADAAAAAAAAvB8AAJc+AACQAwAAAAAAAJQfAAC4PgAAvB8AAMU+AABwAwAAAAAAALwfAAD

Все понятно, да? Не говоря о том что этот код весит 1.35 мегабайта, йо :)


"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено X4asd , 22-Янв-18 13:18 
самый прикол ещё и в том что это лежит в РЕПОЗИТОРИИ ИСХОДНОГО КОДА..

ЛОЛ!

js-макака наверно думает, ну раз расширение js значит это исходник :-D

стыдоба-то-какая 😱


"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено pavlinux , 22-Янв-18 23:02 
Амномном незнает что такое stream;base64, ? Ты как опеннет попал, по рассылке в порночатике?  

"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено irinat , 22-Янв-18 14:36 
>> https://github.com/yoshihitoh/zstd-codec/blob/develop/js/lib...
> Ещё раз: где бинарник?

Ну вот тут, например:


aA(g,h,10);k=qy(17994)|0;n=a[g+11>>0]|0;if((k|0)==((n<<24>>24<0?c[g+4>>2]|0:n&255)|0))q=(bA(g,17994,k)|0)==0;else q=0;Lz(g);if(q){JB(g);k=e+4|0;n=c[k>>2]|0;if(n>>>0<(c[e+8>>2]|0)>>>0){kA(n,g);c[k>>2]=(c[k>>2]|0)+24}else lA(e,g);uz(g)}else{c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];k=0;while(1){if((k|0)==3)break;c[h+(k<<2)>>2]=0;k=k+1|0}iA(g,i);k=e+4|0;n=c[k>>2]|0;if(n>>>0<(c[e+8>>2]|0)>>>0){kA(n,g);c[k>>2]=(c[k>>2]|0)+24}else lA(e,g);uz(g);Lz(i)}Lz(h);o=j+m|0}else o=b}else o=b;while(0);l=f;return o|0}function hA(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+16|0;g=f;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;h=0;while(1){if((h|0)==3)break;c[b+(h<<2)>>2]=0;h=h+1|0}h=d+11|0;i=a[h>>0]|0;j=i<<24>>24<0?c[d+4>>2]|0:i&255;i=qy(e)|0;k=(a[h>>0]|0)<0?c[d>>2]|0:d;d=j+i|0;if(d>>>0>4294967279)xy(b);if(d>>>0<11){a[b+11>>0]=j;m=b}else{h=d+16&-16;d=Iz(h)|0;c[b>>2]=d;c[b+8>>2]=h|-2147483648;c[b+4>>2]=j;m=d}ry(m,k,j)|0;a[g>>0]=0;py(m+j|0,g);xz(b,e,i)|0;l=f;return}function iA(a,b){a=a|0;b=b|0;var d=0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];d=0;while(1){if((d|0)==3)break;c[b+(d<<2)>>2]=0;d=d+1|0}d=a+12|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[d+(a<<2)>>2]=0;a=a+1|0}return}function jA(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+16|0;f=e;g=b+11|0;if((a[g>>0]|0)<0){h=c[b>>2]|0;a[f>>0]=0;py(h,f);c[b+4>>2]=0}else{a[f>>0]=0;py(b,f);a[g>>0]=0}sA(b);c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];g=0;while(1){if((g|0)==3)break;c[d+(g<<2)>>2]=0;g=g+1|0}g=b+12|0;h=d+12|0;d=g+11|0;if((a[d>>0]|0)<0){i=c[g>>2]|0;a[f>>0]=0;py(i,f);c[b+16>>2]=0}else{a[f>>0]=0;py(g,f);a[d>>0]=0}sA(g);c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];g=0;while(1){if((g|0)==3)break;c[h+(g<<2)>>2]=0;g=g+1|0}l=e;return}function kA(a,b){a=a|0;b=b|0;var d=0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];d=0;while(1){if((d|0)==3)break;c[b+(d<<2)>>2]=0;d=d+1|0}d=a+12|0;a=b+12|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];d=0;while(1){if((d|0)==3)break;c[a+(d<<2)>>2]=0;d=d+1|0}return}function lA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;e=d;f=a+4|0;g=(((c[f>>2]|0)-(c[a>>2]|0)|0)/24|0)+1|0;h=sB(a)|0;if(h>>>0<g>>>0)ty(a);else{i=c[a>>2]|0;j=((c[a+8>>2]|0)-i|0)/24|0;k=j<<1;tB(e,j>>>0<h>>>1>>>0?(k>>>0<g>>>0?g:k):h,((c[f>>2]|0)-i|0)/24|0,a+12|0);i=e+8|0;f=c[i>>2]|0;kA(f,b)

Ещё вот тут немного:


memoryInitializer="data:application/octet-stream;base64,lB8AAIokAACUHwAAKyUAALwfAACdJAAAEAAAAAAAAACUHwAAbSUAALwfAACwJQAAEAAAAAAAAACUHw\
AANyYAALwfAABzJgAAEAAAAAAAAACUHwAA+CYAALwfAAAyJwAAEAAAAAAAAACUHwAAwicAALwfAAAHKAAAEAA\
AAAAAAACUHwAAkCgAALwfAADOKAAAEAAAAAAAAACUHwAAVSkAAJQfAAD7KQAAOCAAAM8pAAAAAAAAAQAAAKgA\
AAAAAAAAOCAAAKspAAAAAAAAAQAAALAAAAAAAAAAACAAACAqAAAAAAAAyAAAAAAgAABFKgAAAQAAAMgAAACUH\
wAAoyoAALwfAACNKgAAAAEAAAAAAAC8HwAAvSoAAGgDAAAAAAAAACAAANkqAAAAAAAACAEAAAAgAADwKgAAAQ\
AAAAgBAACUHwAAICsAALwfAAAIKwAASAEAAAAAAAAAIAAAOisAAAAAAABQAQAAACAAAFMrAAABAAAAUAEAAJQ\
fAABtKwAAACAAAHgrAAAAAAAAgAEAAAAgAACEKwAAAQAAAIABAACUHwAAoCsAAAAgAAC8KwAAAAAAAKgBAAAA\
IAAA2SsAAAEAAACoAQAAlB8AAPcrAAAAIAAAFSwAAAAAAADQAQAAACAAADQsAAABAAAA0AEAALwfAAB5LAAAI\
AIAAAAAAAAAIAAAVCwAAAAAAAAYAgAAHCAAAGcsAACUHwAAvywAALwfAAATLQAAUAIAAAAAAAAAIAAA7iwAAA\
AAAABIAgAAHCAAAAEtAACUHwAAWS0AALwfAACvLQAAgAIAAAAAAAAAIAAAiC0AAAAAAAB4AgAAHCAAAJwtAAC\
UHwAA9i0AALwfAABNLgAAsAIAAAAAAAAAIAAAJi4AAAAAAACoAgAAHCAAADouAACUHwAAlC4AADggAAA+NAAA\
AAAAAAEAAABgAwAAAAAAADggAAD/MwAAAAAAAAEAAABgAwAAAAAAADggAACaMwAAAAAAAAEAAABgAwAAAAAAA\
JQfAAB7MwAAlB8AAFwzAACUHwAAPTMAAJQfAAAeMwAAlB8AAP8yAACUHwAA4DIAAJQfAADBMgAAlB8AAKIyAA\
CUHwAAgzIAAJQfAABkMgAAlB8AAEUyAACUHwAAJjIAAJQfAADZMwAAlB8AAIo+AAC8HwAA6j4AAIADAAAAAAA\
AvB8AAJc+AACQAwAAAAAAAJQfAAC4PgAAvB8AAMU+AABwAwAAAAAAALwfAAD/PwAAgAMAAAAAAAC8HwAA2z8A\
AKgDAAAAAAAAvB8AACFAAACAAwAAAAAAAOQfAABJQAAA5B8AAEtAAADkHwAATkAAAOQfAABQQAAA5B8AAFJAA\
ADkHwAAVEAAAOQfAABWQAAA5B8AAFhAAADkHwAAWkAAAOQfAABcQAAA5B8AANdFAADkHwAAXkAAAOQfAABgQA\
AA5B8AAGJAAAC8HwAAZEAAAIADAAAAAAAAvB8AAIlAAABwAwAAAAAAACAEAAAIAAAAIAQAACAEAADYAwAACAA\
AAAgAAAAgBAAAIAQAAAgAAADYAwAACAAAAAAAAAAYAAAAAQAAAAIAAAABAAAAAQAAAAMAAAAEAAAAAgAAAAEA\
AAACAAAAAAAAADAAAAABAAAABQAAAAMAAAADAAAABgAAAAcAAAAEAAAAAgAAAAQAAAAAAAAASAAAAAEAAAAIA\

Этот код не для чтения человеком, он сгенерирован. Понять его — задача сложнее полной ручной реализации на Javascript с нуля.


"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено pavlinux , 22-Янв-18 23:05 
> Этот код не для чтения человеком, он сгенерирован.

Бедненькое поклонение копипастеров в расстройствах :D  
Скажи спасибо, что не криптованный блоб.
Хотя и такие распердоливали, запускали и еще доку к ним писали.


"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено Stax , 23-Янв-18 00:26 
Я вот могу сказать, что вы никогда не открывали исходный код - заботливно написанный руками на C! - какого-либо актуального компрессора или аудио-видео кодека. Потому что там ровно то же самое. Плотно упакованный заинлайненый код, как в первом примере, и большие таблицы безумных констант, как во втором. Отдельно - обычно вместе со статьей, которая изначально описывала алгоритм - иногда могли дать программу, которая эту самую таблицу констант, которая потом использовалась при сжатии создавала. Иногда могли не дать, просто сказать, что вот так-то и так-то начали, потом эвристику применили, потом руками потюнили и получили вот такую большой массив констант, используйте для такого-то преобразования на таком-то шаге (например).

"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено irinat , 23-Янв-18 00:36 
> Я вот могу сказать, что вы никогда не открывали исходный код -
> заботливно написанный руками на C! - какого-либо актуального компрессора или аудио-видео

Некоторые открывал. Но ещё я заглядывал в файлы, которые Emscripten генерирует.


"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено Stax , 23-Янв-18 20:54 
Да, я ошибся - сорри. Массив MemoryInitialization чисто emscripten'овская штука.

"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено Аноним , 22-Янв-18 08:58 
> Ну если код потом обработали и привели в читаемый вид, то почему бы и нет?

После emscripten и минификации код не сильно отличается от hexspeak'а.


"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено Crazy Alex , 21-Янв-18 20:01 
Там таки не просто сборка. Там обычно некоторые правки, написание обвязки и т.п. В общем, именно портирование. Другое дело, что писали бы не "на javascript", а "на asm.js" - было бы понятнее

"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено Аноним , 21-Янв-18 20:04 
Отлично, JavaScript развивается. А хейтеры до сих пор "вспаменают" npm leftpad.

"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено Аноним , 21-Янв-18 20:07 
давно ждал, пока использовал lz4, но в нём нет словарей, сейчас буду переходить на zstd :)

"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено Led , 21-Янв-18 22:52 
уже есть

"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено Аноним84701 , 21-Янв-18 20:16 
> JavaScript-порт библиотек ... обеспечивающего одно из лучших соотношений уровня сжатия к производительности
> JavaScript-порт
> производительности
> JavaScript

https://github.com/yoshihitoh/zstd-codec
> TODO
> performance test

И как, соотношение просело всего в 2 раза? Или до 5-8 вообще "не считается!™" ?


"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено Аноним , 21-Янв-18 20:32 
производительности тебе хватит чтобы сжимать данные на браузере и отправлять их по вебсокету на сервер, экономя тем самым трафик клиентов, а там уже как угодно, можешь на ноде обрабатывать, можешь на С сервер написать.

"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено ffirefox , 21-Янв-18 21:14 
А батарейку при этом сильно кушает?


"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено Аноним , 21-Янв-18 21:27 
asmjs/webasm или SIMD.js ?

"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено Аноним , 22-Янв-18 00:14 
А это проблема клиента, макак она не волнует.

"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено Аноним , 21-Янв-18 23:32 
Content-Encoding: gzip

"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено Аноним , 21-Янв-18 21:10 
Зачем это, если JS толком ничего полезного не даст?

"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено Аноним , 21-Янв-18 21:37 
Если на стороне клиента, то полезно для соединения через EDGE. А так все форматы медиа и документов уже ужатые.

"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено Аноним , 22-Янв-18 16:10 
Тем что быстрее батарею посадит?

"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено Аноним , 22-Янв-18 19:09 
А браузер не пожмёт? (если только это не использовать для тех, которые не поддерживают).
А вообще имхо, что этим можно жать/расжать какие-нибудь ресурсы, хранящиеся на стороне, игры например, или ещё чего. Можно в Electron засунуть, гагага.

"Порт библиотеки сжатия Zstd на JavaScript"
Отправлено Аноним , 22-Янв-18 10:29 
Предполагаю, скорость - адская.