Хочу немного прервать молчание в канале. Тем более, что есть очень крутые поводы.
У дружественного канала @webnya сегодня день рождения. От души поздравляю Сергея и Романа и желаю дальнейшего развития! Очень рекомендую подписаться на Вебню, если вы этого ещё не сделали.
В другом дружественном канале @ufostation сегодня вышел подкаст-интервью с разработчиками Яндекс.Браузера. Сергей очень давно хотел записать этот подкаст. Рад видеть, что всё получилось.
У дружественного канала @webnya сегодня день рождения. От души поздравляю Сергея и Романа и желаю дальнейшего развития! Очень рекомендую подписаться на Вебню, если вы этого ещё не сделали.
В другом дружественном канале @ufostation сегодня вышел подкаст-интервью с разработчиками Яндекс.Браузера. Сергей очень давно хотел записать этот подкаст. Рад видеть, что всё получилось.
Веб-версия SQLite с поддержкой сохранения изменений
Джеймс Лонг (автор Prettier) представил свой новый проект absurd-sql — порт SQLite для веба с поддержкой сохранения изменений в IndexedDB — "A future for SQL on the web".
В вебе пока нет производительного API для работы с большими массивами данных. Идёт работа над Storage Foundation API, который позволит устранить этот недостаток, но его поддержка есть только в Chrome в экспериментальном режиме.
Джеймс попробовал решить эту проблему с помощью адаптации WebAssembly-версии SQLite, в которой данные сохраняются не в память, а на диск с помощью IndexedDB. Такое решение позволило увеличить скорость записи и доступа на несколько порядков благодаря долгоживущим транзакциям, использованию курсоров и пакетной обработки запросов. Он назвал свой проект absurd-sql, так как браузеры (кроме Chrome) для реализации IndexedDB под капотом используют SQLite. То есть буст производительности достигается благодаря WebAssembly-версия SQLite, которая в конечном счёте использует другую нативную версию SQLite.
Проект находится в экспериментальном режиме, но потенциал у него есть. Как минимум благодаря absurd-sql теперь можно портировать в веб такие приложения, для которых критична скорость записи и чтения данных.
#project #storage #experimental
https://jlongster.com/future-sql-web
Джеймс Лонг (автор Prettier) представил свой новый проект absurd-sql — порт SQLite для веба с поддержкой сохранения изменений в IndexedDB — "A future for SQL on the web".
В вебе пока нет производительного API для работы с большими массивами данных. Идёт работа над Storage Foundation API, который позволит устранить этот недостаток, но его поддержка есть только в Chrome в экспериментальном режиме.
Джеймс попробовал решить эту проблему с помощью адаптации WebAssembly-версии SQLite, в которой данные сохраняются не в память, а на диск с помощью IndexedDB. Такое решение позволило увеличить скорость записи и доступа на несколько порядков благодаря долгоживущим транзакциям, использованию курсоров и пакетной обработки запросов. Он назвал свой проект absurd-sql, так как браузеры (кроме Chrome) для реализации IndexedDB под капотом используют SQLite. То есть буст производительности достигается благодаря WebAssembly-версия SQLite, которая в конечном счёте использует другую нативную версию SQLite.
Проект находится в экспериментальном режиме, но потенциал у него есть. Как минимум благодаря absurd-sql теперь можно портировать в веб такие приложения, для которых критична скорость записи и чтения данных.
#project #storage #experimental
https://jlongster.com/future-sql-web
Jlongster
A future for SQL on the web
Производительность стилизации в shadow DOM
Нолан Лоусон провёл небольшое исследование производительности стилизации в shadow DOM — "Does shadow DOM improve style performance?".
В пайплайне рендеринга браузера этап стилизации может занимать значительное время. В теории shadow DOM может его сократить, так как браузеру достаточно обработать инкапсулированные элементы. Проведённый бенчмарк подтвердил эту гипотезу, но только для сложных селекторов. Выигрыша относительно простых селекторов для
Выводы из статьи. Вариант оптимизации стилизации с помощью shadow DOM можно рассматривать при проектировании фреймворков. Shadow DOM не даёт прироста производительности относительно CSS Modules и других подобных решений для инкапсуляции стилей.
#css #performance #benchmark
https://nolanlawson.com/2021/08/15/does-shadow-dom-improve-style-performance/
Нолан Лоусон провёл небольшое исследование производительности стилизации в shadow DOM — "Does shadow DOM improve style performance?".
В пайплайне рендеринга браузера этап стилизации может занимать значительное время. В теории shadow DOM может его сократить, так как браузеру достаточно обработать инкапсулированные элементы. Проведённый бенчмарк подтвердил эту гипотезу, но только для сложных селекторов. Выигрыша относительно простых селекторов для
id
и class
нет.Выводы из статьи. Вариант оптимизации стилизации с помощью shadow DOM можно рассматривать при проектировании фреймворков. Shadow DOM не даёт прироста производительности относительно CSS Modules и других подобных решений для инкапсуляции стилей.
#css #performance #benchmark
https://nolanlawson.com/2021/08/15/does-shadow-dom-improve-style-performance/
Read the Tea Leaves
Does shadow DOM improve style performance?
Update: I wrote a follow-up post on this topic. Short answer: Kinda. It depends. And it might not be enough to make a big difference in the average web app. But it’s worth understanding why. …
Бесшовные переходы между экранами SPA с помощью shared element transition API
Джейк Арчибальд рассказал о новом пропозале для создания бесшовных переходов между экранами SPA — "Smooth and simple page transitions with the shared element transition API".
Бесшовные переходы сложны в реализации. При их создании нужно обеспечить плавность анимации, корректность обработки событий при изменении состояний и убедиться в том, что одновременное присутствие двух экранов не ломает доступность.
Эти проблемы призван решить shared element transition API. С его помощью можно легко создавать простые переходы между экранами и сложные переходы с разделяемыми элементами. Вот так реализуется простой переход:
Shared element transition API пока доступен в Chrome в экспериментальном режиме. Также на данный момент его можно использовать только в рамках одной страницы, но у авторов спецификации есть планы по его расширению для обеспечения бесшовных переходов между разными страницами сайта.
#chrome #api #spa
https://developer.chrome.com/blog/shared-element-transitions-for-spas/
Джейк Арчибальд рассказал о новом пропозале для создания бесшовных переходов между экранами SPA — "Smooth and simple page transitions with the shared element transition API".
Бесшовные переходы сложны в реализации. При их создании нужно обеспечить плавность анимации, корректность обработки событий при изменении состояний и убедиться в том, что одновременное присутствие двух экранов не ломает доступность.
Эти проблемы призван решить shared element transition API. С его помощью можно легко создавать простые переходы между экранами и сложные переходы с разделяемыми элементами. Вот так реализуется простой переход:
async function navigateToSettingsPage() {
await document.documentTransition.prepare({
rootTransition: 'cover-left',
});
updateDOMForSettingsPage();
await document.documentTransition.start();
}
Shared element transition API пока доступен в Chrome в экспериментальном режиме. Также на данный момент его можно использовать только в рамках одной страницы, но у авторов спецификации есть планы по его расширению для обеспечения бесшовных переходов между разными страницами сайта.
#chrome #api #spa
https://developer.chrome.com/blog/shared-element-transitions-for-spas/
Chrome for Developers
Smooth transitions with the View Transition API | View Transitions | Chrome for Developers
The View Transition API lets you add transitions between views of a website.
26 августа в 19:00 приглашаем на Tech Talks Зарплаты.ру в Новосибирске
Локацию выберем по количеству регистраций, недалеко от площади Ленина. Каждого оповестим лично.
2 горячие темы: «Архитектура и производительность web-приложений» и «Нужно ли высшее образование в IT»
Tech Talks - это круглый стол или дискуссионная группа, в которой могут принять участие все желающие. Нет деления на докладчика и участника: наравне участвуют все, кто хочет. Кто не хочет - слушает общее обсуждение. Модератор встречи задает и поддерживает общий вектор.
А вот и ссылка на регистрацию: https://zarplata-ru-events.timepad.ru/event/1739999/
Локацию выберем по количеству регистраций, недалеко от площади Ленина. Каждого оповестим лично.
2 горячие темы: «Архитектура и производительность web-приложений» и «Нужно ли высшее образование в IT»
Tech Talks - это круглый стол или дискуссионная группа, в которой могут принять участие все желающие. Нет деления на докладчика и участника: наравне участвуют все, кто хочет. Кто не хочет - слушает общее обсуждение. Модератор встречи задает и поддерживает общий вектор.
А вот и ссылка на регистрацию: https://zarplata-ru-events.timepad.ru/event/1739999/
zarplata-ru-events.timepad.ru
Tech Talks Зарплаты.ру / События на TimePad.ru
2 горячие темы: «Архитектура и производительность web-приложений» и «Нужно ли высшее образование в IT»
Полифил для предзагрузки JavaScript-модулей с проверкой целостности
Гай Бедфорд — автор jspm и SystemJS — рассказал о своих опытах реализации кроссбраузерной предзагрузки JavaScript-модулей с проверкой целостности — "ES Module Preloading & Integrity".
В нативной модульной системе модули загружаются после загрузки их родителей. Чтобы ускорить загрузку нижележащих модулей, можно использовать предзагрузку с помощью
Гай в своей статье предлагает использовать полифил для поддержки
#esm #performance #security
https://guybedford.com/es-module-preloading-integrity
Гай Бедфорд — автор jspm и SystemJS — рассказал о своих опытах реализации кроссбраузерной предзагрузки JavaScript-модулей с проверкой целостности — "ES Module Preloading & Integrity".
В нативной модульной системе модули загружаются после загрузки их родителей. Чтобы ускорить загрузку нижележащих модулей, можно использовать предзагрузку с помощью
<link rel="modulepreload">
. Ещё можно включить проверку целостности с помощью атрибута integrity
. Проблема в том, что modulepreload
и integrity
поддерживаются только в Chrome.Гай в своей статье предлагает использовать полифил для поддержки
modulepreload
и integrity
во всех браузерах и рассуждает о том, как ещё может быть реализована проверка целостности JavaScript-модулей.#esm #performance #security
https://guybedford.com/es-module-preloading-integrity
Использование лоадеров в Node.js
Арал Балкан рассказал об использовании лоадеров в Node.js на примере импорта текстовых файлов — "Make anything a JavaScript module using Node.js ESM Module Loaders".
В Node.js есть экспериментальная поддержка лоадеров. Лоадер — это код, расширяющий поведение
Очень интересная фича, но на данный момент она находится в стаусе эксперимента.
https://ar.al/2021/05/27/make-anything-a-javascript-module-using-node.js-esm-module-loaders/
Арал Балкан рассказал об использовании лоадеров в Node.js на примере импорта текстовых файлов — "Make anything a JavaScript module using Node.js ESM Module Loaders".
В Node.js есть экспериментальная поддержка лоадеров. Лоадер — это код, расширяющий поведение
import
. Лоадеры можно использовать для автоматической транспиляции, для загрузки кода из сети, для компиляции шаблонов, преобразования React, Vue, Svelte-компонентов и т.п. В статье разбирается пример создания ладера для импорта текстовых файлов с помощью библиотеки node-esm-loader. Эта библиотека автоматически подключает лоадеры из файла .loaderrc.js
. Без библиотеки лоадеры подключаются с помощью флага --experimental-loader
.Очень интересная фича, но на данный момент она находится в стаусе эксперимента.
https://ar.al/2021/05/27/make-anything-a-javascript-module-using-node.js-esm-module-loaders/
Aral Balkan
Make anything a JavaScript module using Node.js ESM Module Loaders
The experimental feature lets you compile anything into JavaScript.
Как Google Closure Compiler помог в разработке TypeScript
Люк Хобан рассказал об истории появления TypeScript — "The first TypeScript demo".
В 2010 году команда разработки Office задумалась об экспансии в веб. Разработчики хотели использовать типизацию и средства для улучшения эргономики разработки, но подходящих инструментов не было.
Стив Люко увидел потребность в новом инструменте и начал работать над Strada (первое название TypeScript). Через некоторое время к нему присоединился Люк Хобан, он помог в разработке парсера. Они хотели успеть сделать полноценный прототип к началу внутренней конференции, но не успевали, так как Стив повредил кисть. Нужно было написать тайпчекер. Люк придумал хак. Они изменили компилятор так, чтобы JavaScript генерировался с аннотациями типов для Google Closure Compiler. Этот код отправлялся в веб-версию компилятора на сервера Google для проверки типов. Демка заработала, в проект поверили, и затем появилась первая версия TypeScript.
Очень интересная статья. Рекомендую почитать.
#typescript #history
https://medium.com/hackernoon/the-first-typescript-demo-905ea095a70f
Люк Хобан рассказал об истории появления TypeScript — "The first TypeScript demo".
В 2010 году команда разработки Office задумалась об экспансии в веб. Разработчики хотели использовать типизацию и средства для улучшения эргономики разработки, но подходящих инструментов не было.
Стив Люко увидел потребность в новом инструменте и начал работать над Strada (первое название TypeScript). Через некоторое время к нему присоединился Люк Хобан, он помог в разработке парсера. Они хотели успеть сделать полноценный прототип к началу внутренней конференции, но не успевали, так как Стив повредил кисть. Нужно было написать тайпчекер. Люк придумал хак. Они изменили компилятор так, чтобы JavaScript генерировался с аннотациями типов для Google Closure Compiler. Этот код отправлялся в веб-версию компилятора на сервера Google для проверки типов. Демка заработала, в проект поверили, и затем появилась первая версия TypeScript.
Очень интересная статья. Рекомендую почитать.
#typescript #history
https://medium.com/hackernoon/the-first-typescript-demo-905ea095a70f
Medium
The first TypeScript demo
Last week was the 5th anniversary of the launch of TypeScript, and I had the opportunity to go back to visit Anders and the team for the…
Взаимодействие с веб-воркером без прерывания цикла событий
Михай Парпарита поделился эффективным способом общения с веб-воркером без использования
Автор статьи работал над веб-версией эмулятора ОС старых Макинтошей. Архитектура эмулятора разделена на две основные части: UI и поток эмуляции, работающий в веб-воркере. Чтобы эмуляция работала плавно, для обмена данными между UI и веб-воркером используется
Веб-воркер может подгружать дополнительный код с помощью
Такой подход медленнее
#api #webworkers
https://blog.persistent.info/2021/08/worker-loop.html
Михай Парпарита поделился эффективным способом общения с веб-воркером без использования
SharedArrayBuffer
— "Communicating With a Web Worker Without Yielding To The Event Loop".Автор статьи работал над веб-версией эмулятора ОС старых Макинтошей. Архитектура эмулятора разделена на две основные части: UI и поток эмуляции, работающий в веб-воркере. Чтобы эмуляция работала плавно, для обмена данными между UI и веб-воркером используется
SharedArrayBuffer
. Поддержка SharedArrayBuffer
на данный момент отключена в Safari. Михай нашёл альтернативное решение.Веб-воркер может подгружать дополнительный код с помощью
importScrips
. importScripts
работает синхронно, открывая возможность передачи команд из основного потока с помощью динамически формируемого JavaScript-кода. JavaScript-код создаётся внутри сервис-воркера и сохраняется в файл, который в цикле загружается в веб-воркере.Такой подход медленнее
SharedArrayBuffer
, но быстрее решения с остановкой цикла событий и позволяет достичь хорошей отзывчивости ввода в эмуляторе.#api #webworkers
https://blog.persistent.info/2021/08/worker-loop.html
persistent.info
Communicating With a Web Worker Without Yielding To The Event Loop
Corepack — интеграция yarn и pnpm в Node.js
Сегодня в основную ветку Node.js был слит пул-реквест с кодом утилиты Corepack для запуска yarn и pnpm без их явной установки.
Использование yarn или pnpm в проекте, управляющимся с помощью npm, может быть источником ошибок. Для предотвращения подобных ситуаций предназначен Corepack. Corepack — это мост между Node.js и сторонними пакетными менеджерами (yarn и pnpm), перехватывающий их запуск.
Если в package.json есть конфиг
Corepack будет поставляться вместе с новыми версиями Node.js 16-ой ветки. На данный момент внедрение Corepack носит экспериментальный характер.
#nodejs #experimental
https://github.com/nodejs/node/pull/39608
https://github.com/nodejs/corepack
Сегодня в основную ветку Node.js был слит пул-реквест с кодом утилиты Corepack для запуска yarn и pnpm без их явной установки.
Использование yarn или pnpm в проекте, управляющимся с помощью npm, может быть источником ошибок. Для предотвращения подобных ситуаций предназначен Corepack. Corepack — это мост между Node.js и сторонними пакетными менеджерами (yarn и pnpm), перехватывающий их запуск.
Если в package.json есть конфиг
packageManager
с указанием нужного пакетного менеджера, то запуск постороннего менеджера будет прерываться, а Node.js выведет соответствующее сообщение. Если пользователь будет запускать нужный пакетный менеджер, который не установлен в системе, то перед запуском он будет автоматически загружен из сети и сохранён в кеш.Corepack будет поставляться вместе с новыми версиями Node.js 16-ой ветки. На данный момент внедрение Corepack носит экспериментальный характер.
#nodejs #experimental
https://github.com/nodejs/node/pull/39608
https://github.com/nodejs/corepack
GitHub
deps: add corepack by arcanis · Pull Request #39608 · nodejs/node
This PR is a follow-up to #35398, where discussions were more about the idea than the implementation. With that out of the way after the vote in nodejs/TSC#1012 (comment), I updated the branch with...
Forwarded from Wild Wild Web
🎉 Релиз TypeScript 4.4 🎉
Вы можете подумать, а чего я тут фейерверки устраиваю? А потому что они таки улучшили то, с чем я уже довольно долго воюю. Надеюсь, они и дальше будут улучшать эти моменты. А какие именно, давайте обсудим в комментариях позже 🙂
Вчера команда TypeScript выпустила новую версию компилятора, в которой есть несколько интересных мест. Давайте подчеркнём самые интересные, по моему мнению:
- Улучшили Control Flow Analysis. Теперь, так называемые type guards, можно выносить в отдельные переменные и TypeScript не потеряет эту информацию по пути. Например, вы хотите проверить что что-то строка const isString = typeof someParam === 'string' и дальше вы можете писать просто if(isString) {}, TypeScript такое скушает (раньше это было ошибкой компиляции). И таких примеров побольше, можете почитать у них в посте.
- Все catch блоки по умолчанию приводятся к unknown типу (за флагом strict). Unknown тип это более безопасный вариант неизвестного типа, по сравнению с any. Я об этих типах, как раз, недавно писал. С этим релизом, TypeScript будет ошибки в catch блоках неявно приводить к unknown. И вам, собственно, нужно будет проверить что ошибка это та ошибка, которую вы ожидаете или нет.
- С этим релизом добавилась возможность иметь "inlay hints". Я с таким часто встречаюсь при разработке на Rust и, если честно, меня это немного бесит. Но, знаю людей, которым это очень даже заходит. Речь идёт о том, что в IDE у вас будут добавляться имена параметров к вашим аргументам или выведенный тип возврата функции будет добавлен как "inlay hint" возле вашей функции и так далее. Насколько я знаю, такое есть давно в Intelliji и им активно пользуются. А в этом релизе они добавили это на уровне компилятора.
Все остальные моменты, по моему мнению, не такие уж и большие, но, безусловно, интересные и для кого-то могут оказаться нововведением "вовремя". Вы можете почитать более подробно об изменениях в этой версии в их блог посте.
Вы можете подумать, а чего я тут фейерверки устраиваю? А потому что они таки улучшили то, с чем я уже довольно долго воюю. Надеюсь, они и дальше будут улучшать эти моменты. А какие именно, давайте обсудим в комментариях позже 🙂
Вчера команда TypeScript выпустила новую версию компилятора, в которой есть несколько интересных мест. Давайте подчеркнём самые интересные, по моему мнению:
- Улучшили Control Flow Analysis. Теперь, так называемые type guards, можно выносить в отдельные переменные и TypeScript не потеряет эту информацию по пути. Например, вы хотите проверить что что-то строка const isString = typeof someParam === 'string' и дальше вы можете писать просто if(isString) {}, TypeScript такое скушает (раньше это было ошибкой компиляции). И таких примеров побольше, можете почитать у них в посте.
- Все catch блоки по умолчанию приводятся к unknown типу (за флагом strict). Unknown тип это более безопасный вариант неизвестного типа, по сравнению с any. Я об этих типах, как раз, недавно писал. С этим релизом, TypeScript будет ошибки в catch блоках неявно приводить к unknown. И вам, собственно, нужно будет проверить что ошибка это та ошибка, которую вы ожидаете или нет.
- С этим релизом добавилась возможность иметь "inlay hints". Я с таким часто встречаюсь при разработке на Rust и, если честно, меня это немного бесит. Но, знаю людей, которым это очень даже заходит. Речь идёт о том, что в IDE у вас будут добавляться имена параметров к вашим аргументам или выведенный тип возврата функции будет добавлен как "inlay hint" возле вашей функции и так далее. Насколько я знаю, такое есть давно в Intelliji и им активно пользуются. А в этом релизе они добавили это на уровне компилятора.
Все остальные моменты, по моему мнению, не такие уж и большие, но, безусловно, интересные и для кого-то могут оказаться нововведением "вовремя". Вы можете почитать более подробно об изменениях в этой версии в их блог посте.
Microsoft News
Announcing TypeScript 4.4
Today we’re excited to announce the availability of TypeScript 4.4! If you haven’t heard of TypeScript yet, it’s a language that builds on JavaScript by adding syntax for static types. Tools like the TypeScript compiler just erase those types, leaving you…
Почему ссылки синие?
Элиза Бланшар написала статью про то, почему на многих сайтах ссылки синего цвета — "Why are hyperlinks blue?"
В первых интерфейсах для гиперссылок использовался чёрный цвет с подчёркиванием или рамками. С распространением цветных мониторов гиперссылки стали приобретать разные цвета, например, в клиенте Gopher (предтеча веб) использовался зелёный цвет. Mosaic стал первым браузером, который закрепил за ссылками привычные цвета: синий для обычных ссылок и тёмно-фиолетовый для посещённых. Почему был выбран синий цвет для обычных ссылок, точно неизвестно. Есть теория, что на этот выбор повлиял интерфейс Windows, который закрепил за синим цветом сигнал интерактивности.
Интересная статья. Рекомендую почитать, если интересуетесь историей появления веба.
#web #history #ux
https://blog.mozilla.org/en/internet-culture/deep-dives/why-are-hyperlinks-blue/
Элиза Бланшар написала статью про то, почему на многих сайтах ссылки синего цвета — "Why are hyperlinks blue?"
В первых интерфейсах для гиперссылок использовался чёрный цвет с подчёркиванием или рамками. С распространением цветных мониторов гиперссылки стали приобретать разные цвета, например, в клиенте Gopher (предтеча веб) использовался зелёный цвет. Mosaic стал первым браузером, который закрепил за ссылками привычные цвета: синий для обычных ссылок и тёмно-фиолетовый для посещённых. Почему был выбран синий цвет для обычных ссылок, точно неизвестно. Есть теория, что на этот выбор повлиял интерфейс Windows, который закрепил за синим цветом сигнал интерактивности.
Интересная статья. Рекомендую почитать, если интересуетесь историей появления веба.
#web #history #ux
https://blog.mozilla.org/en/internet-culture/deep-dives/why-are-hyperlinks-blue/
The Mozilla Blog
The ancestors of the blue hyperlink
The internet has ingrained itself into every aspect of our lives, but there’s one aspect of the digital world that I bet you take for granted. Did you ev
jsc — интерпретатор JavaScript, встроенный в macOS
Крейг Хокенберри написал статью про малоизвестную утилиту jsc — "jsc: My New Best Friend".
Все устройства с macOS идут в комплекте с jsc — интерпретатором JavaScript на базе движка JavaScriptCore. Бинарник находится по пути
Крейг пишет, что jsc используется командой разработки WebKit для запуска тестов. Возможно, что это так, но я не смог найти про это информацию. Нашёл, что jsc используется для поддержки выполнения скриптов в Swift- и Objective-C-программах.
Утилита jsc — это не замена Node.js, но она может оказаться полезной для запуска простых скриптов, когда Node.js под рукой нет.
#tool #javascript #macos
https://furbo.org/2021/08/25/jsc-my-new-best-friend/
Крейг Хокенберри написал статью про малоизвестную утилиту jsc — "jsc: My New Best Friend".
Все устройства с macOS идут в комплекте с jsc — интерпретатором JavaScript на базе движка JavaScriptCore. Бинарник находится по пути
/System/Library/Frameworks/JavaScriptCore.framework/Versions/Current/Helpers/jsc
. В cтарых версиях macOS по пути /System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc
.Крейг пишет, что jsc используется командой разработки WebKit для запуска тестов. Возможно, что это так, но я не смог найти про это информацию. Нашёл, что jsc используется для поддержки выполнения скриптов в Swift- и Objective-C-программах.
Утилита jsc — это не замена Node.js, но она может оказаться полезной для запуска простых скриптов, когда Node.js под рукой нет.
#tool #javascript #macos
https://furbo.org/2021/08/25/jsc-my-new-best-friend/
Furbo.org by Craig Hockenberry
jsc: My New Best Friend • furbo.org
A friend of mine recently pointed me at a well hidden command line tool. In the JavaScript framework used by Safari and other parts of Apple’s products, there is a tool called jsc. It’s a command line interface for JavaScript that uses the same code as the…
Скрытые проблемы preload
Шаби Паникер из Google рассказала о скрытых проблемах preload — "The cost of preload".
Предзагрузка ресурсов с помощью preload может помочь улучшить метрики FCP, LCP и TTI. В тоже время она может мешать быстрой загрузке критических ресурсов и блокировать отрисовку страницы.
Ситуация усугубляется тем, что в Chrome есть баг, из-за которого любой предзагружаемый ресурс попадает в начало очереди загрузок. Тем самым заставляя разработчиков расставлять preload у всех критических ресурсов для достижения оптимальной последовательности загрузки.
Пока в Chrome не исправлен баг, Шаби советует использовать preload только в самых крайних случаях.
Очень рекомендую почитать документ всем, кто занимается производительностью.
#performance #chrome
https://docs.google.com/document/d/1ZEi-XXhpajrnq8oqs5SiW-CXR3jMc20jWIzN5QRy1QA/
Шаби Паникер из Google рассказала о скрытых проблемах preload — "The cost of preload".
Предзагрузка ресурсов с помощью preload может помочь улучшить метрики FCP, LCP и TTI. В тоже время она может мешать быстрой загрузке критических ресурсов и блокировать отрисовку страницы.
Ситуация усугубляется тем, что в Chrome есть баг, из-за которого любой предзагружаемый ресурс попадает в начало очереди загрузок. Тем самым заставляя разработчиков расставлять preload у всех критических ресурсов для достижения оптимальной последовательности загрузки.
Пока в Chrome не исправлен баг, Шаби советует использовать preload только в самых крайних случаях.
Очень рекомендую почитать документ всем, кто занимается производительностью.
#performance #chrome
https://docs.google.com/document/d/1ZEi-XXhpajrnq8oqs5SiW-CXR3jMc20jWIzN5QRy1QA/
Google Docs
[Public] The cost of preload
NOTE: this is a condensed (and public) version of an internal doc on the topic. [email protected] May 6, 2021 tl;dr While usage of preload for critical resources can result in an improvement in a loading metric, it is a major footgun and comes at a significant…
Релиз Chrome 93
Сегодня вышла новая версия Chrome. Пит Лепаж и Джеселин Ин рассказали об основных фичах релиза — "New in Chrome 93".
Была добавлена поддержка CSS Module Scripts — импорт CSS-файлов в JavaScript. Импортированный CSS можно подключается к
На второй этап origin trial перешёл Multi-Screen Window Placement API, с помощью которого можно получить информацию о всех экранах пользователя и программно управлять размещением окон.
Теперь PWA могут быть зарегистрированы в качестве обработчиков URL (эта фича стала доступна в Chrome 92). Добавлена возможность кастомизации контролов управления окном PWA.
В инструментах разработчика добавлена поддержка отладки выражений от контейнера. Появилась поддержка отображения содержимого web bundle во вкладке Network. Добавлены новые опции для копирования строк из консоли. Lighthouse обновился до версии 8.1.
Chrome переходит на четырёхнедельный цикл релизов.
#chrome #release
https://developer.chrome.com/blog/new-in-chrome-93/
https://developer.chrome.com/blog/new-in-devtools-93/
Сегодня вышла новая версия Chrome. Пит Лепаж и Джеселин Ин рассказали об основных фичах релиза — "New in Chrome 93".
Была добавлена поддержка CSS Module Scripts — импорт CSS-файлов в JavaScript. Импортированный CSS можно подключается к
document
или shadowRoot
с помощью свойства adoptedStyleSheets
.На второй этап origin trial перешёл Multi-Screen Window Placement API, с помощью которого можно получить информацию о всех экранах пользователя и программно управлять размещением окон.
Теперь PWA могут быть зарегистрированы в качестве обработчиков URL (эта фича стала доступна в Chrome 92). Добавлена возможность кастомизации контролов управления окном PWA.
В инструментах разработчика добавлена поддержка отладки выражений от контейнера. Появилась поддержка отображения содержимого web bundle во вкладке Network. Добавлены новые опции для копирования строк из консоли. Lighthouse обновился до версии 8.1.
Chrome переходит на четырёхнедельный цикл релизов.
#chrome #release
https://developer.chrome.com/blog/new-in-chrome-93/
https://developer.chrome.com/blog/new-in-devtools-93/
Chrome for Developers
New in Chrome 93 | Blog | Chrome for Developers
Chrome 93 is rolling out now! You can now load CSS style sheets with import statements, just like JavaScript modules. Installed PWAs can register as URL handlers, making it possible for users to jump straight into your PWA. The Multi-Screen Window Placement…
Forwarded from Вебня (Sergey Rubanov)
Есть ли у Ваших проектов поддержка браузера Internet Explorer?
Anonymous Poll
3%
Да, поддерживаем Internet Explorer 11 и более старые версии
19%
Да, поддерживаем Internet Explorer 11
79%
Нет, поддержки IE на проектах нет
App History API — улучшенный роутинг для SPA
Cэм Торогуд рассказал про новое экспериментальное API для упрощения реализации клиентского роутинга в SPA — "Modern client-side routing: the App History API".
Для управления роутингом в SPA используется History API. History API отвечает за историю браузера, всё остальное (обработка событий навигации, управление переходами между экранами, сохранение временного состояния) ложится на плечи разработчика. App History API устраняет эти недостатки, связывая историю браузера, событие навигации и переходы между экранами.
Работа с App History API происходит с помощью объекта
На данный момент App History API доступен только в бете Chrome 95 за экспериментальным флагом.
#spa #api #experimental
https://web.dev/app-history-api/
Cэм Торогуд рассказал про новое экспериментальное API для упрощения реализации клиентского роутинга в SPA — "Modern client-side routing: the App History API".
Для управления роутингом в SPA используется History API. History API отвечает за историю браузера, всё остальное (обработка событий навигации, управление переходами между экранами, сохранение временного состояния) ложится на плечи разработчика. App History API устраняет эти недостатки, связывая историю браузера, событие навигации и переходы между экранами.
Работа с App History API происходит с помощью объекта
appHistory
. Для обработки событий навигации нужно установить обработчик на событие navigate
. Обработчик будет перехватывать все события навигации, в том числе при отправке POST-запросов и при программном изменении истории. В API есть встроенные средства для управления процессом перехода на новые экраны SPA с возможностью установки обработчиков на успешный переход или переход с ошибкой.На данный момент App History API доступен только в бете Chrome 95 за экспериментальным флагом.
#spa #api #experimental
https://web.dev/app-history-api/
Chrome for Developers
Modern client-side routing: the Navigation API | Web Platform | Chrome for Developers
Learn about the Navigation API, a new API which adds improved functionality to build single-page applications.
Уменьшение объёма изображения с помощью растра и SVG
Зак Лезерман поделился опытом оптимизации тяжёлого изображения — "Vector? Raster? Why Not Both!".
У Зака возникла проблема — SVG с иллюстрацией для сайта занимало 10Мб. Он попробовал экспортировать SVG в разные растровые форматы, наилучший результат был у AVIF — 168Кб. Для дальнейшего уменьшения объёма Зак разделил иллюстрацию на две части — фон и передний план. На фоне находится градиент с простыми геометрическими фигурами, поэтому в SVG он занимает всего 4Кб. На переднем находятся сложные фигуры и фотографии, поэтому для него больше подходит растровый формат, Зак выбрал webp (74Кб). Эти два изображения были скомбинированы в одно с помощью CSS. В итоге объём изображения был уменьшен с 10Мб до 78Кб.
Статья небольшая, но полезная. Рекомендую почитать.
#performance
https://www.zachleat.com/web/vector-raster-split/
Зак Лезерман поделился опытом оптимизации тяжёлого изображения — "Vector? Raster? Why Not Both!".
У Зака возникла проблема — SVG с иллюстрацией для сайта занимало 10Мб. Он попробовал экспортировать SVG в разные растровые форматы, наилучший результат был у AVIF — 168Кб. Для дальнейшего уменьшения объёма Зак разделил иллюстрацию на две части — фон и передний план. На фоне находится градиент с простыми геометрическими фигурами, поэтому в SVG он занимает всего 4Кб. На переднем находятся сложные фигуры и фотографии, поэтому для него больше подходит растровый формат, Зак выбрал webp (74Кб). Эти два изображения были скомбинированы в одно с помощью CSS. В итоге объём изображения был уменьшен с 10Мб до 78Кб.
Статья небольшая, но полезная. Рекомендую почитать.
#performance
https://www.zachleat.com/web/vector-raster-split/
Zach Leatherman
Vector? Raster? Why Not Both!—zachleat.com
A post by Zach Leatherman (zachleat)
Причины сломанной загрузки JS и CSS
На сайте правительства Великобритании есть руководство, посвящённое прогрессивному улучшению — "Building a resilient frontend using progressive enhancement".
О прогрессивном улучшении было написано много разных статей. Этот же документ мне понравился наличием списка причин, из-за которых может прерываться загрузка дополнительных ресурсов:
— временные сетевые ошибки;
— браузерные расширения, такие как блокировщики рекламы;
— проблемы сторонних сервисов, которые используются для доставки ресурсов сайта;
— ошибки резолвинга DNS;
— ошибки браузеров;
— блокировка на уровне файрволов;
— изменение содержимого страницы оператором сотовой связи;
— персональные файрволы или антивирусное ПО;
— изменение содержимого страницы провайдерами.
#web
https://www.gov.uk/service-manual/technology/using-progressive-enhancement
На сайте правительства Великобритании есть руководство, посвящённое прогрессивному улучшению — "Building a resilient frontend using progressive enhancement".
О прогрессивном улучшении было написано много разных статей. Этот же документ мне понравился наличием списка причин, из-за которых может прерываться загрузка дополнительных ресурсов:
— временные сетевые ошибки;
— браузерные расширения, такие как блокировщики рекламы;
— проблемы сторонних сервисов, которые используются для доставки ресурсов сайта;
— ошибки резолвинга DNS;
— ошибки браузеров;
— блокировка на уровне файрволов;
— изменение содержимого страницы оператором сотовой связи;
— персональные файрволы или антивирусное ПО;
— изменение содержимого страницы провайдерами.
#web
https://www.gov.uk/service-manual/technology/using-progressive-enhancement
GOV.UK
Building a robust frontend using progressive enhancement
How to build web pages so they work in HTML first: starting with HTML, extra styles and features, using JavaScript.
🔥1
Малоизвестные возможности Node.js
Саймон Плендерлит написал несколько небольших статей, посвящённых малоизвестным возможностям Node.js — "What’s new in Node.js core?".
В Node.js появилась встроенная поддержка генерации UUID с помощью метода
Есть поддержка
Для импорта встроенных модулей можно использовать протокол
Появилась поддержка promise-based API —
#nodejs
https://simonplend.com/whats-new-in-node-js-core/
Саймон Плендерлит написал несколько небольших статей, посвящённых малоизвестным возможностям Node.js — "What’s new in Node.js core?".
В Node.js появилась встроенная поддержка генерации UUID с помощью метода
randomUUID
из модуля crypto
. Доступно в Node.js v14.17.0 и выше.Есть поддержка
AbortController
для отмены асинхронных операций. Доступен в версии 14.17.0 (экспериментально), стабильная поддержка добавлена в 15.4.0.Для импорта встроенных модулей можно использовать протокол
node:
. Его использование помогает отделить внутренние модули от внешних: import url from "node:url";
. Доступно в v12.20.0 (ESM), v14.13.1 (ESM) и v16.0.0 (ESM, CommonJS).Появилась поддержка promise-based API —
timers/promises
и stream/promises
(v15.0.0 и выше). Также есть относительно старые fs/promises
(первая ревизия API была добавлена в v10.0.0) и dns/promises
(v10.6.0).#nodejs
https://simonplend.com/whats-new-in-node-js-core/
Simon Plenderleith
What's new in Node.js core?
It can be so easy to miss when new features are added to Node.js core. This series will help you stay up-to-date.