Вебня
5.21K subscribers
89 photos
2 videos
3 files
2.08K links
JS VMs, спецификации, пропозалы, встречи #TC39, #WebAssembly, #W3C, браузеры, нёрдство.
Download Telegram
На втором дне текущего #TC39 пропозал .item() method on all the built-in indexables взял stage 3. О том, в чём польза этого предложения для JavaScript разработчиков, а также как этот метод позволит улучшить DOM API, в статье Axel Raushcmayer.

https://2ality.com/2020/09/item-method.html

P.S. в этот раз я не веду лайвы с TC39 из-за крайне неудобной таймзоны проведения, поэтому все окончательные результаты выложу одним сообщением (скорее всего уже завтра).
Извиняюсь за то, что целую неделю не было новостей. Было очень много других дел. А новостей накопилось очень много. Главная из них, пожалуй, это то, что на прошлой неделе была встреча #TC39, о результатах которой стоит рассказать.

Результаты 78 встречи TC39 (21 - 24 сентября)

🚀 ECMA402 пропозал Intl.DisplayNames переходит на stage 4 (слайды)
пропозал .item() переходит на stage 3 (слайды)
Import Assertions переходят на stage 3 (слайды)
🐥 ECMA402 Intl Enumeration API переходит на stage 2 (слайды)
🐥 Class static initialization block переходит на stage 2 (слайды)
🐥 Resizable and growable ArrayBuffers переходит на stage 2 (слайды)
🐣 новое предложение String.dedent переходит на stage 1 (слайды)
🐣 новое предложение ECMA402 Intl.DisplayNames V2 переходит на stage 1 (слайды)
🐣 новое предложение ECMA402 Intl.Locale info переходит на stage 1 (слайды)
🐣 новое предложение Error Cause переходит на stage 1 (слайды)
🐣 новое предложение Double-Ended Iterator and Destructuring переходит на stage 1 (слайды)
🐣 новое предложение Standardized Debug переходит на stage 1 (слайды)
🐣 новое предложение Modulus and Additional Integer Math переходит на stage 1 (слайды)

Не продвинулись на следующий stage по результатам встречи:
- Class Access Expressions остаётся на stage 2 (слайды)
- Ergonomic Brand Checks for Private Fields остаётся на stage 2 (слайды)
- Builtin Modules остаётся на stage 1 (слайды)
- Unused Function Parameters не смог продвинуться на stage 1 (слайды)

Обновления по пропозалам:
- Numeric literal suffixes stage 1 обновление (слайды)
- Withdrawing TypedArray stride stage 1 обновление — пропозал снимается и не будет дальше развиваться
- JSON Modules stage 2 обновление (слайды)
- Records & Tuples stage 2 обновление (слайды)
- Decorators stage 2 обновление (слайды)
- Temporal stage 2 обновление (слайды)
- Status update for class fields, private methods, static class features (слайды) — все 3 эти stage 3 пропозала будут объединены перед продвижением на stage 4

Принятые нормативные изменения:
- Explicitly specify order of operations in MakeTime
- Move proto out of annex B
- Align detached buffer semantics with web reality
- Specify order of name and length for built-in functions
- Arbitrary Strings as export/import names

Другие обсуждения:
- F.p.bind with infinite-length functions
- Date arithmetic (слайды)
- Move outreach groups to the TC39 org
- GetOption in ECMA-262
- Process document clarifications
- Conformance for enumerable options in 262 and 402 (слайды)
А по результатам вчерашней встречи #WebAssembly Community Group, продвинулись следующие пропозалы:
- Memory 64 отправляется на phase 2
- Relaxed dead code validation будет отправлен на phase 1 как только будет создан репозиторий под организацией WebAssembly на GitHub
На прошлой неделе вышел Tor Browser 10, который теперь основан на Firefox ESR 78.3.0 (самая свежая ESR ветка, в Tor Browser 10 использовалась ESR 68) и Tor 0.4.4.5.

https://blog.torproject.org/new-release-tor-browser-100
Из новостей фронтенд библиотек с прошлой недели:

Команда React выпустила новый JSX Transform, который позволит использовать JSX без импорта React в модуль, немного уменьшит размер бандла, а также создаст основу для дальнейших нововведений

Вышли Early Preview Release библиотек LitElement 3.0 и lit-html 2.0. Там много изменений, в том числе breaking, но большинство из них не должны задеть большинство пользователей. Из интересного стоит отметить поддержку серверного рендеринга в новом lit-html.
https://dev.to/alabulei1/high-performance-and-safe-ai-as-a-service-in-node-js-43lg

