Ви неправильно використовуєте SVG зображення в React! Правильні методи оптимізації

Поделиться
HTML-код
  • Опубликовано: 16 июн 2024
  • Ви неправильно використовуєте SVG картинки в React проєктах! У цьому відео я поясню, як правильно використовувати SVG зображення, щоб вони не потрапляли в бандл. Розглянемо різні прийоми та порівняємо їх ефективність. Дізнайтеся, як зробити ваші проєкти швидшими та більш оптимізованими! Підписуйтеся на канал і ставте лайк, якщо відео було корисним. Ваші коментарі та запитання завжди вітаються!
    #React #SVG #оптимізація #webdevelopment
    Стати спонсором каналу:
    / @maksymrudnyi
    Корисні статті по роботі з SVG:
    kurtextrem.de/posts/svg-in-js
    www.jacobparis.com/content/sv...
    jakearchibald.github.io/svgomg/
    Буду вдячний за підтримку каналу:
    Patreon - / rudnyi
    BuyMeACoffee - www.buymeacoffee.com/maksymru...
    Mono Bank - send.monobank.ua/jar/6oqhydjLGp
    або так - 5375 4114 0505 7287
    Приват банк - 4627 0551 1331 6110
    Давайте дружити:
    Telegram ↣ t.me/maksymrudnyi
    Telegram чат ↣ t.me/joinchat/H4AF4W4dfGeGepNQ
    INSTAGRAM ↣ / maksym_rudnyi
    TWITTER ↣ / maksymrudnyi
    FACEBOOK ↣ / travelscode
    WEB-SITE ↣ travelscode.com/
    GITHUB ↣ github.com/MaksymRudnyi/
    Другий RUclips канал ↣ / travelscode
  • НаукаНаука

