Shower Presentation Engine

Yours Truly, Famous Inc.

make the web better. Vlad Antypenko - beetrot academy

Что сегодня будет

  1. Проблема
  2. Варианты решения
  3. Разбор инструмента

Еще раз

Я Владик

, люблю говорить про СSS
kharkiv
salt
salt

Проблема

make the web better. Vlad Antypenko - beetrot academy

Современные разработчики положили 🔩 на то, что является результатом их работы

Впринципе хромает качество

Проблемы новичка

я не знаю как это правильно сделать

Никто не проверяет

codeReview
и так пойдет

Для нас почему то
Качество != (Accessability & SEO )

Почему так? 🤷

Почему так? 🤷

Решения 🧞‍♂️

картинка маяк
картинка logo lighthouse
открываем инспектор
открываем аудит
открываем аудит
открываем аудит
открываем аудит
открываем аудит

Принцип работы 💡:

Очки теперь присуждаются не за выполнение правил, а за скорость.

https://www.npmjs.com/package/lighthouse

                $ npm install -g lighthouse
                $ lighthouse https://beetroot.academy/
            

https://www.npmjs.com/package/lighthouse-ci

https://www.npmjs.com/package/lighthouse

Cамый крутой кейс использования

git bot
https://github.com/GoogleChromeLabs/lighthousebot
screen of article Using Lighthouse Bot to set a performance budget
https://web.dev/using-lighthouse-bot-to-set-a-performance-budget

npm i --save-dev https://github.com/GoogleChromeLabs/lighthousebot

.travis.yml

            after_success:        
              - npm run lhouse --perf=95 https://your-app-link.com/
        
                after_success:        
                  - npm run lhouse --perf=95 https://your-app-link.com/
                
запускаем скрипт lighthousebot
пропустить ПР, если перфоманс >=95
            - npm run lhouse -- https://your-app-link.com/
            - npm run lhouse -- --perf=93 --seo=100 
https://your-app-link.com/
png vs svg
png vs svg

                
--perf # performance
--pwa # progressive web app score
--a11y # accessibility score
--bp # best practices score
--seo # SEO score

Практика

Сжимаем все текстовые файлы,
которые можно сжать (html, css, js)

Изображения конвертируем в WEBP

            var webp = require("gulp-webp");
            gulp.task("webp", function () {
                  return gulp.src("source/img/**/*.{png,jpg}")
                      .pipe(webp({quality: 90}))
                      .pipe(gulp.dest("build/img"));
              });
        

Изображения конвертируем в WEBP

            <picture>
              <source srcset="photo-01-370x209.webp" type="image/webp">
              <source srcset="photo-01-370x209.jpg" type="image/jpeg">
              <img src="photo-01-370x209.jpg"  alt="clever man">
            </picture>
        

Используйте правильные форматы для медиа

png vs svg

Опитимизируйте медиа

png vs svg
ffmpeg -i name-file.mp4 -map_metadata -1 -c:a libfdk_aac -c:v libx264 -crf 24 -preset veryslow -profile:v main -pix_fmt yuv420p -movflags +faststart -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" new-name.h264.mp4

Вынесите критический css в head

Критический CSS + прогрессивный CSS = ?

Уменьшаем CSS лениво, Денис Завгородний

Управляйте загрузкой внешних ресурсов

CSS и производительность

Помни о конечном результате

Полная проверка, после всех этапов разработки.
Знайте, что подключается на вашей странице и для чего

perfomance

Доступность

lighthouse дступность

Разберитесь с ARIA

Вам не нужно знать все aria аттрибуты наизусть. Просто обращайте на них внимание и заполняйте осмысленно fix aria

Договоритесь с дизайнером о контрасте

fix contrast

Договоритесь с дизайнером о контрасте

fix contrast fix contrast

У всего должно быть текстовое описание

текстовое описание

У всего должно быть текстовое описание

                    <li>
                      <a href="some-link.html">
                      <span class="visually-hidden" > facebook </span >
                          <i class="fa fa-facebook"> </i> 
                      </a>
                    </li>
                

У всего должно быть текстовое описание

                    .visually-hidden{
                          position: absolute !important;
                          clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
                          clip: rect(1px, 1px, 1px, 1px);
                          padding:0 !important;
                          border:0 !important;
                          height: 1px !important; 
                          width: 1px !important; 
                          overflow: hidden;
                    }
                

У всего должно быть текстовое описание

                    <li>
                      <a href="some-link.html" aria-label='facebook'>
                          <i class="fa fa-facebook">
                      </a>
                    </li>
                

Ваш HTML должен быть валидным

w3c
https://validator.w3.org/

Best Practices

Остается заданием на дом 📗

3 заповеди разработчика

1) Сделать счастливым дизайнера

2) Сделать счастливым программиста

3) Сделать счастливым следующего парня работающего с твоим кодом

Юрий Артюх

Делайте то, что приносит вам кайф

Hands on the orange typewriter in a park

Спасибо за внимание

Вопросы/Cоветы