bootg.com »
United States »
Defront (при поддержке Зарплата.ру) — про фронтенд-разработку и не только » Telegram Web
В начале этого месяца Николь Салливан из Google твитнула о старте работ над внедрением в Chromium долгожданной фичи — выражений от контейнера (container queries). Через некоторое время Брайан Карделл написал статью о проделанной работе над выражениями от контейнера со стороны Igalia.
Над отзывчивыми элементами (aka responsive elements или container queries) авторы спецификаций и разработчики браузерных движков бьются уже несколько лет. До недавнего времени они не могли найти такое решение, которое было бы эффективно и которое бы не требовало изменения архитектуры текущих реализаций CSS-движков. Работа продвинулась после реализации во всех браузерах ResizeObserver. Благодаря отзывчивым элементам можно описывать стили элементов, которые зависят от ширины элементов, не используя JavaScript.
На данный момент разработчики браузеров подходят к разработке фичи с разных сторон. Брайан и его команда из Igalia работают над новой CSS-функцией
В общем, работа над отзывчивыми элементами кипит. CSS-функции, над которыми работают Брайан и Эмилио, всего лишь эксперимент, который с большой вероятностью примет другую форму, если всё пойдёт хорошо. Синтаксис выражений от контейнера, который внедряется Google, также неспецифицирован официально и тоже непонятно, что мы получим в будущем как стандарт.
UPD: Обновил статью с учётом фидбека Брайана и Николь
#css #experimental
https://bkardell.com/blog/AllThemSwitches.html
https://twitter.com/stubbornella/status/1324524942650601472
Над отзывчивыми элементами (aka responsive elements или container queries) авторы спецификаций и разработчики браузерных движков бьются уже несколько лет. До недавнего времени они не могли найти такое решение, которое было бы эффективно и которое бы не требовало изменения архитектуры текущих реализаций CSS-движков. Работа продвинулась после реализации во всех браузерах ResizeObserver. Благодаря отзывчивым элементам можно описывать стили элементов, которые зависят от ширины элементов, не используя JavaScript.
На данный момент разработчики браузеров подходят к разработке фичи с разных сторон. Брайан и его команда из Igalia работают над новой CSS-функцией
switch()
, которая будет служить основой для добавления нового синтаксического сахара в будущем, например, синтаксиса выражений от контейнера. Эмилио Кобос из Mozilla работает над похожим примитивом nth-value()
(по сути альтернативный синтаксис switch()
), который можно очень легко интегрировать в текущую кодовую базу любого браузера. (Уже после публикации статьи Брайан Карделл дал фидбек по статье и рассказал, что идея switch()
была предложена архитектором Google, который отвечает за движок layout'а в Chrome). Разработчики из Google идут другим путём и хотят сразу реализовать поддержку выражений от контейнера без добавления в CSS новых примитивов. Стоит сказать, что Igalia и Google не конкурируют друг с другом по этому вопросу. Их работа в конечном счёте будет дополнять друг друга.В общем, работа над отзывчивыми элементами кипит. CSS-функции, над которыми работают Брайан и Эмилио, всего лишь эксперимент, который с большой вероятностью примет другую форму, если всё пойдёт хорошо. Синтаксис выражений от контейнера, который внедряется Google, также неспецифицирован официально и тоже непонятно, что мы получим в будущем как стандарт.
UPD: Обновил статью с учётом фидбека Брайана и Николь
#css #experimental
https://bkardell.com/blog/AllThemSwitches.html
https://twitter.com/stubbornella/status/1324524942650601472
Bkardell
All Them Switches: Responsive Elements and More
In this post I'll talk about developments along the way to a 'responsive elements' proposal (aka container queries/element queries use cases) that I talked about earlier this year,
Томас Штайнер в блоге web.dev рассказал про File Handling API — "Let web applications be file handlers".
С помощью File Handling API можно открывать файлы из операционной системы в установленном pwa как в обычном нативном приложении. Это ещё один шаг в направлении сближения возможностей web и нативных платформ.
Для создания ассоциации файлов с pwa-приложением в манифесте в разделе
File Handling API находится на стадии активной разработки. На данный момент он доступен только в Chromium за экспериментальным флагом file-handling-api.
#pwa #experimental
https://web.dev/file-handling/
С помощью File Handling API можно открывать файлы из операционной системы в установленном pwa как в обычном нативном приложении. Это ещё один шаг в направлении сближения возможностей web и нативных платформ.
Для создания ассоциации файлов с pwa-приложением в манифесте в разделе
file_handlers
нужно указать соответствие между url и типом открываемых файлов. В самом приложении нужно обработать очередь файлов с помощью launchQueue
:if ('launchQueue' in window) {
launchQueue.setConsumer((launchParams) => {
// если очередь пустая, ничего не делать
if (!launchParams.files.length) {
return;
}
for (const fileHandle of launchParams.files) {
// обработка файлов
}
});
}
File Handling API находится на стадии активной разработки. На данный момент он доступен только в Chromium за экспериментальным флагом file-handling-api.
#pwa #experimental
https://web.dev/file-handling/
Буквально на днях выйдет новая версия Firefox. В неё попадут изменения с улучшением работы JS-движка SpiderMonkey. Обо всех подробностях рассказал Ян дер Моой в статье "Warp: Improved JS performance in Firefox 83".
В SpiderMonkey используется два уровня компиляции кода: Baseline JIT для быстрой генерации байткода с минимальным количеством оптимизаций и Ion для генерации оптимизированного байткода. Ion в Firefox 83 будет заменён на новый оптимизирующий JIT-компилятор Warp. Warp в отличие от Ion не использует глобально собираемую информацию о типах и использует формат представления байткода CacheIR, которое используется в Baseline JIT.
Благодаря этим изменениям удалось ускорить выполнение JS-кода и уменьшить потребление памяти. Google Docs с Warp работает на 20% быстрее, бенчмарк Speedometer — на 10-12% быстрее. Firefox с Warp потребляет примерно на 8% меньше памяти по сравнению с Ion.
Новая архитектура упростила кодовую базу. Теперь разработчикам SpiderMonkey гораздо проще добавлять новые оптимизации и фичи.
#performance #firefox #internals
https://hacks.mozilla.org/2020/11/warp-improved-js-performance-in-firefox-83/
В SpiderMonkey используется два уровня компиляции кода: Baseline JIT для быстрой генерации байткода с минимальным количеством оптимизаций и Ion для генерации оптимизированного байткода. Ion в Firefox 83 будет заменён на новый оптимизирующий JIT-компилятор Warp. Warp в отличие от Ion не использует глобально собираемую информацию о типах и использует формат представления байткода CacheIR, которое используется в Baseline JIT.
Благодаря этим изменениям удалось ускорить выполнение JS-кода и уменьшить потребление памяти. Google Docs с Warp работает на 20% быстрее, бенчмарк Speedometer — на 10-12% быстрее. Firefox с Warp потребляет примерно на 8% меньше памяти по сравнению с Ion.
Новая архитектура упростила кодовую базу. Теперь разработчикам SpiderMonkey гораздо проще добавлять новые оптимизации и фичи.
#performance #firefox #internals
https://hacks.mozilla.org/2020/11/warp-improved-js-performance-in-firefox-83/
Mozilla Hacks – the Web developer blog
Warp: Improved JS performance in Firefox 83
We have enabled Warp, a significant update to SpiderMonkey, by default in Firefox 83. SpiderMonkey, the JavaScript engine used in the Firefox
Сегодня вышел Firefox 83.
В новой версии добавлен режим HTTPS-only (выключен по умолчанию). С включенным HTTPS-only все устанавливаемые соединения будут использовать HTTPS. Если установка безопасного соединения невозможна, будет отображено сообщение об ошибке с возможностью перейти к ресурсу по HTTP. HTTPS-only включается в настройках в разделе "Privacy & Security".
В JS-движок SpiderMonkey добавлен новый оптимизирующий JIT-компилятор Warp. Благодаря ему загрузка страниц ускорилась на 15%, а общее потребление памяти снизилось на 8%. Более подробно о новом JIT-компиляторе можно почитать в предыдущем посте.
В Firefox теперь можно заполнять, сохранять и распечатывать PDF-формы AcroForm с помощью встроенного просмотрщика PDF. Добавили pinch-to-zoom в Windows (для сенсорных дисплеев) и macOS (для тачпадов). Улучшили интерфейс демонстрации экрана.
Для разработчиков не очень много изменений. В CSS была добавлена поддержка конических градиентов
#release #firefox
https://www.mozilla.org/en-US/firefox/83.0/releasenotes/
https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/83
В новой версии добавлен режим HTTPS-only (выключен по умолчанию). С включенным HTTPS-only все устанавливаемые соединения будут использовать HTTPS. Если установка безопасного соединения невозможна, будет отображено сообщение об ошибке с возможностью перейти к ресурсу по HTTP. HTTPS-only включается в настройках в разделе "Privacy & Security".
В JS-движок SpiderMonkey добавлен новый оптимизирующий JIT-компилятор Warp. Благодаря ему загрузка страниц ускорилась на 15%, а общее потребление памяти снизилось на 8%. Более подробно о новом JIT-компиляторе можно почитать в предыдущем посте.
В Firefox теперь можно заполнять, сохранять и распечатывать PDF-формы AcroForm с помощью встроенного просмотрщика PDF. Добавили pinch-to-zoom в Windows (для сенсорных дисплеев) и macOS (для тачпадов). Улучшили интерфейс демонстрации экрана.
Для разработчиков не очень много изменений. В CSS была добавлена поддержка конических градиентов
conic-gradient()
. Свойство :-moz-any()
теперь обычный алиас для :is()
. В Intl добавлен метод Intl[Symbol.toStringTag]
, возвращающий строку "[object Intl]". В инспекторе элементов DevTools у DOM-элементов, приводящих к появлению полос прокрутки, теперь отображается бейдж "scroll" (помогает при дебаге двойных скроллов на странице).#release #firefox
https://www.mozilla.org/en-US/firefox/83.0/releasenotes/
https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/83
Mozilla
Firefox 83.0, See All New Features, Updates and Fixes
Вчера вышла новая версия Chrome. Пит Лепаж рассказал про новые фичи релиза — "New in Chrome 87".
Появилась полноценная поддержка web-камер с функциями панорамы, поворота и зума (PTZ — pan, tilt, zoom). Чтобы проверить поддержку PTZ на уровне браузера нужно использовать метод
В сервис воркерах теперь работает получение чанков файлов с помощью HTTP range requests. Раньше для этого использовались разные хаки, с версии Chrome 87 они больше не нужны.
В рамках Origin Trials появилась поддержка Font Access API для получения доступа к локально установленным шрифтам. Это полезно для дизайнерских программ, например, Figma, Gravit, Photopea. Есть возможность получения доступа к потоку байтов шрифта для трансформации глифов или наложения на них векторных фильтров.
Как обычно очень много изменений в Chrome DevTools. Появился инструмент для визуального дебага гридов. Добавлена эмуляция Web Authentication API (доступна на вкладке WebAuthn). Теперь можно одновременно держать открытыми несколько вкладок из одной категории, например, Elements и Sources. Lighthouse обновлён до весрии 6.4 с поддержкой валидации предзагрузки шрифтов для
#release #chrome
https://developers.google.com/web/updates/2020/11/nic87
https://developers.google.com/web/updates/2020/10/devtools
Появилась полноценная поддержка web-камер с функциями панорамы, поворота и зума (PTZ — pan, tilt, zoom). Чтобы проверить поддержку PTZ на уровне браузера нужно использовать метод
navigator.mediaDevices.getSupportedConstraints()
, для проверки поддержки PTZ у web-камеры — MediaStreamTrack.getSettings()
.В сервис воркерах теперь работает получение чанков файлов с помощью HTTP range requests. Раньше для этого использовались разные хаки, с версии Chrome 87 они больше не нужны.
В рамках Origin Trials появилась поддержка Font Access API для получения доступа к локально установленным шрифтам. Это полезно для дизайнерских программ, например, Figma, Gravit, Photopea. Есть возможность получения доступа к потоку байтов шрифта для трансформации глифов или наложения на них векторных фильтров.
Как обычно очень много изменений в Chrome DevTools. Появился инструмент для визуального дебага гридов. Добавлена эмуляция Web Authentication API (доступна на вкладке WebAuthn). Теперь можно одновременно держать открытыми несколько вкладок из одной категории, например, Elements и Sources. Lighthouse обновлён до весрии 6.4 с поддержкой валидации предзагрузки шрифтов для
font-display: optional
, валидацией соурсмапов и экспериментальной фичей для обнаружения больших JavaScript-библиотек.#release #chrome
https://developers.google.com/web/updates/2020/11/nic87
https://developers.google.com/web/updates/2020/10/devtools
Chrome for Developers
New in Chrome 87 | Blog | Chrome for Developers
Chrome 87 is rolling out now! You can now control pan, tilt, and zoom on webcams that support it, range requests and service workers don't require as many workarounds, the font access API starts it's origin trial, and plenty more. Let's dive in and see what's…
Карл Джонсон рассказал, почему он отказался от поддержки IE11 в пользу улучшения работы сайта для браузеров с отключённым JS — "Dropping Support For IE11 Is Progressive Enhancement".
Основная мысль статьи. Число пользователей IE11 с каждым годом всё меньше и меньше, но мы продолжаем по инерции транспайлить код в ES5. В некоторых случаях надо прилагать дополнительные усилия, чтобы новая фича заработала под IE11 только для того, чтобы спустя полгода обнаружить, что она была сломана несколько месяцев назад.
Большинство команд без выделенного QA-отдела, постоянно проверяющего работу сайта в IE11, может без проблем дропнуть его поддержку. У пользователей IE11 скорее всего в системе установлен более современный браузер. Освободившиеся ресурсы можно отправить на улучшение доступности и работы сайта без JavaScript (progressive enhancement), это принесёт гораздо больше пользы.
Очень хорошая статья. Дайте её почитать вашим менеджерами, кто сомневается в пользе отказа от IE11.
#musings #ie
https://blog.carlmjohnson.net/post/2020/time-to-kill-ie11/
Основная мысль статьи. Число пользователей IE11 с каждым годом всё меньше и меньше, но мы продолжаем по инерции транспайлить код в ES5. В некоторых случаях надо прилагать дополнительные усилия, чтобы новая фича заработала под IE11 только для того, чтобы спустя полгода обнаружить, что она была сломана несколько месяцев назад.
Большинство команд без выделенного QA-отдела, постоянно проверяющего работу сайта в IE11, может без проблем дропнуть его поддержку. У пользователей IE11 скорее всего в системе установлен более современный браузер. Освободившиеся ресурсы можно отправить на улучшение доступности и работы сайта без JavaScript (progressive enhancement), это принесёт гораздо больше пользы.
Очень хорошая статья. Дайте её почитать вашим менеджерами, кто сомневается в пользе отказа от IE11.
#musings #ie
https://blog.carlmjohnson.net/post/2020/time-to-kill-ie11/
blog.carlmjohnson.net
Dropping Support For IE11 Is Progressive Enhancement
If you have to choose, you should prioritize users with no JavaScript over users with old JavaScript.
Неделя релизов продолжается. Вчера вышел TypeScript 4.1. Дениэл Розенвассер рассказал о всех изменениях в новой версии.
В TypeScript 4.1 были добавлены литеральные шаблонные типы (Template Literal Types). Благодаря им можно описывать типы, состоящие из нескольких строковых литеральных типов. Также они позволяют на уровне типов "извлекать" строковые литералы из других литералов. В рамках этой фичи были добавлены новые утилитарные типы для манипуляции строками —
С новой версии можно ремапить ключи в отображаемых типах (mapped types). Это можно использовать для фильтрации свойств объектных типов или создания новых объектных типов с ключами, использующими литеральные шаблонные типы.
Появилась полноценная поддержка рекурсивных условных типов. Полезно для описания типов рекурсивных структур. Разработчики советуют не злоупотреблять этой фичей, так как она может негативно повлиять на производительность проверки типов.
Добавлен флаг
Есть несколько ломающих изменений. Условные спрэды создают опциональные свойства. Нужно обязательно указывать параметр функции
#release #typescript
https://devblogs.microsoft.com/typescript/announcing-typescript-4-1
В TypeScript 4.1 были добавлены литеральные шаблонные типы (Template Literal Types). Благодаря им можно описывать типы, состоящие из нескольких строковых литеральных типов. Также они позволяют на уровне типов "извлекать" строковые литералы из других литералов. В рамках этой фичи были добавлены новые утилитарные типы для манипуляции строками —
Uppercase
, Lowercase
, Capitalize
, Uncapitalize
.С новой версии можно ремапить ключи в отображаемых типах (mapped types). Это можно использовать для фильтрации свойств объектных типов или создания новых объектных типов с ключами, использующими литеральные шаблонные типы.
Появилась полноценная поддержка рекурсивных условных типов. Полезно для описания типов рекурсивных структур. Разработчики советуют не злоупотреблять этой фичей, так как она может негативно повлиять на производительность проверки типов.
Добавлен флаг
--noUncheckedIndexedAccess
для более строгой проверки доступа к элементам массивов или свойствам объектов. Параметр paths
теперь можно использовать без указания baseUrl
. Теперь необязательно включать allowJs
при использовании опции checkJs
. Добавлена поддержка фабрик jsx
и jsxs
из React 17 (используются транспиляторами).Есть несколько ломающих изменений. Условные спрэды создают опциональные свойства. Нужно обязательно указывать параметр функции
resolve
у промисов. Абстрактные члены больше не могут объявляться с async
. Если в условном выражении falsy-позиция возвращает тип any`/`unknown
, то any`/`unknown
будет распространено на всё выражение.#release #typescript
https://devblogs.microsoft.com/typescript/announcing-typescript-4-1
Microsoft News
Announcing TypeScript 4.1
Today we’re proud to release TypeScript 4.1! If you’re unfamiliar with TypeScript, it’s a language that builds on JavaScript by adding syntax for type declarations and annotations. This syntax can be used by the TypeScript compiler to type-check our code…
Стэфани Стимак написала статью о том, почему элементы управления форм плохо кастомизируются и какие предпринимаются шаги, чтобы изменить эту ситуацию — "Standardizing <select> And Beyond: The Past, Present And Future Of Native HTML Form Controls".
В спецификации HTML описывается только семантика контролов, но не описывается их внешний вид и структура. Стандартные элементы управления в браузерах на заре веба представляли собой обычные нативные контролы из операционной системы, и просто не было возможности как-то привести их к единому виду на разных платформах. Позже элементы управления стали реализовываться независимо от операционной системы, но с точки зрения их кастомизации ничего не поменялось. В результате разработчики тратят много времени на создание своих элементов.
Для решения этой проблемы была запущена инициатива Open UI в рамках Web Incubator Community Group. Open UI — это каталог элементов с описанием их семантики, поведения и структуры. Работа над Open UI будет служить основой для развития спецификаций элементов управления форм.
Работа над Open UI не завершена. Стефани приглашает всех желающих присоединиться к работе над проектом.
https://www.smashingmagazine.com/2020/11/standardizing-select-native-html-form-controls/
В спецификации HTML описывается только семантика контролов, но не описывается их внешний вид и структура. Стандартные элементы управления в браузерах на заре веба представляли собой обычные нативные контролы из операционной системы, и просто не было возможности как-то привести их к единому виду на разных платформах. Позже элементы управления стали реализовываться независимо от операционной системы, но с точки зрения их кастомизации ничего не поменялось. В результате разработчики тратят много времени на создание своих элементов.
Для решения этой проблемы была запущена инициатива Open UI в рамках Web Incubator Community Group. Open UI — это каталог элементов с описанием их семантики, поведения и структуры. Работа над Open UI будет служить основой для развития спецификаций элементов управления форм.
Работа над Open UI не завершена. Стефани приглашает всех желающих присоединиться к работе над проектом.
https://www.smashingmagazine.com/2020/11/standardizing-select-native-html-form-controls/
Smashing Magazine
Standardizing Select And Beyond: The Past, Present And Future Of Native HTML Form Controls — Smashing Magazine
In this article, Stephanie dives into the past by going back to the beginning of HTML and tracing the evolution of form controls through to the present and the current state of working with them.
Летом на WWDC 2020 была представлена новая версия Safari, но только пару дней назад в блоге WebKit появился официальный пост с обзором нововведений — "New WebKit Features in Safari 14".
В Safari появилась поддержка Web Extensions — набора API для создания кроссбраузерных расширений с помощью стандартных web-технологий.
Сделано много изменений, улучшающих производительность браузера и сайтов. Загрузка новых страниц стала на 13% быстрее, загрузка ранее посещённых страниц — на 42-52% быстрее. Ускорено время закрытие табов с 3.5 секунд до 50 миллисекунд. Реализована поддержка инкрементальной загрузки PDF-файлов. Добавлена поддержка HTTP/3.
В Safari 14 появилась поддержка WebP. Теперь WebP поддерживается во всех актуальных браузерах.
Для предотвращения нежелательного сдвига контента во время загрузки отзывчивых изображений Safari определяет их размеры и резервирует место на основе значений атрибутов
Появилась поддержка CSS-свойства
В JavaScript движок был добавлен
#release #safari
https://webkit.org/blog/11340/new-webkit-features-in-safari-14/
В Safari появилась поддержка Web Extensions — набора API для создания кроссбраузерных расширений с помощью стандартных web-технологий.
Сделано много изменений, улучшающих производительность браузера и сайтов. Загрузка новых страниц стала на 13% быстрее, загрузка ранее посещённых страниц — на 42-52% быстрее. Ускорено время закрытие табов с 3.5 секунд до 50 миллисекунд. Реализована поддержка инкрементальной загрузки PDF-файлов. Добавлена поддержка HTTP/3.
В Safari 14 появилась поддержка WebP. Теперь WebP поддерживается во всех актуальных браузерах.
Для предотвращения нежелательного сдвига контента во время загрузки отзывчивых изображений Safari определяет их размеры и резервирует место на основе значений атрибутов
height
и width
. Таким же образом резервирует место Firefox (с версии 72) и Chrome (с версии 79).Появилась поддержка CSS-свойства
image-orientation
, с её помощью можно отключить автоматическое изменение ориентации изображения. Были добавлены псевдоселекторы :is()
, :where()
. Добавлен line-break: anywhere
для разбиения длинных строк.В JavaScript движок был добавлен
BigInt
, были добавлены операторы логического присваивания &&=
, ||=
, ??=
, реализована поддержка optional chaining. Добавлена поддержка EventTarget
.#release #safari
https://webkit.org/blog/11340/new-webkit-features-in-safari-14/
WebKit
New WebKit Features in Safari 14
With the release of Safari 14 for macOS Big Sur, iPadOS 14, iOS 14, and watchOS 7, WebKit brings significant improvements to performance and privacy along with a host of new features for web developers.
Нейт Шлосс и Эндрю Комминос рассказали про новое API для эффективной обработки событий пользователя — "Better JS scheduling with isInputPending()".
Для того чтобы страница оставалась отзывчивой при выполнении тяжёлых задач, их разбивают на большое количество мелких подзадач, обработка которых происходит с помощью
Новое API
#performance #js
https://web.dev/isinputpending/
Для того чтобы страница оставалась отзывчивой при выполнении тяжёлых задач, их разбивают на большое количество мелких подзадач, обработка которых происходит с помощью
setTimeout
. Благодаря такому подходу браузер сохраняет отзывчивость. Проблема в том, что такое переключение для выполнения подзадач небесплатно, и если этот паттерн используется для начальной инициализации приложения, то общее время инициализации будет больше времени инициализации без этого паттерна.Новое API
isInputPending
, которое было предложено и реализовано в Chromium инженерами Facebook, позволяет разрешить эту дилемму. С помощью isInputPending
можно проверить, есть ли в текущей очереди задач пользовательские события, которые требует немедленной обработки. Таким образом можно планировать новые итерации выполнения подзадач точечно, ускоряя общее время выполенения кода.isInputPending
был добавлен в Chrome 87. Разработчики других браузеров на данный момент не заинтересованы в его добавлении.#performance #js
https://web.dev/isinputpending/
Chrome for Developers
Better JS scheduling with isInputPending() | Capabilities | Chrome for Developers
A new JavaScript API that may help you avoid the trade-off between load performance and input responsiveness.
Прошло две недели с момента последней публикации про канал для патронов. За это время в Defront Plus было опубликовано много постов:
— Польза шаблонных литеральных типов в TypeScript
— Почему разработчики Sketch не переходят на web-платформу
— Сложности создания своего комбобокса
— Мгновенная навигация по истории браузера с помощью Back/Forward Cache
— Почему нужно использовать interface вместо type в TypeScript
— Принцип работы замены фона в Google Meet
— 5 самых надоедливых фич сайтов для незрячих пользователей
— Улучшение сжатия Brotli
— Пайплайн компиляции WebAssembly в V8
— 10 сценариев использования стандартного контрола загрузки файлов
Становитесь патроном канала на Patreon, чтобы получить доступ к дополнительным постам в Defront Plus. На данный момент Patreon мой единственный источник дохода; все донаты идут на покупку еды, оплату аренды квартиры и т.п.
Спасибо всем, кто читает и поддерживает Defront!
https://www.patreon.com/myshov
— Польза шаблонных литеральных типов в TypeScript
— Почему разработчики Sketch не переходят на web-платформу
— Сложности создания своего комбобокса
— Мгновенная навигация по истории браузера с помощью Back/Forward Cache
— Почему нужно использовать interface вместо type в TypeScript
— Принцип работы замены фона в Google Meet
— 5 самых надоедливых фич сайтов для незрячих пользователей
— Улучшение сжатия Brotli
— Пайплайн компиляции WebAssembly в V8
— 10 сценариев использования стандартного контрола загрузки файлов
Становитесь патроном канала на Patreon, чтобы получить доступ к дополнительным постам в Defront Plus. На данный момент Patreon мой единственный источник дохода; все донаты идут на покупку еды, оплату аренды квартиры и т.п.
Спасибо всем, кто читает и поддерживает Defront!
https://www.patreon.com/myshov
Михай Парпарита из Quip написал пост о том, как нестрогое сравнение в JS привело к повышенному потреблению CPU — "The Case of the Missing Equals Sign".
Михай столкнулся с проблемой высокого потребления CPU в production-сборке macOS приложения Quip. Quip построен на базе web-технологий и работает вунтри WebView.
С помощью профилировщика XCode был найден проблемный код — метод
#js #debug
http://blog.persistent.info/2020/11/the-case-of-missing-equals-sign.html
Михай столкнулся с проблемой высокого потребления CPU в production-сборке macOS приложения Quip. Quip построен на базе web-технологий и работает вунтри WebView.
С помощью профилировщика XCode был найден проблемный код — метод
toString()
у функции. JavaScriptCore — JS-движок, использующийся WebView, — при вызове этого метода вырезает подстроку с текстом функции из исходного кода и возвращает её как результат. Это объяснило, почему проблема не воспроизводилась до конкатенации всех файл в большой бандл. Если функция определена в очень большом файле, то выполнение этого метода приводит к повышенному потреблению CPU. Метод toString
в свою очередь вызывался неявно при нестрогом сравнении. Проблема была решена заменой нестрогого сравнения на строгое сравнение.#js #debug
http://blog.persistent.info/2020/11/the-case-of-missing-equals-sign.html
persistent.info
The Case of the Missing Equals Sign
Вчера в репозитории csswg-drafts появилось предложение об отказе от HTML и CSS в пользу JavaScript. Автор предложения серьёзно подошёл к делу и подробно объяснил мотивацию (то есть это не было троллингом). Таб Аткинс предложение прикрыл с формулировкой, что оно противоречит фундаментальным принципам платформы. По мотивам произошедших событий Хид Де Врайс — участвует в разработке стандартов — написал статью "Why it's good for users that HTML, CSS and JS are separate languages".
Хид пишет про то, что разделение логики, стилей и поведения с исторической точки зрения удачное решение. Благодаря такому разделению ответственности пользователи могут взаимодействовать с сайтами вне зависимости от типа устройств, на которых они работают. Благодаря гибкой стилизации пользователи с слабым зрением могут включить на странице контрастное отображение. Благодаря отделённому описанию поведения пользователи могут получить доступ к сайту с отключенным JavaScript.
Также в статье говорится о том, что иногда полезно абстрагировать какие-то концепции для упрощения разработки, и, возможно, закрытое предложение может в этом помочь. Но, с другой стороны, сохранение HTML, CSS и JavaScript как отдельных сущностей гораздо полезнее для обычных пользователей.
#web
https://hiddedevries.nl/en/blog/2020-11-25-why-its-good-for-users-that-html-css-and-js-are-separate-languages/
Хид пишет про то, что разделение логики, стилей и поведения с исторической точки зрения удачное решение. Благодаря такому разделению ответственности пользователи могут взаимодействовать с сайтами вне зависимости от типа устройств, на которых они работают. Благодаря гибкой стилизации пользователи с слабым зрением могут включить на странице контрастное отображение. Благодаря отделённому описанию поведения пользователи могут получить доступ к сайту с отключенным JavaScript.
Также в статье говорится о том, что иногда полезно абстрагировать какие-то концепции для упрощения разработки, и, возможно, закрытое предложение может в этом помочь. Но, с другой стороны, сохранение HTML, CSS и JavaScript как отдельных сущностей гораздо полезнее для обычных пользователей.
#web
https://hiddedevries.nl/en/blog/2020-11-25-why-its-good-for-users-that-html-css-and-js-are-separate-languages/
hiddedevries.nl
Why it's good for users that HTML, CSS and JS are separate languages
The website of Hidde de Vries, freelance front-end developer.
В блоге web.dev появилась статья про изменение семантики "same-site", и как это повлияет на передачу кук — "Schemeful Same-Site".
В будущем определение "same-site" будет включать в себя URL схему. То есть сайты
Это изменение делается для улучшения приватности и безопасности. Какое-то время можно будет сохранить передачу кук между безопасным и небезопасным контекстом, но разработчики браузеров настоятельно рекомендуют полностью перевести сайт на HTTPS.
На данный момент отправка кук работает без изменений. Для тестирования поведения сайтов с учётом новой семантики в браузерах были добавлены экспериментальные флаги:
#security
https://web.dev/schemeful-samesite/
В будущем определение "same-site" будет включать в себя URL схему. То есть сайты
https://example.com
и http://example.com
будут считаться разными, и передача кук между ними будет заблокирована для SameSite=Strict
. Подробнее про SameSite
можно почитать здесь.Это изменение делается для улучшения приватности и безопасности. Какое-то время можно будет сохранить передачу кук между безопасным и небезопасным контекстом, но разработчики браузеров настоятельно рекомендуют полностью перевести сайт на HTTPS.
На данный момент отправка кук работает без изменений. Для тестирования поведения сайтов с учётом новой семантики в браузерах были добавлены экспериментальные флаги:
schemeful-same-site
(Chrome 86) и network.cookie.sameSite.schemeful
(Firefox 79). Также в инструментах разработчика будут появляться предупреждения о проблемах с такими куками.#security
https://web.dev/schemeful-samesite/
web.dev
Schemeful Same-Site | Articles | web.dev
The definition of "same-site" is evolving to include the URL scheme, so links between HTTP and HTTPS versions of a site now count as cross-site requests. Upgrade to HTTPS by default to avoid issues where possible or read on for details of what SameSite attribute…
В блоге Polypane была опубликована статья про новое медиавыражение
В мобильных браузерах на базе Chromium пользователи могут включить опцию для уменьшения потребления траффика. На клиенте проверить статус этой опции можно с помощью
В статье есть примеры использования
На данный момент
#performance #css #js
https://polypane.app/blog/creating-websites-with-prefers-reduced-data/
prefers-reduced-data
— "Creating websites with prefers-reduced-data".В мобильных браузерах на базе Chromium пользователи могут включить опцию для уменьшения потребления траффика. На клиенте проверить статус этой опции можно с помощью
navigator.connection.saveData
. Проблема в том, что она доступна только из JS. Новое медиавыражение prefers-reduced-data
расширяет возможности адаптации страниц, делая доступным текущий статус опции на уровне стилей.В статье есть примеры использования
prefers-reduced-data
. С его помощью можно сделать условную загрузку шрифтов, изменить или отключить фон страницы, загрузить изображения меньшего объёма, отключить автовоспроизведение видео и аудио, отключить автоматическую загрузку новых данных при прокрутке страницы.На данный момент
prefers-reduced-data
доступен в Chromium-based браузерах под экспериментальным флагом.#performance #css #js
https://polypane.app/blog/creating-websites-with-prefers-reduced-data/
polypane.app
Creating websites with prefers-reduced-data | Polypane
Even though more and more people get access to the internet every day, not all of them have fast gigabit connections or unlimited data. Using the media query…
Forwarded from Typesafe & Sound
Увидел что Розенвассер активно работает над вики ТС и наткнулся на вот такое (советы по оптимизации скорости компиляции и editing experience)
https://github.com/microsoft/TypeScript/wiki/Performance
https://github.com/microsoft/TypeScript/wiki/Performance
GitHub
Performance
TypeScript is a superset of JavaScript that compiles to clean JavaScript output. - microsoft/TypeScript
Марк Ноттингэм написал статью о текущем состоянии Early Hints — "Beyond Server Push: experimenting with the 103 Early Hints Status Code".
Обычно известно, какие ресурсы будут нужны на странице. Было бы полезно каким-то образом сообщить о них браузеру заранее, чтобы он мог начать загружать код, стили, шрифты, пока бэкенд выполняет свою работу. Для решения этой задачи предназначен Early Hints — стандарт, разработанный в 2018 году инженерами Fastly (RFC8297). По своей сути Early Hints это HTTP-ответ с кодом 103 и списком ресурсов, который браузер может начать загружать перед ответом бэкенда. В HTTP/2 есть похожий механизм Server Push, но по сравнению с Early Hints он гораздо сложнее в настройке и использовании.
Пока браузеры не поддерживают эту спеку, так как она сложна в реализации. Для оценки пользы её внедрения в Google Chrome начался сбор метрик с сайтов, отправляющих экспериментальный код 103 Early Hints. Марк призывает всех желающих поучаствовать в этом эксперименте.
#http #performance
https://www.fastly.com/blog/beyond-server-push-experimenting-with-the-103-early-hints-status-code
Обычно известно, какие ресурсы будут нужны на странице. Было бы полезно каким-то образом сообщить о них браузеру заранее, чтобы он мог начать загружать код, стили, шрифты, пока бэкенд выполняет свою работу. Для решения этой задачи предназначен Early Hints — стандарт, разработанный в 2018 году инженерами Fastly (RFC8297). По своей сути Early Hints это HTTP-ответ с кодом 103 и списком ресурсов, который браузер может начать загружать перед ответом бэкенда. В HTTP/2 есть похожий механизм Server Push, но по сравнению с Early Hints он гораздо сложнее в настройке и использовании.
Пока браузеры не поддерживают эту спеку, так как она сложна в реализации. Для оценки пользы её внедрения в Google Chrome начался сбор метрик с сайтов, отправляющих экспериментальный код 103 Early Hints. Марк призывает всех желающих поучаствовать в этом эксперименте.
#http #performance
https://www.fastly.com/blog/beyond-server-push-experimenting-with-the-103-early-hints-status-code
Fastly
Exploring 103 Early Hints Beyond Server Push | Fastly
Many people think that the 103 Early Hints HTTP status code can help web performance in certain situations, but we won’t know until we get data about it, and without that data, browsers won’t support it. If your site has content like that described in this…
Андрей Печкуров — один из контрибьюторов Node.js — написал статью про оптимизацию Node.js-клиента Hazelcast — "Our Journey to a High-Performance Node.js Library".
В статье рассказывается про историю оптимизации Node.js-клиента для хранилища данных, от профилировки до конкретных оптимизаций в коде. Для профилировки они использовали библиотеку 0x. Оказалось, что в коде было много лишних аллокаций объекта
Очень интересная статья. Рекомендую почитать всем, кто работает с Node.js.
#nodejs #performance
https://hazelcast.com/blog/our-journey-to-a-high-performance-node-js-library/
В статье рассказывается про историю оптимизации Node.js-клиента для хранилища данных, от профилировки до конкретных оптимизаций в коде. Для профилировки они использовали библиотеку 0x. Оказалось, что в коде было много лишних аллокаций объекта
Buffer
. Потом нашли проблему в коде преобразования буфера в строку, решением стало использование обычного buf.toString()
. Реализовали механизм батчинга сообщений клиента и много других мелких улучшений. После всех изменений количество обрабатываемых сообщений увеличилось в три раза.Очень интересная статья. Рекомендую почитать всем, кто работает с Node.js.
#nodejs #performance
https://hazelcast.com/blog/our-journey-to-a-high-performance-node-js-library/
Hazelcast
Our Journey to a High-Performance Node.js Library
Our Node.js library went through a number of performance analysis and optimization runs and we would like to share this journey with you.
Реми Шарп поделился своими мыслями о влиянии JavaScript на доступность сайтов — "Please disable JavaScript to view this site".
Недавно Хэйдон Пикеринг — автор нескольких книг про фронтенд-разработку — сделал в своём блоге редизайн, который поставил на уши сообщество разработчиков. Если вы попробуете зайти на его сайт, с большой вероятностью вам будет предложено отключить JS, чтобы получить к нему доступ. Таким образом Хэйдон продемонстрировал своё отношение к текущим трендам web-разработки.
Для обычных разработчиков это может показаться дикостью — зачем заставлять пользователей отключать JS, чтобы попасть на сайт? Но при избыточном использовании JS подобным образом исключаются категории людей со слабыми устройствами, медленным интернетом, альтернативными средствами отображения веб-контента и т.п.
Основная мысль статьи: JavaScript настолько стал неотъемлем от веба, что мы перестали задумываться о его влиянии на доступность и воспринимаем его наличие как нечто само собой разумеющееся.
#js #musings #a11y
https://remysharp.com/2020/11/30/please-disable-javascript-to-view-this-site
Недавно Хэйдон Пикеринг — автор нескольких книг про фронтенд-разработку — сделал в своём блоге редизайн, который поставил на уши сообщество разработчиков. Если вы попробуете зайти на его сайт, с большой вероятностью вам будет предложено отключить JS, чтобы получить к нему доступ. Таким образом Хэйдон продемонстрировал своё отношение к текущим трендам web-разработки.
Для обычных разработчиков это может показаться дикостью — зачем заставлять пользователей отключать JS, чтобы попасть на сайт? Но при избыточном использовании JS подобным образом исключаются категории людей со слабыми устройствами, медленным интернетом, альтернативными средствами отображения веб-контента и т.п.
Основная мысль статьи: JavaScript настолько стал неотъемлем от веба, что мы перестали задумываться о его влиянии на доступность и воспринимаем его наличие как нечто само собой разумеющееся.
#js #musings #a11y
https://remysharp.com/2020/11/30/please-disable-javascript-to-view-this-site
Remysharp
Please disable JavaScript to view this site.
Heydon Pickering this last weekend released a redesign to their web site and upon visiting it, the contents prompted a series of interesting thoughts and ideas…
Артём Захарченко рассказал про свой подход использования моков при тестировании кода — "When should I (not) use mocks in testing?".
В статье есть примеры хорошего и плохого использования моков. Разбирается вопрос использования моков на разных уровнях тестирования: в юнит-тестах, в интеграционных тестах, в E2E-тестах.
Самое главная идея статьи — не используйте моки, если без них можно обойтись. Иногда они могут быть полезны, например, при работе со временем, датами, внешними сервисами. Но в то же время не следует ими злоупотреблять, так как они могут замаскировать проблемы, которые могут возникнуть в проде.
Хорошая статья. Рекомендую почитать всем.
#testing
https://dev.to/kettanaito/when-should-i-not-use-mocks-in-testing-544e
В статье есть примеры хорошего и плохого использования моков. Разбирается вопрос использования моков на разных уровнях тестирования: в юнит-тестах, в интеграционных тестах, в E2E-тестах.
Самое главная идея статьи — не используйте моки, если без них можно обойтись. Иногда они могут быть полезны, например, при работе со временем, датами, внешними сервисами. Но в то же время не следует ими злоупотреблять, так как они могут замаскировать проблемы, которые могут возникнуть в проде.
Хорошая статья. Рекомендую почитать всем.
#testing
https://dev.to/kettanaito/when-should-i-not-use-mocks-in-testing-544e
DEV Community
When should I (not) use mocks in testing?
What is "mocking"? Mocking in programming refers to an action of substituting a part of th...