Комментарии • 30

  • @YevhenZhuchenko
    @YevhenZhuchenko 11 дней назад +2

    Корисно, дякую! Ще один варіант - старий, добрий іконочний шрифт. Ще в роки коли працював з Галпом, часто генерував іконочні шрифти з svg файлів

    • @MaksymRudnyi
      @MaksymRudnyi  11 дней назад

      Це теж цікавий варіант, нажаль такого я не робив. А може і на щастя))

    • @andrewebdev
      @andrewebdev 9 дней назад

      @@MaksymRudnyi svg програє іконочному шрифту по якості відображення (рендерінг) як мінімум у хромі, за інщі браузери не знаю, це добре видно на маленьких іконках ~ 24px

  • @user-jc4ys6nr3t
    @user-jc4ys6nr3t 11 дней назад +2

    інформативно. дякую )

  • @skif_lviv
    @skif_lviv 10 дней назад +2

    Прям меланхолія...) Давно таких потреб не було вже, крайній раз років 10 назад на одному проекті спрайтфайл генерили скриптом з папки іконок при деплої і потім аякс запитом забирали спрайтфайл і вставляли в боді як хтмл, і через use спокійно користувались по сторінці, оскільки айдішнік співпадав завжди з назвою файлу іконки не було проблем з ідентифікацією

    • @MaksymRudnyi
      @MaksymRudnyi  10 дней назад

      Так найцікавіше що за 10 років нічого і не змінилось) Просто зараз багато кому лінь таким займатись або виористовують шрифти або пакети іконок. Та й швидкість інтернету уже не та. Можна "забити" на такі оптимізації.

  • @AI-su3ds
    @AI-su3ds 11 дней назад +1

    Ого, 33 хвилини на цю тему... цікаво) тІльки відкрив відео

    • @MaksymRudnyi
      @MaksymRudnyi  11 дней назад

      Трохи переборщив, треба було урізати, але інформації багато. Ще забув згадати пару інструментів, але то уже колись розповім окремо.

  • @oleksandrsalivon
    @oleksandrsalivon 11 дней назад +4

    Нажаль не розкрита частина, коли тобі потрібно змінювати розмір іконок в залежності від розширення екрана чи інших чинників, змінювати кольори в залежності від зовнішніх параметрів (якщо від 0 до 5 то червоний, від 5 до 10 синій більше 10 фіолетовий), не описано як змінювати кольори якщо картина має декілька кольорів при ховері чи зміні тих самих зовнішніх параметрів. Все це в компонент прокидаю як пропси.
    Svgr додає в vite як частина бандлу чи ні? Якщо додає SVG як частину бандлу то чому вони роблять саме так якщо цей підхід поганий.

    • @MaksymRudnyi
      @MaksymRudnyi  10 дней назад

      - зміна розміру іконок - це робиться через CSS та медія квері. Я показав як зробити зображення щоб кастомізувати через CSS.
      - кольори аналогічно змінюються за допомогою CSS .
      - якщо потрібно кольори від певних умов (від 0 до 5) умовно то змінюєте клас або батьківському елементу вказуєте колір щоб SVG наслідував.
      - якщо декілька кольорів, то зрозуміло що там набагато складніша логіка або таки передавати усе пропсами. Тут буде виправдане використання картинок як JSX
      - svgr додає в бандл. Він дає можливість імпортувати svg як Реакт компонент щоб вручну не переносити в JSX
      - хто робить так? Цей підхід не поганий, він має свої місця для застосування. Як я казав у відео, наприклад логотипи на сайті додавати в бандл потрібно. Так буде швидше рендеритись.
      Взагалі, у відео ще багато чого не розкрито, але то уже треба цілий курс робити, а такої цілі в мене не було.

    • @oleksandrsalivon
      @oleksandrsalivon 10 дней назад

      @@MaksymRudnyi тобто частина коментаря пропущена. Як змінювати розмір в залежності від вхідних параметрів, так само як я вказав про колір. Медіаквері тут не працюють. Також не працює коли багато кольорів і їх тре всі змінювати.

  • @antonmalenkij1780
    @antonmalenkij1780 11 дней назад +1

    Супер класне відео. Може трохи затягнуто. У Next js немає проблеми бандла для статики.

    • @MaksymRudnyi
      @MaksymRudnyi  10 дней назад

      Знаю що затягнуте. Треба скорочувати. У Next може і нема, але якщо розробник спеціально запихає SVG у JSX компонент то тут жоден фреймворк не допоможе .

  • @sergiigulaga1486
    @sergiigulaga1486 8 дней назад

    До тегу ще є питання в плані SEO та індексації сторінок тим же google. Коли в нас іконки по типу email, phone, search та інше то їх потрібно класти як pseudo-elements щоб вони не відносились до основного контенту на сторінці сайту. Тоді вони теж не додаються до bundle тк як такий метод є частиною CSS. Но тут виникає інше питання, якщо в нас HeadlessCMS і в нас усі іконки прилітають через api call, то як тоді їх відображати щоб вони не попали в основний контент та тег ?

  • @docshark11
    @docshark11 8 дней назад +1

    А як на разунок варіанту яки дуже часто зустрічається в статтях?
    Не розглядали такий варіант?
    import { ReactComponent as Logo} from './logo.svg';

    • @MaksymRudnyi
      @MaksymRudnyi  8 дней назад +1

      Так це і є svgr. Я у відео його згадував. Тільки там для Vite чомусь ще хеш тег вкінці назви файлу треба. Може щось недоконфігурував. А приклад що ви показуєте - це топовий приклад. Я зараз на роботі на проєкті використовую інколи такий підхід. В нас WebPack налаштований. У будь-якому разі, цей файл кладеться в бандл проєкту. Ще що зручніше лише, не потрібно вручну створювати JSX компонент.

  • @ThePashkinz
    @ThePashkinz 10 дней назад +1

    Дуже корисно! Але є одне але - якщо ui-kit окремо, і використовується декількома проектами, то тут уже спрайт не підійде, бо як його зробити доступним як медіа ресурс в основному проекті. Чи може є способи, що можуть зробити доступими всі файли, спрайт із ui-kit, щоб було певне посилання на ресурс...

    • @MaksymRudnyi
      @MaksymRudnyi  10 дней назад

      У відео я ж не всі варіанти використання розповідаю. Зі спрайтами проблем багато. Якщо у Вас декілька команд то все рівно можна спробувати, але треба щоб при білді спрайти створювався скриптом а кожен розробник по id витягував потрібен йому.
      У будь якому випадку все залежить від команди і як вони захочуть.

  • @Romul3003
    @Romul3003 10 дней назад +1

    Якщо у вас дуже багато іконок і ви всі їх завертаєте у спрайт, він буде величезним і буде вантажитись кожен раз при завантаженні або перезавантаженні сторінки, чи є це зручно. коли у мас умовно вантажиться мегабайт спрайту?

    • @MaksymRudnyi
      @MaksymRudnyi  10 дней назад

      По перше, дуже дивно що у вас svg на цілий мегабайт. По друге, ви їх і так будете тягнути, але або запхавши у бандл або окремо.
      По друге, треба думати раціонально. Якщо можна розбити на кілька спрайтів то треба так робити.
      По третє, не все треба в спрайти. Ніхто не забороняє просто картинки з public завантажувати. Тут головне щоб вони в бандл не йшли. Їх не обов'язково в спрайти запихати. Більш того, зараз такими оптимізаціями уже ніхто і не хоче займатися .
      По четверте, якраз при перевантажені сторінок такі спрайти в кеші залишаються.

  • @boyywnkobe
    @boyywnkobe 9 дней назад

    який у вас мак?

  • @vladprodan7010
    @vladprodan7010 11 дней назад

    а webp використовуєте?

    • @MaksymRudnyi
      @MaksymRudnyi  11 дней назад

      Ні. на поточному проєкті лише SVG або звичайні png, jpeg. З webp хочу розібратися і зняти окреме відео.

  • @TheCAJLO
    @TheCAJLO 11 дней назад +2

    а в чому проблема використовувати public/sprite.svg ?

    • @MaksymRudnyi
      @MaksymRudnyi  11 дней назад +1

      А я там у відео казав. Проблеми особо нема, лише на прев'ю в IDE не видно що там за картинки. Тому краще їх окремо зберігати і білдити коли треба

    • @TheCAJLO
      @TheCAJLO 11 дней назад

      @@MaksymRudnyi я для цих цілей використовую vscode + svg-sprites-viewer ... Єдине що до мініса можна віднести, я люблю WebStorm