Обновить
6
0
Константин Тимошенко@RegIon

Html5 gamedev, PixiJS, AwayFL

Отправить сообщение

Сначала пусть нормально поставят базовые станции, так как я нахожусь в километре от школы довольно крупного посёлка (50к+ население ) и у меня вообще нету связи ни одного оператора. Приходится искать точку где можно получить СМС, чтобы был 4G - нужно выйти за пределы участка и вдоль дороги бегать. Использую как раз голосовые вызовы через интернет, благо есть аж 2 оператора с ВОЛС

Обычным телефоном не пользуюсь ввиду многих факторов: отсутствие видеозвонков, дофига спамеров и тупо дороже.

Yota, тариф выкрутили аж на 100 рублей в июле, а связи 90% времени отсутствует.

Мне сейчас ради этого бустеры ставить? Деняк пусть дадут тогда.

МТСМегаФонбилайн

Это тоже касается. Отсутствуют все. Часто мегафона ( привет реклама ) даже вообще нету в списке сетей. Это как так??

Вспомним что 3G сети хотят выпилить и посмеемся и поплачим ( удивительно что вообще появилася 3G, обычно GPRS, хотя ни связи ни интернета )

На деле все ровно как и с электричеством, газом, водой, топливом: корпорат тарифы вразы дороже.

Это связано в основном с компенсацией поставки услуг физикам за свет юрлиц в основном + откаты ( как выше и написали ) за контракты.

CacheAPI спокойной позволяет загнать блоб и прочитать его как блоб, так как по сути работает на Request/Response

ImageData transferable, так что это единственный способ обмена изолированным кадром.

На деле в статье ошибка. transferControlToOffscreen отдаёт УПРАВЛЕНИЕ, картинка как была на холсте - так и останется. Если сконструировать OffscreenCanvas вручную - тогда забиндить на Dom канвас не получится, тогда нужно получить ImageData если требуется.

Причем MessageChannel вообще тут не упёрся. Межпотокове host<-> worker / tab сразу есть, каналы городить нету смысла. Каналы нужны когда у тебя есть например пул воркеров, которые нужно между собой обнкдинять - порты прокинул, и они пишут в нужные сами, SharedWorkers.

Зачем это все? Канвас сам по себе фреймбуфер который будет отрисован только в animation frame вызов в браузере. В webgl вообще есть persistentDrawBuffer хинт чтобы нивелировать инвалидацию на всякие ресайзы, фреймдропы ( чтоб не было мерцания )

Только desynchronized флаг для 2d включает immediate flush.

Нуу тут момент в том, что ты не всегда можешь из кеша удалять объект, пока он где-то ещё используется в другом месте.

Он может быть структурно сложный, например imagwBitmap или BLOB требуют явного вызова close, чтобы удалить из памяти, и если это сделать когда кто-то его будет использоваться - ссылка останется, а данные будут битые.

Нет механизма отслеживания ссылок явно. Допустим у тебя был фетч каких-либо данных для 303737 табличек. Как узнать что все таблички закрыты? Каждая табличка тогда должна об этом сообщить. А вдруг какой-то Вася забудет сделать анмаунт колбек, в котором будет нотификация что пора удалить кеш в эффекте в каком-то фреймворке React подобном - вот и повисла память ( что всегда и случается на самом деле ).

Самостоятельно кешем как раз очень геморойно управлять, почти все реализации кешей в JS текут.

GC срабатывает не сразу. По этой причине можно вернуть ссылку на объект с WeakRef до срабатывания GC, конечно оно натянуто, в основном WeakRef и FinalizationRegister юзается совместно.

Более верный пример:

const ptr = wasmRuntime.allocateWasmObject();
const jsWrapper = new JSWrapper( ptr);
const registry = new FinalizationRegistry(( ptr) => {
  wasmRuntime.free(ptr); // free wasm memory
});
registry.register( jsWrapper, ptr );

return jsWrapper;

Пример с Map невалиден, нельзя хранить объект в Map или WeakMap, так как это явная ссылка.

WeakMap хранит «мягко» только ключи, это значит что если GC доберется до ключа, то запись будет удалена ( по этому нельзя там иметь примитивы )

