Сначала пусть нормально поставят базовые станции, так как я нахожусь в километре от школы довольно крупного посёлка (50к+ население ) и у меня вообще нету связи ни одного оператора. Приходится искать точку где можно получить СМС, чтобы был 4G - нужно выйти за пределы участка и вдоль дороги бегать. Использую как раз голосовые вызовы через интернет, благо есть аж 2 оператора с ВОЛС
Обычным телефоном не пользуюсь ввиду многих факторов: отсутствие видеозвонков, дофига спамеров и тупо дороже.
Yota, тариф выкрутили аж на 100 рублей в июле, а связи 90% времени отсутствует.
Мне сейчас ради этого бустеры ставить? Деняк пусть дадут тогда.
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 юзается совместно.
Пример с Map невалиден, нельзя хранить объект в Map или WeakMap, так как это явная ссылка.
WeakMap хранит «мягко» только ключи, это значит что если GC доберется до ключа, то запись будет удалена ( по этому нельзя там иметь примитивы )
Не рассказано что это было придумано для биндингов в wasm/webgpu, так как там неуправляемая память, и нужно знать когда JS объект был удален из памяти чтобы сделать очистку объекта на стороне wasm, webgpu или webgl, так как потерять реф на текстуру в webgl можно наизи и никто ее не улалит ( она может использоваться в рендер процессе )
Любые воркеры и стораджи доступны с сафари. Соль в том, что к стораджу и Кешу из PWA из под браузерного инстанса не достучаться и наоборот. Если ты например вошёл в свой аккаунт, и апка что-то локально хранит, типо Кеша - оно будет потеряно.
Такая же проблема с safari isolated view, те когда страница открывается в недо-браузере с кнопкой перехода в браузер.
Но а если точнее: FullscreenAPI доступно только в PWA, WebPush API тоже.
С WASM + SIMD вы бы получили более быстрый холодный старт и более мелкий рантайм.
Да, используя SIMD нужно ногу сломать чтобы правильно векторизовать это все (так как не все могут вычислять 4 команды враз), но так как у вас RGBa, то все векторные операции с ним можно сделать в 4 раза быстрее из-за одной операции. Пока бинариен (это то что есть wasm-opt) не умеет (или уже умеет?) сам векторизовать операции такого типа.
А почему тогда сразу не присылать в бразуер чанки GZIP обжатые на стороне сервера с заголовком Compression, чтобы браузер их распаковывал пока они летят?
Тогда можно заюзать brotli, а не gzip, у него больше степень сжатия на это все.
И формально у вас кадр 100mb, так как пожатый brotil - 10mb по сети, и на js все равно прилетает 100mb.
Просто непонятно почему не отдали? Он должен сделать распаковку, и сделает ее всяко эффективнее.
(опять дубляж, но просто непонятно почему не решились)
Я разраб из AwayFL, мы напрямую гоним флешки, лучше чем Ruffle, так как покрываем куда больше кейсов, ибо, если честно, мы делаем правки для каждой конкретной игры.
Есть чекер, в котором можно просто запустить что-то (неизвестно когда обновлялся, так как правится каждые 2-3 часа) https://awayfl-gametester.netlify.app/
Неплохой стенд, у нас такие в кабинетах схемотехники стоят, правда никто ими не пользуется — всё мультисим заменил.
А цеплять сам механизм замка к выходу out?
А кнопка ресет есть, я просто не смог найти ее на схеме? Нужна же, например когда код введен, дверь открыли и закрыли, он ведь должен сбросится, иначе всегда замок будет открыт.
Сначала пусть нормально поставят базовые станции, так как я нахожусь в километре от школы довольно крупного посёлка (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 юзается совместно.
Более верный пример:
Пример с 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, как например это в бабеле или вебпаке, или в ТС
А почему не comlink ?
https://github.com/GoogleChromeLabs/comlink
Зачем?
Настройте 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?
А кнопка ресет есть, я просто не смог найти ее на схеме? Нужна же, например когда код введен, дверь открыли и закрыли, он ведь должен сбросится, иначе всегда замок будет открыт.