Разработчики браузеров начинают задумываться о том, чтобы перевести HTTP-заголовок User-Agent в статус deprecated.
User-Agent не был надёжным средством для определения возможностей браузера, но тем не менее многие сайты его используют. Более того на некоторых логика работы с UA сломана, из-за чего возникают неприятные ошибки. Шима Видас решил проверить, как будут вести себя современные сайты, если на наделю отключить User-Agent. Что из этого получилось, он описал в статье "My findings after browsing the web without a User-Agent header for one week".
Большинство сайтов работало без каких-либо проблем, включая Amazon, Reddit, Instagram, Google Photos. Но в Google Docs выскакивало сообщение о том, что могут быть недоступны некоторые функции. iCloud рекомендовал использовать последние версии браузеров. Twitter переключал на старую версию сайта, а поиск Google отдавал HTML-only версию сайта. Были баги. В Google Docs перестали работать некоторые горячие клавиши, в Twitter сломалось копирование и вставка в текстовых полях. Twitch падал с ошибкой в JS из-за того, что не был учтён случай, когда
Я лично поддерживаю начинание объявить устаревшим User-Agent. Но, думаю, что этот процесс может легко растянуться на несколько лет.
#http #web
https://webplatform.news/issues/2020-03-19
User-Agent не был надёжным средством для определения возможностей браузера, но тем не менее многие сайты его используют. Более того на некоторых логика работы с UA сломана, из-за чего возникают неприятные ошибки. Шима Видас решил проверить, как будут вести себя современные сайты, если на наделю отключить User-Agent. Что из этого получилось, он описал в статье "My findings after browsing the web without a User-Agent header for one week".
Большинство сайтов работало без каких-либо проблем, включая Amazon, Reddit, Instagram, Google Photos. Но в Google Docs выскакивало сообщение о том, что могут быть недоступны некоторые функции. iCloud рекомендовал использовать последние версии браузеров. Twitter переключал на старую версию сайта, а поиск Google отдавал HTML-only версию сайта. Были баги. В Google Docs перестали работать некоторые горячие клавиши, в Twitter сломалось копирование и вставка в текстовых полях. Twitch падал с ошибкой в JS из-за того, что не был учтён случай, когда
navigator.userAgent пустая строка. Некоторые сайты начали воспринимать пользователя как бота и переставали открываться (Facebook, Arstechnica, Apple Developer).Я лично поддерживаю начинание объявить устаревшим User-Agent. Но, думаю, что этот процесс может легко растянуться на несколько лет.
#http #web
https://webplatform.news/issues/2020-03-19
webplatform.news
Web Platform News
News content for web developers written by Šime Vidas
Фредерик О'Брайен в статье "What Does A Foldable Web Actually Mean?" размышляет о будущем web в контексте распространения устройств со складывающимися экранами.
Устройств со складывающимися экранами становится больше: Galaxy, Huawei и Motorola уже выпустили девайсы с гнущимся экраном, а Microsoft анонсировала Surface Duo — устройство с двумя независимыми экранами. Для того чтобы можно было адаптировать страницы и web-приложения под такие экраны, разрабатываются новые спецификации. Microsoft работает над новой спецификацией для CSS и JavaScript API. В CSS предлагается использовать новое медиа-выражение
Маловероятно, что foldable-устройства окажут такой же эффект на web, какой в свое время оказало появление iPhone, но работа над адаптацией web-платформы уже идёт.
#mobile #web
https://www.smashingmagazine.com/2020/02/foldable-web-meaning/
Устройств со складывающимися экранами становится больше: Galaxy, Huawei и Motorola уже выпустили девайсы с гнущимся экраном, а Microsoft анонсировала Surface Duo — устройство с двумя независимыми экранами. Для того чтобы можно было адаптировать страницы и web-приложения под такие экраны, разрабатываются новые спецификации. Microsoft работает над новой спецификацией для CSS и JavaScript API. В CSS предлагается использовать новое медиа-выражение
spanning, которое будет органично вписываться в концепцию отзывчивого дизайна. Для получения информации о сегментах в JS (например, для WebGL-приложения), предлагается использовать window.getWindowSegments. Благодаря этим возможностям можно будет реализовать новые пользовательские сценарии. Например, когда на одной половине устройства отображается web-карта, а на другой — список организаций,Маловероятно, что foldable-устройства окажут такой же эффект на web, какой в свое время оказало появление iPhone, но работа над адаптацией web-платформы уже идёт.
#mobile #web
https://www.smashingmagazine.com/2020/02/foldable-web-meaning/
Smashing Magazine
What Does A Foldable Web Actually Mean? — Smashing Magazine
Foldable devices have brought with them talk of a ‘foldable web,’ and the idea that long-standing web conventions may be on the verge of a serious shakeup. Is it all hype, or is it time to get flexible?
Брайан Карделл — один из участников w3c — написал небольшую статью про проблему сломанных ссылок в вебе — "Making Sure Content Lives On..."
Брайан пишет про то, что веб — ненадёжная среда для хранения контента, который должен быть доступен в течение многих лет. Его публикации на сайтах, где он писал как приглашённый автор, исчезли навсегда, после того как эти сайты прекращали существовать. Для более надёжного сохранения контента можно использовать Internet Archive, но у него есть проблема — нет гарантий, что страница автоматически попадёт в архив.
Сейчас можно добавлять страницы в архив только вручную: с помощью специальной формы на сайте или добавив
Если публикуете контент на больших и серьёзных сайтах (habr, medium, dev.to), то стоит задуматься о том, чтобы добавлять свои статьи в Internet Archive. Я же с этого момента буду добавлять в архив все статьи из канала. Если какая-то ссылка будет сломана, то её можно будет найти в интернет архиве.
#web #experimental
https://bkardell.com/blog/ArchivingByDefault.html
Брайан пишет про то, что веб — ненадёжная среда для хранения контента, который должен быть доступен в течение многих лет. Его публикации на сайтах, где он писал как приглашённый автор, исчезли навсегда, после того как эти сайты прекращали существовать. Для более надёжного сохранения контента можно использовать Internet Archive, но у него есть проблема — нет гарантий, что страница автоматически попадёт в архив.
Сейчас можно добавлять страницы в архив только вручную: с помощью специальной формы на сайте или добавив
http://web.archive.org/save/ в начале url страницы, которую нужно сохранить. Брайан связался с техническим директором Internet Archive и сделал более удобный сервис для автоматизированного сохранения страниц. Сейчас он открыт для всех, если эксперимент будет успешен, то Internet Archive реализует что-то подобное у себя.Если публикуете контент на больших и серьёзных сайтах (habr, medium, dev.to), то стоит задуматься о том, чтобы добавлять свои статьи в Internet Archive. Я же с этого момента буду добавлять в архив все статьи из канала. Если какая-то ссылка будет сломана, то её можно будет найти в интернет архиве.
#web #experimental
https://bkardell.com/blog/ArchivingByDefault.html
Bkardell
Making Sure Content Lives On...
In which I describe a problem, share a possible solution that you can use today, and, hopefully start a conversation...
Менди Майкл написала статью про влияние вариативных шрифтов на производительность страницы — "The performance benefits of Variable Fonts".
Менди сравнила вариативные и обычные шрифты по трём показателям: количество запросов, размер загружаемых шрифтов и время до первого рендеринга. По количеству запросов у вариативных шрифтов нет недостатков — в одном файле шрифта находятся все вариации. Размер вариативных шрифтов в зависимости от ситуации может быть больше или меньше размера стандартных шрифтов, но использование формата woff2 и ограниченного набора глифов может очень сильно уменьшить размер файла. По времени до первого рендеринга стандартные шрифты могут быть лучше, так как начертания находятся в отдельных файлах, но это тоже всё зависит от ситуации. Например, если для вариативных шрифтов используется
Рекомендую почитать статью, если используете на своём сайте уникальные шрифты.
#typography #web #performance
https://uxdesign.cc/the-performance-benefits-of-variable-fonts-79af8c4ff56c
Менди сравнила вариативные и обычные шрифты по трём показателям: количество запросов, размер загружаемых шрифтов и время до первого рендеринга. По количеству запросов у вариативных шрифтов нет недостатков — в одном файле шрифта находятся все вариации. Размер вариативных шрифтов в зависимости от ситуации может быть больше или меньше размера стандартных шрифтов, но использование формата woff2 и ограниченного набора глифов может очень сильно уменьшить размер файла. По времени до первого рендеринга стандартные шрифты могут быть лучше, так как начертания находятся в отдельных файлах, но это тоже всё зависит от ситуации. Например, если для вариативных шрифтов используется
font-display: swap, то задержка рендеринга не будет большой проблемой — текст будет виден.Рекомендую почитать статью, если используете на своём сайте уникальные шрифты.
#typography #web #performance
https://uxdesign.cc/the-performance-benefits-of-variable-fonts-79af8c4ff56c
Medium
The performance benefits of Variable Fonts
When we think about web fonts and their impact on the performance on our websites we often focus on three main areas:
Вилл Тейлор опубликовал статью про основные понятия лямбда-исчисления на примере JavaScript — "An introduction to Lambda Calculus, explained through JavaScript".
Лямбда-исчисление — это вычислительная модель, в основе которой лежат чистые функции. В статье на примерах показывается, что в ней нет ничего сложного — основные принципы счисления умещаются в несколько правил. Составные части лямбда-исчисления — переменная, абстракция, аппликация. Для вычислений используется β-редукция — по сути поэтапная замена переменных в функции конкретными значениями. В статье ещё рассказывается про каррирование, связанные и свободные переменные, α-эквивалентность, ассоциативность и приоритет.
Статья не сложная. Если интересуетесь функциональным программированием, очень рекомендую почитать.
#js #math #fp
http://willtaylor.blog/an-introduction-to-lambda-calculus-explained-through-javanoscript/
Лямбда-исчисление — это вычислительная модель, в основе которой лежат чистые функции. В статье на примерах показывается, что в ней нет ничего сложного — основные принципы счисления умещаются в несколько правил. Составные части лямбда-исчисления — переменная, абстракция, аппликация. Для вычислений используется β-редукция — по сути поэтапная замена переменных в функции конкретными значениями. В статье ещё рассказывается про каррирование, связанные и свободные переменные, α-эквивалентность, ассоциативность и приоритет.
Статья не сложная. Если интересуетесь функциональным программированием, очень рекомендую почитать.
#js #math #fp
http://willtaylor.blog/an-introduction-to-lambda-calculus-explained-through-javanoscript/
www.willtaylor.blog
An introduction to Lambda Calculus, explained through JavaScript
I have recently become very interested in functional programming - using pure functional languages such as Haskell, as well as functional programming in JavaScript. One of the main areas of study that is often cited as significant for functional programmers…
Джонатан Лай из Etsy рассказал, как его команда ускорила Webpack-сборку приложения — "The journey to fast production asset builds with Webpack".
Первая версия приложения собиралась самописным сборщиком "builda". Команда Etsy занималась его поддержкой, но не успевала за развитием js-экосистемы, поэтому было принято решение перевести сборку на Webpack. Главными требованием было время сборки — не более 5 минут.
Проект состоит из более 12000 модулей, которые с учётом одиннадцати локалей собираются в 13200 ассетов. Подход "в лоб" с использованием готовых Webpack-плагинов увеличил время сборки до 40 минут (сборка с использованием legacy-сборщика проходила за 5 минут). Основная проблема заключалась в лишней работе при генерации локалей. В итоге ребятя сделали своё решение, в котором ассеты для всех локалей генерируются один раз. Решили проблему со скоростью минификации файлов. Terser-webpack-plugin в их случае неэффективно работал с большим количеством модулей из-за того, что главный поток упирался в работу с диском и сериализовывал большое количество данных перед отправкой в воркеры. Процесс минификации вынесли из сборщика в отдельный шаг пост-процессинга.
Очень интересная статья. Рекомендую почитать, если используете Webpack.
#webpack #performance
https://codeascraft.com/2020/02/03/production-webpack-builds/
Первая версия приложения собиралась самописным сборщиком "builda". Команда Etsy занималась его поддержкой, но не успевала за развитием js-экосистемы, поэтому было принято решение перевести сборку на Webpack. Главными требованием было время сборки — не более 5 минут.
Проект состоит из более 12000 модулей, которые с учётом одиннадцати локалей собираются в 13200 ассетов. Подход "в лоб" с использованием готовых Webpack-плагинов увеличил время сборки до 40 минут (сборка с использованием legacy-сборщика проходила за 5 минут). Основная проблема заключалась в лишней работе при генерации локалей. В итоге ребятя сделали своё решение, в котором ассеты для всех локалей генерируются один раз. Решили проблему со скоростью минификации файлов. Terser-webpack-plugin в их случае неэффективно работал с большим количеством модулей из-за того, что главный поток упирался в работу с диском и сериализовывал большое количество данных перед отправкой в воркеры. Процесс минификации вынесли из сборщика в отдельный шаг пост-процессинга.
Очень интересная статья. Рекомендую почитать, если используете Webpack.
#webpack #performance
https://codeascraft.com/2020/02/03/production-webpack-builds/
Etsy Engineering
Etsy Engineering | The journey to fast production asset builds with Webpack
Etsy has switched from using a RequireJS-based JavaScript build system to using Webpack. This has been a crucial cornerstone in...
С 2018 года поиск Google начал использовать для ранжирования сайтов метрики производительности. В этом году для оценки производительности будут добавлены новые метрики. Алексей Махметхажиев рассказал о грядущем обновлении в статье "Новый Google PageSpeed Insights на движке Lighthouse 6 (beta): проверьте, какие показатели будут у вашего сайта".
Будут добавлены TBT (Total Blocking Time) — время в течении которого пользователь не может взаимодействовать с сайтом после его отображения, например, из-за парсинга большого объёма js-кода. LCP (Largest Contentful Paint) — время до отрисовки самого большого фрагмента контента на странице. CLS (Cumulative Layout Shift) — метрика, показывающая насколько сильно происходит сдвиг контента при загрузке сайта.
Очень рекомендую посмотерть статью и проверить метрики производительности ваших сайтов.
#seo #performance #google
https://habr.com/ru/post/493230/
Будут добавлены TBT (Total Blocking Time) — время в течении которого пользователь не может взаимодействовать с сайтом после его отображения, например, из-за парсинга большого объёма js-кода. LCP (Largest Contentful Paint) — время до отрисовки самого большого фрагмента контента на странице. CLS (Cumulative Layout Shift) — метрика, показывающая насколько сильно происходит сдвиг контента при загрузке сайта.
Очень рекомендую посмотерть статью и проверить метрики производительности ваших сайтов.
#seo #performance #google
https://habr.com/ru/post/493230/
Хабр
Новый Google PageSpeed Insights на движке Lighthouse 6 (beta): проверьте, какие показатели будут у вашего сайта
16 марта в Google Chrome выпустили бета-версию Lighthouse 6. Финальная версия ляжет в основу замеров в новом PageSpeed Insights и консоли разработчика браузера C...
Джереми Вагнер — специалист по производительности — запустил новый канал на youtube. В первом видео он рассказал про IntesectionObserver — "Hell-bent for Webperf: The IntersectionObserver API".
IntersectionObserver API — механизм, с помощью которого можно эффективно отслеживать появление элемента внутри другого элемента или в области просмотра браузера. В видео рассказывается про примеры его использования: ленивая загрузка изображения и отображение прогресса чтения статьи. Первый пример — довольно классический сценарий использования API, про который вы могли читать в разных статьях. Второй пример мне показался более интересным. Прогресс бар на базе IntersectionObserver не влияет на плавность прокрутки страницы даже на слабых мобильных устройствах.
Рекомендую посмотреть видео, если интересуетесь темой производительности и хотите посмотреть на примеры использования IntersectionObserver API.
#performance #videoepisode
https://www.youtube.com/watch?v=3Esjyp7wnhQ
IntersectionObserver API — механизм, с помощью которого можно эффективно отслеживать появление элемента внутри другого элемента или в области просмотра браузера. В видео рассказывается про примеры его использования: ленивая загрузка изображения и отображение прогресса чтения статьи. Первый пример — довольно классический сценарий использования API, про который вы могли читать в разных статьях. Второй пример мне показался более интересным. Прогресс бар на базе IntersectionObserver не влияет на плавность прокрутки страницы даже на слабых мобильных устройствах.
Рекомендую посмотреть видео, если интересуетесь темой производительности и хотите посмотреть на примеры использования IntersectionObserver API.
#performance #videoepisode
https://www.youtube.com/watch?v=3Esjyp7wnhQ
YouTube
Episode 1: The IntersectionObserver API
In the debut episode of Hell-bent for Webperf, we a cover a bit of the IntersectionObserver API and how it can take element visibility checking from dog-slow to super fast.
Links:
Channel Twitter: https://twitter.com/hellforperf
Personal Twitter: https…
Links:
Channel Twitter: https://twitter.com/hellforperf
Personal Twitter: https…
Крейг Баклер написал неплохой пост про отладку Node.js-приложений — "How to Debug a Node.js Application: Tips, Tricks and Tools".
В статье рассказывается про разные способы отладки: от методов объекта console (
Cтатью можно почитать, если хотите узнать больше про возможности отладки Node.js.
#debug #nodejs
https://www.sitepoint.com/debug-node-app-tips-tricks-tools/
В статье рассказывается про разные способы отладки: от методов объекта console (
console.log(), console.dir(), console.count() ) до использования сторонних npm-пакетов. Довольно много инфы про VS Code. Например, он поддерживает логпойнты (логирование состояния приложения без изменения исходного кода программы). В отличие от инструментов разработчика Crhome и Firefox, где логпойнт это js-код, VS Code использует формат some denoscription {variable}.Cтатью можно почитать, если хотите узнать больше про возможности отладки Node.js.
#debug #nodejs
https://www.sitepoint.com/debug-node-app-tips-tricks-tools/
SitePoint
How to Debug a Node.js Application: Tips, Tricks and Tools
Craig Buckler presents a series of tips, tricks, techniques and tools for debugging a Node.js application.
Джим Бланди и Гарольд Киршнер из команды Firefox рассказали про то, как они оптимизировали JavaScript-отладчик в инструментах разработчика — "Future-proofing Firefox’s JavaScript Debugger Implementation".
Отладчик в Firefox состоит из фронтенда, написанного на React и Redux, и слоя интеграции с JS-движком SpiderMonkey. Именно про оптимизацию этого слоя рассказывается в статье. Одна из оптимизаций заключалась в упрощении реализации сборщика мусора. Отладчик использует Debugger API, который доступен в коде dev tools с помощью объекта
Статья очень техническая, но прочитать стоит, если интересуетесь, как работают браузеры под капотом.
#firefox #internals
https://hacks.mozilla.org/2020/03/future-proofing-firefoxs-javanoscript-debugger-implementation/
Отладчик в Firefox состоит из фронтенда, написанного на React и Redux, и слоя интеграции с JS-движком SpiderMonkey. Именно про оптимизацию этого слоя рассказывается в статье. Одна из оптимизаций заключалась в упрощении реализации сборщика мусора. Отладчик использует Debugger API, который доступен в коде dev tools с помощью объекта
Debugger. Для установки текущего состояния отладки js-кода использовался специальный флаг Debugger.enabled, который создал много проблем в реализация сборщика мусора. В процессе чистки кода от этого флага избавились, значительно упростив код в самом отладчике и js-движке.Статья очень техническая, но прочитать стоит, если интересуетесь, как работают браузеры под капотом.
#firefox #internals
https://hacks.mozilla.org/2020/03/future-proofing-firefoxs-javanoscript-debugger-implementation/
Mozilla Hacks – the Web developer blog
Future-proofing Firefox’s JavaScript Debugger Implementation
Optimizing the integration of Firefox Developer Tools with the SpiderMonkey JavaScript engine has resulted in many benefits, including the new asynchronous call stack tracking now available in Firefox Developer Edition. ...
Росс Кирслинг — участвует в разработке спецификации ECMAScript — написал статью про самую ужасающую часть спецификации — "Tales from "Ecma's Crypt": Annex B.3.3".
В JavaScript всегда была возможность использовать блоки (
Довольно сложно уместить подробный разбор статьи в небольшой пост, поэтому рекомендую заглянуть в источник, если вас заинтересовал этот кейс.
#js #specification
https://dev.to/rkirsling/tales-from-ecma-s-crypt-annex-b-3-3-56go
В JavaScript всегда была возможность использовать блоки (
{} ) не только с операторами if, while, for, но и как обособленную синтаксическую конструкцию (standalone block). Спецификация не описывала ситуацию, когда внутри блока определялась функция, поэтому исторически в разных браузерах этот сценарий был реализован по-разному. Для исправления этой проблемы в спецификацию был добавлен раздел, который фактически говорит о том, что определение функции внутри блока должно себя вести одновременно как var и let. Например, вот этот код не в strict-режиме выведет в консоль 1:var a = -1;
(function () {
const printOuter = () => console.log(a);
{
a = 1;
function a() {}
a = 2;
printOuter();
}
})();
Довольно сложно уместить подробный разбор статьи в небольшой пост, поэтому рекомендую заглянуть в источник, если вас заинтересовал этот кейс.
#js #specification
https://dev.to/rkirsling/tales-from-ecma-s-crypt-annex-b-3-3-56go
DEV Community
Tales from "Ecma's Crypt": Annex B.3.3 👻
Arguably the most horrifying part of the ECMAScript specification concerns the question: "What happ...
👍1
Разработчики Chrome и Edge в прошедшем году работали над элементами управления форм в браузере. В блоге Chromium появилась статья, в которой рассказывается о проделанной работе — "Updates to form controls and focus ".
До начала модернизации контролы выглядели разрозненно, потому что элементы добавлялись в браузер независимо друг от друга иногда с разницей в несколько лет. Некоторыми элементами управления можно было пользоваться только с помощью мыши или тачпада, так как на момент добавления этих контролов вопросы a11y не стояли так остро и ноутбуков с тач-дисплеями не существовало.
В итоге все элементы были приведены к единому внешнему виду и адаптированы под тач-устройства. У всех элементов и диалогов появилась полноценная поддержка управление с клавиатуры, например, диалогом выбора цвета теперь можно пользоваться без мыши/тачпада. Был доработан фокус у элементов. Теперь это рамка чёрного цвета с белой обводкой. Так было сделано, для того чтобы фокус был виден на светлых и тёмных фонах. Эти изменения уже доступны в Edge, включение новых элементов для пользователей Chrome запланировано в версии 83.
Для того чтобы системно собирать обратную связь по новым элементам, разработчики Edge создали сайт open-ui.org. Если вы работаете над дизайн-системой или набором компонентов, разработчики приглашают присоединиться к обсуждению элементов управления браузера.
#ux #a11y
https://blog.chromium.org/2020/03/updates-to-form-controls-and-focus.html
До начала модернизации контролы выглядели разрозненно, потому что элементы добавлялись в браузер независимо друг от друга иногда с разницей в несколько лет. Некоторыми элементами управления можно было пользоваться только с помощью мыши или тачпада, так как на момент добавления этих контролов вопросы a11y не стояли так остро и ноутбуков с тач-дисплеями не существовало.
В итоге все элементы были приведены к единому внешнему виду и адаптированы под тач-устройства. У всех элементов и диалогов появилась полноценная поддержка управление с клавиатуры, например, диалогом выбора цвета теперь можно пользоваться без мыши/тачпада. Был доработан фокус у элементов. Теперь это рамка чёрного цвета с белой обводкой. Так было сделано, для того чтобы фокус был виден на светлых и тёмных фонах. Эти изменения уже доступны в Edge, включение новых элементов для пользователей Chrome запланировано в версии 83.
Для того чтобы системно собирать обратную связь по новым элементам, разработчики Edge создали сайт open-ui.org. Если вы работаете над дизайн-системой или набором компонентов, разработчики приглашают присоединиться к обсуждению элементов управления браузера.
#ux #a11y
https://blog.chromium.org/2020/03/updates-to-form-controls-and-focus.html
Chromium Blog
Updates to Form Controls and Focus
HTML form controls provide the backbone for much of the web's interactivity. They're easy for developers to use, have built-in accessibilit...
В блоге v8 была опубликована третья часть из серии статей Марьи Хёлтэ про структуру спецификации ECMAScript — "Understanding the ECMAScript spec, part 3".
В этой статье объясняется несколько тем: разница между лексической и синтаксической грамматикой, принцип разворачивания сокращений (
Эта статья не последняя в серии — в следующей части обещают рассказать, как в спеке описывается automatic semicolon insertion (ASI).
#js #specification
https://v8.dev/blog/understanding-ecmanoscript-part-3
В этой статье объясняется несколько тем: разница между лексической и синтаксической грамматикой, принцип разворачивания сокращений (
[+In, ?Yield, ?Await] и другие) в полноценные продукции. Всё разбирается на примере того, как в спецификации описывается возможность использования ключевого слова await в качестве идентификатора в обычных функциях, и каким образом await становится недоступен в асинхронных функциях. Для полного понимания статьи нужно быть знакомым с базовыми принципами построения контекстно-свободных грамматик — будет достаточно почитать несколько абзацев на википедии.Эта статья не последняя в серии — в следующей части обещают рассказать, как в спеке описывается automatic semicolon insertion (ASI).
#js #specification
https://v8.dev/blog/understanding-ecmanoscript-part-3
v8.dev
Understanding the ECMAScript spec, part 3 · V8
Tutorial on reading the ECMAScript specification
Кэти Хемпениус на сайте web.dev опубликовала гид по решению проблем, возникающих из-за большого траффика — "Fix an overloaded server".
Если на сайт внезапно пришло большое количество пользователей, и он перестал осиливать нагрузку, то надо предпринять четыре шага:
1. Оценка — поиск причин отказов: CPU, IO, память, сеть.
2. Стабилизация — быстрые фиксы, которые позволят вернуть сайт к жизни: rate limiting, кэширование, отключение фич, которые особо сильно не влияют на бизнес-метрики, но которые потребляют ресурсы.
3. Улучшение — использование CDN и балансеров, добавление железа, использования сжатия ресурсов
4. Мониторинг — использование средств мониторинга показателей по перцентилям, чтобы средние значения не могли скрыть проблемы, которые возникают не у всех пользователей.
Статья полезная, рекомендую почитать.
#performance #backend
https://web.dev/overloaded-server/
Если на сайт внезапно пришло большое количество пользователей, и он перестал осиливать нагрузку, то надо предпринять четыре шага:
1. Оценка — поиск причин отказов: CPU, IO, память, сеть.
2. Стабилизация — быстрые фиксы, которые позволят вернуть сайт к жизни: rate limiting, кэширование, отключение фич, которые особо сильно не влияют на бизнес-метрики, но которые потребляют ресурсы.
3. Улучшение — использование CDN и балансеров, добавление железа, использования сжатия ресурсов
4. Мониторинг — использование средств мониторинга показателей по перцентилям, чтобы средние значения не могли скрыть проблемы, которые возникают не у всех пользователей.
Статья полезная, рекомендую почитать.
#performance #backend
https://web.dev/overloaded-server/
web.dev
Fix an overloaded server | Articles | web.dev
How to determine a server's bottleneck, quickly fix the bottleneck, improve server performance, and prevent regressions.
В блоге WebKit вышла статья про новинки Safari 13.1, релиз которого запланирован на весну, — "New WebKit Features in Safari 13.1".
На iPadOS появится полноценная поддержка мыши и тачпада. Чтобы контент был доступен для всех пользователей вне зависимости от устройства ввода, он не должен зависеть от тач-событий. Вместо них рекомендуется использовать Pointer Events.
Было добавлено много новых API. С помощью Web Animations API станет доступно программное управление параметрами анимаций и переходов: остановка и повторное воспроизведение анимации, изменение направления, скорости, продолжительности и т.п. Будет доступен Async Clipboard API, который предоставляет доступ к системному буферу обмена, сохраняя отзывчивость страницы. API доступен только в безопасном контексте внутри обработчиков жестов пользователя, например,
Элементы управления форм будут поддерживать новый атрибут
В CSS появится поддержка Shadow Parts для стилизации web-компонентов по месту использования. Добавлен
В JavaScript движке появится поддержка оператора nullish coalescing (
В инструментах разработчика панели Debugger и Resource объединены в единую панель Sources для более удобной отладки кода. Пояится новая вкладка Layers 3D-визаулизацией отрендеренных слоёв для упрощения поиска проблем производительности. На уровне инструментов разработчика можно адаптировать любой скрипт под свои нужды с помощью Local Overrides. Теперь также как и в Chrome Dev Tools любой скрипт может быть проигнорирован во время отладки с помощью Script Blackboxing.
Соединения с ресурсами по протоколам TLS 1.0 и TLS 1.1 будут помечаться как "Not Secure". Информация из
#safari #announcement
https://webkit.org/blog/10247/new-webkit-features-in-safari-13-1/
На iPadOS появится полноценная поддержка мыши и тачпада. Чтобы контент был доступен для всех пользователей вне зависимости от устройства ввода, он не должен зависеть от тач-событий. Вместо них рекомендуется использовать Pointer Events.
Было добавлено много новых API. С помощью Web Animations API станет доступно программное управление параметрами анимаций и переходов: остановка и повторное воспроизведение анимации, изменение направления, скорости, продолжительности и т.п. Будет доступен Async Clipboard API, который предоставляет доступ к системному буферу обмена, сохраняя отзывчивость страницы. API доступен только в безопасном контексте внутри обработчиков жестов пользователя, например,
pointerup. Реализована поддержка ResizeObserver для более гибкого управления дизайном компонентов в зависимости от размеров контейнера, а не вьюпорта. В WebRTC добавлена поддержка работы через прокси-сервисы и Dual-Tone Multi-Frequency (DTMF) для поддержки большего количества аудио-сервисов.Элементы управления форм будут поддерживать новый атрибут
enterkeyhint, с помощью которого можно изменить текст кнопки enter виртуальной клавиатуры на done, go, next, previous, search и send.В CSS появится поддержка Shadow Parts для стилизации web-компонентов по месту использования. Добавлен
line-break: anywhere для мягких переносов внутри текста. Было добавлено новое медиа-выражение dynamic-range для адаптации контента под специфические возможности экрана, например, HDR.В JavaScript движке появится поддержка оператора nullish coalescing (
?? ) и нового метода String — String.prototype.replaceAll().В инструментах разработчика панели Debugger и Resource объединены в единую панель Sources для более удобной отладки кода. Пояится новая вкладка Layers 3D-визаулизацией отрендеренных слоёв для упрощения поиска проблем производительности. На уровне инструментов разработчика можно адаптировать любой скрипт под свои нужды с помощью Local Overrides. Теперь также как и в Chrome Dev Tools любой скрипт может быть проигнорирован во время отладки с помощью Script Blackboxing.
Соединения с ресурсами по протоколам TLS 1.0 и TLS 1.1 будут помечаться как "Not Secure". Информация из
document.referrers будет доступна только оригинальному домену. Любые данные web-сайтов (Indexed DB, LocalStorage, Media keys, SessionStorage, Service Worker registrations) старше семи дней будут очищаться, если пользователь не посетит сайт в течении этого периода. Последний пункт — очень спорное решение, которое вызвало негодование среди разработчиков.#safari #announcement
https://webkit.org/blog/10247/new-webkit-features-in-safari-13-1/
WebKit
New WebKit Features in Safari 13.1
This year’s spring releases of Safari 13.1 for macOS Catalina, iPadOS, iOS, and watchOS bring a tremendous number of WebKit improvements for the web across Apple’s platforms.
Лия Веру — участвует в разработке спецификации CSS — написала статью про новый формат кодирования цветов в CSS — "LCH colors in CSS: what, why, and how?".
Цвета в CSS определены в цветовом пространстве sRGB. У sRGB есть недостаток — с помощью него нельзя закодировать все цвета, которые могут быть отображены современными экранами (примерно одна треть от всех возможных цветов). Для решения этой проблемы в спецификацию CSS Color Module Level 4 было добавлено новое представление цветов —
LCH не только покрывает большее цветовое пространство, но и позволяет работать с цветом более интуитивно. В LCH любое изменение компонент цвета на одно и то же смещение будет давать одно и то же смещение в визуальном представлении цвета. Это свойство в цветовых пространствах называется "perceptual uniformity". В HSL perceptual uniformity не поддерживается, и изменение светлоты на 20% у двух цветов, отличающихся только тоном, будет давать в результате новые цвета с визуально отличающейся светлотой.
Поддержки LCH на данный момент нет ни в одном браузере, но уже идёт работа над его внедрением в Safari.
#css #colors
http://lea.verou.me/2020/04/lch-colors-in-css-what-why-and-how/
Цвета в CSS определены в цветовом пространстве sRGB. У sRGB есть недостаток — с помощью него нельзя закодировать все цвета, которые могут быть отображены современными экранами (примерно одна треть от всех возможных цветов). Для решения этой проблемы в спецификацию CSS Color Module Level 4 было добавлено новое представление цветов —
lch() (Lightness Chroma Hue).LCH не только покрывает большее цветовое пространство, но и позволяет работать с цветом более интуитивно. В LCH любое изменение компонент цвета на одно и то же смещение будет давать одно и то же смещение в визуальном представлении цвета. Это свойство в цветовых пространствах называется "perceptual uniformity". В HSL perceptual uniformity не поддерживается, и изменение светлоты на 20% у двух цветов, отличающихся только тоном, будет давать в результате новые цвета с визуально отличающейся светлотой.
Поддержки LCH на данный момент нет ни в одном браузере, но уже идёт работа над его внедрением в Safari.
#css #colors
http://lea.verou.me/2020/04/lch-colors-in-css-what-why-and-how/
Стефан Баумгартнер написал пост про тип Symbol в JS и TypeScript — "Symbols in JavaScript and TypeScript".
Symbol используется для получения уникальных значений. С помощью символов можно разграничивать библиотечные и пользовательские данные в рамках одного объекта. Но это только одно их применение. В статье разбирается пример их использования для создания подобия enum в TypeScript, который кроме типобезопасности накладывает дополнительные ограничения в рантайме после компиляции в JavaScript:
Идея интересная, но в повседневном коде наврятли стоит использовать такой подход — обычный enum выглядит более эргономично.
#js #typenoscript #es2015
https://fettblog.eu/symbols-in-javanoscript-and-typenoscript/
Symbol используется для получения уникальных значений. С помощью символов можно разграничивать библиотечные и пользовательские данные в рамках одного объекта. Но это только одно их применение. В статье разбирается пример их использования для создания подобия enum в TypeScript, который кроме типобезопасности накладывает дополнительные ограничения в рантайме после компиляции в JavaScript:
const COLOR_RED: unique symbol = Symbol('RED')
const COLOR_GREEN: unique symbol = Symbol('GREEN')
const COLOR_BLUE: unique symbol = Symbol('BLUE')
const COLOR_BLACK: unique symbol = Symbol('BLACK')
const ColorEnum = {
[COLOR_RED]: COLOR_RED,
[COLOR_GREEN]: COLOR_GREEN,
[COLOR_BLUE]: COLOR_BLUE,
}
function getHexValueWithSymbolKeys(color: keyof typeof ColorEnum) {
switch(color) {
case ColorEnum[COLOR_BLUE]: break; // good
case COLOR_RED: break; // good
case COLOR_BLACK: break; // bad
}
}Идея интересная, но в повседневном коде наврятли стоит использовать такой подход — обычный enum выглядит более эргономично.
#js #typenoscript #es2015
https://fettblog.eu/symbols-in-javanoscript-and-typenoscript/
fettblog.eu
Symbols in JavaScript and TypeScript
symbol is a primitive data type in JavaScript and TypeScript, which, amongst other things, can be used for object properties. Compared to number and string, symbols have some unique features that make them stand out.
Недавно в Firefox была обнаружена проблема с кешированием данных в Twitter. Любой пользователь с физическим доступом к компьютеру теоретически мог прочитать чужие личные сообщения. Мартин Томсон из команды разработки Firefox рассказал, почему это произошло, в статье "Twitter Direct Message Caching and Firefox".
Чтобы предотвратить кеширование контента в браузерах, сайт должен отправить в ответе http-заголовок
Какие можно сделать выводы из этой истории? Нужно проверять работу сайта в разных браузерах (Chrome, Firefox, Safari) и не стоит полагаться на поведение браузера, которое не соответствует стандартам.
#firefox #cache #http
https://hacks.mozilla.org/2020/04/twitter-direct-message-caching-and-firefox/
Чтобы предотвратить кеширование контента в браузерах, сайт должен отправить в ответе http-заголовок
Cache-Control: no-store. В любом другом случае в Firefox начинает работать механизм эвристического кеширования. Этот механизм используется для предсказания, какой контент может быть закеширован и на какое время. Контент без Cache-Control: no-store сохраняется в кэше на семь дней. Как вы наверное уже догадались Twitter не отправлял этот заголовок в ответе из-за чего в Firefox включался механизм кеширования. Вместо него Twitter отправлял заголовок Content-Disposition, который используется для добавления метаинформации (например, имени файла) к загружаемым файлам. В статье говорится, что в "other browser" (как я понимаю Chrome) наличие этого заголовка отключает кеширование, но это поведение не является частью стандарта.Какие можно сделать выводы из этой истории? Нужно проверять работу сайта в разных браузерах (Chrome, Firefox, Safari) и не стоит полагаться на поведение браузера, которое не соответствует стандартам.
#firefox #cache #http
https://hacks.mozilla.org/2020/04/twitter-direct-message-caching-and-firefox/
Mozilla Hacks – the Web developer blog
Twitter Direct Message Caching and Firefox
Distinguished engineer Martin Thomson explains how this problem occurred, the implications for people who might be affected, and how problems of this nature might be avoided in future. To get ...
Ахмад Шадид написал статью про CSS-находки в новой версии Facebook — "CSS Findings From The New Facebook Design".
Из самого интересного. Для изменения цвета некоторых иконок используется хак с CSS-фильтрами (
В общем, узнал много нового из статьи, рекомендую почитать.
#css #facebook
https://ishadeed.com/article/new-facebook-css/
Из самого интересного. Для изменения цвета некоторых иконок используется хак с CSS-фильтрами (
filter: invert(59%) sepia(11%) saturate(200%) saturate(135%) hue-rotate(176deg) brightness(96%) contrast(94%); ). Так было сделано, чтобы поддержать смену цвета у legacy-иконок для тёмной темы. Тень заголовка сайта сделана не с помощью свойства box-shadow, а с помощью изображения. Рой Хагиги из Facebook объяснил, что box-shadow убивал производительность при прокрутке страницы, особенно это было заметно на странице с большим количеством видео — отдельные части страницы при прокрутке временно исчезали.В общем, узнал много нового из статьи, рекомендую почитать.
#css #facebook
https://ishadeed.com/article/new-facebook-css/
Ishadeed
CSS Findings From The New Facebook Design
Вчера вышла новая версия Chrome. Пит Лепаж рассказал про новинки браузера в статье "New in Chrome 81".
Было обновлено расписание релизов в связи с обстановкой в мире. Chrome 82 не будет. После версии 81 состоится релиз 83.
Был обновлён Web XR Device API. С помощью него можно будет определять поверхности реального мира и создавать приложения дополненной реальности для виртуального размещения мебели, картин и т.п.
В рамках Origin Trial доступен Badging API. Будет полезно, если вы разрабатываете PWA-приложение и хотите отобразить поверх иконки приложения количество непрочитанных сообщений. Также в Origin Trial стал доступен Web NFC для чтения и записи NFC-меток.
В JavaScript стало доступно новое INTL API
В инструментах разработчика много изменений для работы с cookies: теперь можно поменять любое значение в cookies, заблокированные cookie подсвечиваются жёлтым цветом, добавлено отображение приоритета cookies (приоритет поддерживается только в Chrome), "Copy as Node.js fetch" в меню ресурса теперь копирует данные с cookies. В симулируемые устройства был добавлен Moto G4. Манифест панели Application отображает более корректные иконки приложения. Если
#announcement #chrome #release
https://developers.google.com/web/updates/2020/04/nic81
Было обновлено расписание релизов в связи с обстановкой в мире. Chrome 82 не будет. После версии 81 состоится релиз 83.
Был обновлён Web XR Device API. С помощью него можно будет определять поверхности реального мира и создавать приложения дополненной реальности для виртуального размещения мебели, картин и т.п.
В рамках Origin Trial доступен Badging API. Будет полезно, если вы разрабатываете PWA-приложение и хотите отобразить поверх иконки приложения количество непрочитанных сообщений. Также в Origin Trial стал доступен Web NFC для чтения и записи NFC-меток.
В JavaScript стало доступно новое INTL API
DisplayNames. Благодаря ему можно получить название региона, валюты, языка, письменности по идентификатору региона, валюты и т.п.В инструментах разработчика много изменений для работы с cookies: теперь можно поменять любое значение в cookies, заблокированные cookie подсвечиваются жёлтым цветом, добавлено отображение приоритета cookies (приоритет поддерживается только в Chrome), "Copy as Node.js fetch" в меню ресурса теперь копирует данные с cookies. В симулируемые устройства был добавлен Moto G4. Манифест панели Application отображает более корректные иконки приложения. Если
content в CSS включает в себя экранированные символы, то при наведении на них курсором будет видно, что они собой представляют в реальности. Теперь ошибки парсинга source maps показывают больше информации о возникшей проблеме.#announcement #chrome #release
https://developers.google.com/web/updates/2020/04/nic81
Chrome Developers
New in Chrome 81 - Chrome Developers
Chrome 81 is rolling out now! App icon badging graduates from it's origin trial. Hit testing for augmented reality is now available in the browser. Web NFC starts its origin trial. And I've got an update on the adjusted Chrome release schedule. Let's dive…
В конце марта прошла конференция PerfMatters, на которой выступили с докладами Йоав Вайс, Пол Айриш, Арон Тёрнер и другие. Посмотрел оттуда доклад "Turbocharging Walmart.com" Васанта Кришнамурти (лид фронтенд-направления Wallmart).
Wallmart.com каждый месяц посещают 100 миллионов пользователей. Для того чтобы обеспечить наилучший пользовательский опыт, команда разработки сфокусировалась на производительности сайта. Применение всех техник, про которые рассказывается в докладе (код сплиттинг, использование сжатия brotli, resource hints и т.п.), уменьшило TTI более чем на 50%.
Из самого интересного. Использование хинта
Доклад стоит посмотреть, если вы начинаете заниматься ускорением работы сайта и хотите познакомиться с опытом других компаний.
#performance #talk
https://www.youtube.com/watch?v=vB8JUx9Dp08
Wallmart.com каждый месяц посещают 100 миллионов пользователей. Для того чтобы обеспечить наилучший пользовательский опыт, команда разработки сфокусировалась на производительности сайта. Применение всех техник, про которые рассказывается в докладе (код сплиттинг, использование сжатия brotli, resource hints и т.п.), уменьшило TTI более чем на 50%.
Из самого интересного. Использование хинта
preload продиктовано наиболее распространёнными пользовательскими сценариями работы с сайтом — на каждой странице подгружается код бандла следующей страницы, на которую с большей вероятностью перейдёт пользователь. Preload отключают, если у пользователя включён режим экономии траффика ( NetworkInformation.saveData — доступен только в CHrome). Заголовок и подвал сайта рендерятся в отдельном сервисе, благодаря чему единожды отрендеренные куски HTML переиспользуются на всех страницах.Доклад стоит посмотреть, если вы начинаете заниматься ускорением работы сайта и хотите познакомиться с опытом других компаний.
#performance #talk
https://www.youtube.com/watch?v=vB8JUx9Dp08
YouTube
Vasanth Krishnamoorthy :: Turbocharging Walmart.com :: #PerfMatters Conference
eCommerce market is highly competitive and site speed plays a major role in improving overall buying experience and fulfilling user needs. In most companies there is always a constant push and pull towards spending time adding new features vs improving performance.…