Занимательная статья о том, как написать своё веб-приложение для распознования лиц на Node.js и Rust (через #WebAssembly). Для этого используется вируальная машина Second State VM и прилагающийся к ней compiler toolchain, который делает биндинги из JS в Rust через wasm-bindgen.
Вышел Node.js 14.3.0 с поддержкой именованных импортов ESM для CJS модулей и libuv 1.40.0.

https://nodejs.org/en/blog/release/v14.13.0/
NPAPI — старый (создан в 1995 году) API от Netscape для расширения функциональности браузеров. Именно NPAPI помогал запускать Flash, Silverlight, Java апплеты, отображать PDF и DJVu документы. Все эти расширения были практически неконтролируемы, что приводило к проблемам с безопасностью и стабильностью. Последним, что до сих пор останавливает вендоров браузеров перед тем, чтобы отказаться от NPAPI совсем, является Flash. Adobe ещё в 2017 году объявил, что поддержка Flash прекратится в январе 2021. Firefox собирается прекратить поддержку NPAPI именно в эту дату. Chrome прекратил поддержку ещё в сентябре 2015, но вместе с тем стал поддерживать Flash через собственную технологию PPAPI. Эта поддержка закончится также в январе 2021. Поддержка NPAPI в WebKit (и Safari) уже удалена из кодовой базы и будет прекращена в конце 2020.

Подробнее обо всём этом в статье Adrian Perez из Igalia, который занимаетя WebKitGTK и WPE.
https://perezdecastro.org/2020/webkitgtk-npapi-sunsetting.html
Так, я тут снова был очень занят работой, и за это время накопилось много новостей. Некоторые, которые достаточно сильно уже осветили везде, я пропущу (например, про срачики вокруг хактоберфеста), но постов все равно будет много, поэтому возможно лучше будет замьютить канал на время, если вы не хотите отвлекаться.
Представлен рантайм Elsa — конкурент Deno и Node.js на движке QuickJS. Elsa написана на Go и имеет фичи, аналогичные рантайму Deno.
Выложены записи с сентябрьской встречи #TC39. Напомню, что основные результаты этой встречи я собрал вот тут.
43 разных способа создать веб компонент <my-counter/> со сравнением кода, результирующим размером бандла и показателями скорости парсинга JS и создания DOM дерева.

https://webcomponents.dev/blog/all-the-ways-to-make-a-web-component/
В кодовую базу WebKit добавлена поддержка Streams API для TextDecoder API. Такая поддержка позволит комбинировать Encoding API со стримами Fetch API и других, а также реализовать backpressure.

Описание: https://github.com/ricea/encoding-streams/blob/master/stream-explainer.md
Патч в трекере WebKit: https://trac.webkit.org/changeset/266668/webkit

В данный момент поддержка стримов в Encoding API также реализована в браузерах на основе Chromium (с версии 71). Поддержка в браузерах на основе Gecko (таких как Firefox) ещё не реализована.
Хотел написать о релизе webpack 5, но вспомнил, что в @defront уже всё отлично написано за меня.
Вчера зарелизился Webpack 5 с огромным количеством изменений.

TLDR

В новой версии была улучшена скорость сборки. Была улучшена поддержка долгосрочного кэширования бандлов. Улучшен tree shaking. Реализован новый подход для работы с ассетами. Добавлена новая фича Module Federation. Удалены полифиллы для Node.js-модулей. Код сборки может генерироваться в стандарте ES2015.

Подробнее

Улучшена скорость сборки благодаря кэшированию на диске служебных данных между разными сборками (Persistent Caching).

Было проделано много работы для улучшения tree-shaking. В новой версии Webpack использует статический анализ для построения графа зависимостей, благодаря чему удаляется больше неиспользуемого кода. Также Webpack благодаря статическому анализу определяет модули без сайд-эффектов и не включает их в бандл, если они не используются. Был улучшен tree-shaking CommonJS-модулей.

Было упрощено использование ассетов. Теперь не нужно устанавливать дополнительные загрузчики, например, file-loader, url-loader, raw-loader. Сергей Мелюков в феврале публиковал статью про ассеты в Webpack 5, рекомендую почитать.

С пятой версии стала доступна ещё одна новая фича — Module Federation. Благодаря ей приложение может прозрачно заимствовать код из других приложений. Это позволяет делать интересные вещи, например, разделить одно большое SPA на несколько небольших. Это SPA с точки зрения пользователя будет работать как одно целое, но может разрабатываться и деплоиться разными командами независимо друг от друга.

Улучшена совместимость с Web-платформой: добавлена поддержка Top Level Await, JSON Modules, WASM Modules, import.meta.

Четвёртая версия Webpack могла генерировать код сборки только в стандарте в ES5. С пятой версии код сборки может генерироваться в стандарте ES2015.

Были удалены полифиллы для Node.js ( node.Buffer, node.console, node.process, crypto и т.п.) Когда появился Webpack, npm чаще всего использовали для распространения Node.js-модулей, поэтому в то время имело смысл поставлять со сборщиком полифиллы. Сейчас ситуация изменилась — в npm есть много кода, который можно использовать и в Node.js, и в браузерах. Также очень много внимания сегодня уделяют размеру генерируемого кода, а полифиллы Node.js могут добавлять очень много кода. Но не все рады удалению полифиллов. Синдре Сорхусу — автору многих библиотек в экосистеме Node.js — это решение не понравилось. Он пишет про то, что не будет исправлять проблемы, связанные с Webpack 5.

В общем, релиз очень большой. Ребята проделали огромную работу. В статье написано, что есть вероятность появления проблем при использовании свежей версии, но начинать миграцию сборки уже можно. Разработчики ждут нашего фидбека и сообщений об ошибках.

#webpack #release #bundle

https://webpack.js.org/blog/2020-10-10-webpack-5-release/
В блоге V8 очередная классная статья о сборщике мусора V8 и оптимизации Slack tracking, позволяющей выделить дополнительную память для изменения структуры объектов (до семи раз) прежде чем будет применена оптимизация с использованием hidden classes.
Mozilla закрывает сайт, на котором ранее публиковались все изменения совместимости.

https://www.fxsitecompat.dev/en-CA/blog/2020/sunsetting-fxsitecompat/

П.С. также продолжаются увольнения сотрудников Mozilla. Так, например, недавно были уволены Paul Rouget, работавший над веб платформой и Servo, и Benjamin Bouvier из команды wasm / Cranelift.
Не так давно вышел Chrome 86. Из нового:
- File System Access API вышел из origin trial и теперь доступен по умолчанию. Этот API разрабатывается в рамках Web Platform Incubator Community Group, не является стандартом W3C и разработан исключительно инженерами Google.
- добавлен новый origin trial WebHID для подключения различных устройств вроде геймпадов, джойстиков, LED и т.д.
- добавлен origin trial Multi-Screen Window Placement API для программируемого расположения окон при использовании нескольких мониторов
- новый CSS селектор :focus-visible, псевдо-элемент ::marker

А также:
- защита от отправки данных форм по HTTP при HTTPS соединении
- поддержка FTP отключена по умолчанию
- мета-тег battary-savings
- и много всего другого (см ссылки ниже)

Наиболее полный список изменений: https://support.google.com/chrome/a/answer/7679408#86
Ещё один список изменений: https://blog.chromium.org/2020/09/chrome-86-improved-focus-highlighting.html
Видео: https://www.youtube.com/watch?v=GNuG-5m4Ud0
Также вышел Safari Technology Preview 114 с большим количеством изменений:
- улучшения табов Elements, Sources, Network, Timelines, Audit в веб инспекторе
- различные исправления парсера JS, мелкие изменения для полного соответствия спецификации в корнер кейсах, много улучшений Intl API
- улучшения полей ввода типов date и time
- очень много исправлений и улучшений Web Audio
- WebGL 2 теперь включен по умолчанию, поддержка WebGL 2 в Offscreeen Canvas
- исправления и улучшения CSS
- ленивая загрузка айфреймов и изображений
- исправления и улучшения Media и MediaRecorder
- улучшения WebRTC
- исправления рендеринга анимаций и шрифтов, исправления прокрутки
- исправления некоторых других Web API
На прошлой неделе я был в гостях у подкаста Фронтенд Юность. Поговорили о #TC39, JavaScript и о пиве. Кажется немного прогнал там местами (ещё сам не слушал), но в целом, надеюсь, должно быть интересно.

https://twitter.com/frontend_u/status/1315392088243154945
Только что закончилась встреча #WebAssembly Community Group. Из главного:
- у пропозала Relaxed Dead Code Validation, который попал на phase 1 на прошлой встрече, начальное описание, автор представил доклад и собирается представлять его к продвижениею на phase 2 на следующей встрече 27го октября.
- был предложен способ определения поддержки фич в SIMD (слайды)