Обложка канала

Defront (при поддержке Зарплата.ру) — про фронтенд-разработку и не только. Страница 4

6354 @defront

Канал про фронтенд-разработку и не только. Небольшие посты и короткие пересказы статей, приправленные авторским мнением. Ведёт канал Александр Мышов из Яндекс.Маркета.

  • Defront (при поддержке Зарплата.ру) — про фронтенд-разработку и не только

    Использование focus-visible с обратной совместимостью Патрик Лаук поделился своим подходом для управления стилями фокуса — ":focus-visible and backwards compatibility". По умолчанию браузеры отображают фокус только там, где нужно. Например, фокус не устанавливается при клике на кнопку с помощью мыши, но появляется при переходе к кнопке с помощью клавиатуры. Для пользователей это логичное поведение. Когда фокус кастомизируется с помощью псевдокласса :focus, он начинает отображаться во всех ситуациях, вызывая замешательство у пользователей и дизайнеров. Для решения этой проблемы в стандарт был добавлен псевдокласс :focus-visible, с помощью которого можно кастомизировать фокус, не ломая его стандартное поведение. Для кастомизации фокуса во всех браузерах с учётом :focus-visible Патрик советует использовать следующий подход:
    /* стилизация фокуса */
    /* в устаревших браузерах */
    button:focus {
      outline: dotted 5px teal; 
    }
    
    /* отключение стилей `:focus` */
    /* в современных браузерах */
    *:focus:not(:focus-visible) {
      outline: none !important;
    }
    
    /* стилизация фокуса */
    /* в современных браузерах */
    button:focus-visible {
      outline: dotted 5px teal; 
    }
    
    На данный момент :focus-visible поддерживается во всех браузерах (в Safari за экспериментальным флагом). #css #a11y www.tpgi.com/focus-v…tibility
    :focus-visible and backwards compatibility - TPGi

    Clearly visible focus styles are important for sighted keyboard users. However, these focus styles can often be undesirable when...

    TPGi
  • Defront (при поддержке Зарплата.ру) — про фронтенд-разработку и не только

    Ускорение установки HTTPS-соединений Саймон Харн рассказал о том, как HTTPS-сертификаты влияют на производительность сайта — "The Performance Cost of EV Certificates". Есть три основных типа HTPS-сертификатов: Domain Validation (DV), Organisation Validation (OV), Extended Validation (EV). DV-сертификаты выдаются на основе факта принадлежности домена, как в Let's Encrypt. OV- и EV-сертификаты выдаются организациям за оплату. EV-сертификат предоставляет большее количество информации для пользователя, но по-большому счёту он не сильно отличается от OV. Вы могли видеть, что сайт использует EV-сертификат, когда в адресной строке рядом с иконкой замка зелёным текстом отображался владелец сертификата. С версии Chrome 77 такие сертификаты отображаются обычным значком замка без зелёного текста. OV-сертификаты валидируются на стороне веб-сервера отправкой запроса на сервер организации, выдавшей сертификат. EV-сертификаты не могут валидироваться на стороне веб-сервера, поэтому их валидация происходит на клиенте, замедляя установку HTTPS-соединения. Задержка наиболее заметна в странах бывшего СССР, в Восточной Австралии, Канаде и большинстве стран Африки. Некоторые организации сталкивались с минутной задержкой для пользователей в Китае. Эта проблема решается переходом на OV-сертификат. #http #performance #security https://simonhearne.com/2020/drop-ev-certs/
    The Performance Cost of EV Certificates

    Extended Validation certificates are expensive and degrade performance. Move to an OV certificate if you can!

    Simon Hearne
  • Defront (при поддержке Зарплата.ру) — про фронтенд-разработку и не только

    SVGcode — конвертация растровых изображений в SVG Томас Штайнер рассказал про новый инструмент для конвертирования растровых изображений в SVG — "SVGcode: a PWA to convert raster images to SVG vector graphics". SVGCode — это PWA, с которым можно работать в вебе, оффлайн или установить локально. Поддерживаются все популярные растровые форматы — JPG, PNG, GIF, WebP, AVIF. Из коробки работает постеризация — уменьшение количества цветов изображения — для улучшения качества конвертации. Приложение создано на базе WebAssembly-версии утилиты potrace. В SVGcode есть все фичи полноценных приложений: буфер обмена реализуется с помощью Async Clipboard API, доступ к файловой системе с помощью File System Access API, есть возможность регистрации SVGCode на уровне ОС в качестве обработчика файлов. Исходный код распространяется под лицензией GPL. #svg #tool #pwa https://web.dev/svgcode/
    SVGcode: a PWA to convert raster images to SVG vector graphics

    Convert color or monochrome bitmap images (PNG, JPG, JPEG, WEBP, AVIF, GIF,…) to color or monochrome vector images (SVG).

    web.dev
  • Реклама

  • Defront (при поддержке Зарплата.ру) — про фронтенд-разработку и не только

    Не пишите квадраты Степан Зубашев критикует современные тренды написания JavaScript-кода — "Обращение к Javascript-сообществу: перестаньте писать квадраты". Популярность функциональных методов для работы с массивами и современные фичи JavaScript открыли двери для очень лаконичного кода. Но иногда чрезмерное увлечение лаконичностью приводит к падению производительности. В статье на примере использования .concat() внутри .reduce() рассказывается, почему это может оказаться серьёзной проблемой.
    source.reduce(
      (acc, item) => acc.concat(func(item)),    
      [] 
    );
    
    В данном случае на каждую итерацию происходит копирование всех элементов старого массива в новый, который возвращается .concat(). Создание нового массива происходит для каждого элемента source, таким образом сложность кода получается квадратичной. С подобной проблемой столкнулись разработчики из вчерашней статьи. Степан призывает не ставить в абсолют краткость кода и задумываться о производительности. #js #algorithm #performance https://habr.com/ru/post/590663/
    Обращение к Javascript-сообществу: перестаньте писать квадраты

    Disclaimer: в этой статье будет очень много бредовых примеров и сверх очевидных утверждений. Если для вас предельно очевидно, что ... внутри .reduce даёт вам O(n^2), то можно сразу прыгать к разделу...

    Хабр
  • Defront (при поддержке Зарплата.ру) — про фронтенд-разработку и не только

    Поиск причины деградации времени сборки Webpack 5 Оуэн Хэннесси поделился историей поиска бага, из-за которого время запуска dev-сервера Webpack замедлилось в пятнадцать раз — "Understanding why our build got 15x slower with Webpack 5". Проблема возникла после добавления невинной тёмной темы. Первые подозрения упали на CSS-in-JS-библиотеку Linaria. С помощью профилировщика внутри библиотеки была найдена проблемная функция, в которой использовался метод массива .concat(). Переписывание кода без использования .concat() решило проблему. Однако оставались вопросы, из-за того что в оригинальном коде просадки скорости не было при сборке проекта с помощью Webpack 4. Надо было исследовать исходники V8. В V8 у метода .concat() есть две ветки выполнения кода — медленная и быстрая. Медленная ветка начинает работать в том случае, если движок хотя бы один раз устанавливал Symbol.isConcatSpreadable. В Webpack 5 это происходило в коде, отвечающем за обратную совместимость с четвёртой версией. Для решения проблемы разработчики Webpack добавили экспериментальную опцию backCompat, которая полностью отключает обратную совместимость, избавляясь от ещё большего количества проблемного кода. #v8 #performance #webpack engineering.tines.com/blog/un…-webpack
    Understanding why our build got 15x slower with Webpack 5 - Tines Engineering

    A while back, we encountered an odd problem. All of a sudden, building our front-end went from taking a few seconds to taking a few minutes. We felt this most acutely when starting our front-end development server.

    Tines