Не рассказано что это было придумано для биндингов в wasm/webgpu, так как там неуправляемая память, и нужно знать когда JS объект был удален из памяти чтобы сделать очистку объекта на стороне wasm, webgpu или webgl, так как потерять реф на текстуру в webgl можно наизи и никто ее не улалит ( она может использоваться в рендер процессе )

Ток рутуб сам признал что не имеет технической возможности покрыть даже часть трафика Ютуба из РФ. У них полтора CDN на территории страны.

ВК и то имеет больше шансов.

Любые воркеры и стораджи доступны с сафари. Соль в том, что к стораджу и Кешу из PWA из под браузерного инстанса не достучаться и наоборот. Если ты например вошёл в свой аккаунт, и апка что-то локально хранит, типо Кеша - оно будет потеряно.

Такая же проблема с safari isolated view, те когда страница открывается в недо-браузере с кнопкой перехода в браузер.

Но а если точнее: FullscreenAPI доступно только в PWA, WebPush API тоже.

сравнивать # и private / protected вообще некорректно, в TS 5.2 поддерживается синтаксис # нотации, а квалификаторы доступа строго compile-time.

Очень странно, что хук не получает AST, как например это в бабеле или вебпаке, или в ТС

Зачем?
Настройте nginx static compression и храните их прям пожатые.

https://docs.nginx.com/nginx/admin-guide/web-server/compression/

Те они уже будут пожаты лежать.
Многие публичные сервера автоматически ресурсы типа filename.extension.gzip/br отправляют с заголовком

Все же продолжу про WASM.

С WASM + SIMD вы бы получили более быстрый холодный старт и более мелкий рантайм.

Да, используя SIMD нужно ногу сломать чтобы правильно векторизовать это все (так как не все могут вычислять 4 команды враз), но так как у вас RGBa, то все векторные операции с ним можно сделать в 4 раза быстрее из-за одной операции.
Пока бинариен (это то что есть wasm-opt) не умеет (или уже умеет?) сам векторизовать операции такого типа.

Я вижу у вас есть как <<, так и +*/.

Ну и не хочется Rust/C++, есть всегда:
https://www.assemblyscript.org/

Как раз сравнение генерации фрактала (без SIMD):
https://colineberhardt.github.io/wasm-mandelbrot/#WebAssembly

(но на производительных девайсах разница небольшая)

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

Тогда можно заюзать brotli, а не gzip, у него больше степень сжатия на это все.

И формально у вас кадр 100mb, так как пожатый brotil - 10mb по сети, и на js все равно прилетает 100mb.

Просто непонятно почему не отдали? Он должен сделать распаковку, и сделает ее всяко эффективнее.

(опять дубляж, но просто непонятно почему не решились)

gzip потоковый декодер есть в хроме.
можно заюзать его сразу, без pako.

https://developer.mozilla.org/en-US/docs/Web/API/CompressionStream


(про WASM я начал писать, но увидел потом что было сравнение и решил удалить)

Забавно то, что все форсят рафл который не умеет, но никто не знает что ещё есть как минимум:
Swf2js,
https://github.com/swf2js/swf2js
WAFlash
https://vidkidz.github.io/
И как бы AwayFL:
https://github.com/awayfl
(Который кстати юзает Nitrome и Poki)
Live версия как у рафла:
https://exponenta.games/games/AFL/


Все не без багов, но хотя бы как-то покрывают as3 который не покрывает рафл вообще.

Я разраб из AwayFL, мы напрямую гоним флешки, лучше чем Ruffle, так как покрываем куда больше кейсов, ибо, если честно, мы делаем правки для каждой конкретной игры.
Есть чекер, в котором можно просто запустить что-то (неизвестно когда обновлялся, так как правится каждые 2-3 часа)
https://awayfl-gametester.netlify.app/


Проект полностью Open Source, можете покидать PR.
https://github.com/awayfl
https://github.com/awayjs


Не реклама. Сам на самом деле не рад пинать мертвого.

Неплохой стенд, у нас такие в кабинетах схемотехники стоят, правда никто ими не пользуется — всё мультисим заменил.
А цеплять сам механизм замка к выходу out?
А кнопка ресет есть, я просто не смог найти ее на схеме? Нужна же, например когда код введен, дверь открыли и закрыли, он ведь должен сбросится, иначе всегда замок будет открыт.
1

Информация

В рейтинге
Не участвует
Откуда
Сочи, Краснодарский край, Россия
Дата рождения
Зарегистрирован
Активность