Піктограми SVG проти піктограм PNG на сучасних веб-сайтах


92

Мені цікаво, чому так мало сучасних веб-сайтів все ще використовують лише PNG для піктограм (але це припущення лише базується на моєму спостереженні). Наразі я знаю, що основними причинами використання PNG над SVG є IE8 і те, що SVG використовує більше потужності центрального процесора (але я не вірю, що це проблема для простих піктограм 1К). Я бачу (і ми зараз використовуємо) багато переваг у використанні SVG, або коли він використовується як спрайт, як зображення, або як вбудований SVG.

(Запитання Шукаємо дослідження: PNG Sprite проти SVG спрайт проти шрифтів Icon фокусується на продуктивності та не має відповідної відповіді, Icon Font проти SVG кешування та мережевий інтерес зосереджується на мережевому трафіку, але його легко вирішити, наприклад, шляхом шаблонування.)

Якщо новий веб-сайт підтримує лише сучасні браузери, чи є причина не використовувати SVG (або - чи є якась причина для використання PNG для піктограм)? Якщо нас не хвилює IE8, а використання SVG підтримується шаблонами та / або кешуванням, чи є якийсь улов, який можна покласти лише на SVG?


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

27
Роберте, це не здається заснованим на думках, але люди іноді переходять у зомбі-режим і просто обговорюють питання, насправді їх не читаючи.
Brigand

Я віддаю перевагу png для простоти та більш чистого DOM. Одним моментом, який слід додати до відповідей нижче, є те, що за допомогою svg ви можете динамічно змінювати колір. Якщо піктограма має три кольори: звичайний, активний та наведення курсору, це 3 зображення у форматі PNG, але лише одне svg.
CodeToad

@Robert [ZOMBIE MODE] - чудова людина :): D
QMaster

Відповіді:


105

Причини SVG може бути хорошим вибором:

  • він легко підтримує браузери будь-якого розміру, особливо з css background-size
  • Ви можете масштабувати їх вгору / вниз, наприклад, для ефекту наведення
  • Ви можете вбудовувати SVG-файли та модифікувати їх у реальному часі за допомогою JavaScript та DOM
  • ви можете стилізувати SVG та частини SVG за допомогою CSS (змінюючи кольори, контури тощо)
  • Ви можете генерувати SVG динамічно, або на клієнті, або на сервері. Через їх текстовий характер вам не потрібні бібліотеки низького рівня або потужні сервери для їх створення.

Причини PNG може бути хорошим вибором:

  • підтримка браузера
  • існуючий інструмент для створення спрайт-листів PNG
  • більшість людей мають на своєму комп'ютері редактор, сумісний з PNG
  • Ваша графіка - це фотографії або інші важкі для векторизації зображення

Інші проблеми:

  • деякі редактори SVG можуть зберігати метадані у ваших SVG, збільшуючи розмір файлу і, можливо, ненавмисно виставляючи дані
    • наприклад, коли ви експортуєте PNG у Inkscape, він / зберігає абсолютний шлях до цього каталогу у SVG, коли ви зберігаєте
    • Компресори SVG можуть це видалити, але я не тестував (сміливо редагуйте, якщо є)

Дякуємо, наші графічні люди створюють SVG в Illustrator, а потім редагують їх вручну, тому зазвичай <svg> з кількома елементами та атрибутами, тому ці занепокоєння німі - мене турбує те, що я пропустив щось серйозне, оскільки бачу майже лише переваги порівняно з класичними PNG-файлами - але це, мабуть, справді зводиться до <= IE8 або> IE8. Наприклад, стандартна піктограма з колом зі знаком плюс ще компактніша у SVG, ніж у PNG.
Роберт Голдвейн,

Так, деякі люди отримують SVG-файли від третіх сторін і не відкривають їх у текстовому редакторі або не переконують, що вони стиснуті. Просто не хотів це залишати поза увагою. Зараз виникають ті самі проблеми з PNG, що я думаю про це; часто в них зберігаються марні дані (в контексті Інтернету). Ці дані використовуються редакторами, браузерами файлів та іншими програмами. Однак це більш характерно для jpegs (камери зберігають марку, модель, об'єктив, налаштування тощо).
Brigand

1
Дякую, тому, мабуть, насправді немає жодних недоліків для використання SVG у наших проектах, і ми інтегруємо їх ще глибше. Дякуємо за вашу думку.
Роберт Голдвейн,

Правильним шляхом для векторних іконок є піктограми значків. Для мене найбільшим недоліком піктограм SVG є те, що атрибут даних у CSS не працює для IE10 / 11.
Герфрід

Хоча шрифти @Gerfried Icon мають багато проблем із доступністю. Як тільки користувач вирішить заблокувати веб-шрифти або замінити всі шрифти на свої (з яких би причин це не було), усі ці симпатичні іконки миттєво ламаються. Є резервні результати, але я сам ще не бачив 100% робочого рішення. Це не стосується зображень SVG.
tomasz86

13

Якщо ви не показуєте дуже прості фігури / конструкції або спеціально не потрібно модифікувати частини графіки за допомогою програми, немає жодного стимулу використовувати SVG. Ви можете створити PNG із розміром, що вдвічі перевищує вихідний (для дисплеїв сітківки), і при цьому розмір файлу має бути на порядок меншим - не кажучи вже про краще покриття для застарілих браузерів (не потрібно javascript чи поліфілів).

Я кажу це як той, хто створює інтерфейси з векторною графікою. Це чудовий інструмент для проектування, але для доставки / пропускної здатності / охоплення важко перевершити PNG. Вчора ввечері я протестував добре відомий логотип. CocaCola.svg становив майже 20 тис. Оскільки це був однотонний / плоский колір, я експортував як PNG-8 із 12-кольоровим стисненням палітри і довів його до 1,6 КБ (!!!). Для кількох логотипів це не є великою проблемою, але коли потрібно показати 40 з них .. ну, ви отримуєте картину.

Найкраще те, що ви можете перетворити PNG на uri даних base64 і вставити їх прямо у свою таблицю стилів. Цього не рекомендується використовувати у форматі SVG - форматі, який уже відомий проблемами продуктивності та сумісності, особливо в мобільних браузерах.

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

Щасливого проектування!


ІМО, це найкраща відповідь.
Marco Demaio

Ви повинні вказати, з яким логотипом Coca Cola ви працювали. Поточний логотип 2007 року дуже простий і становить близько 8 КБ . Це все ще ніщо в порівнянні з PNG-8, але набагато краще, ніж 20 КБ.
Калеб Тейлор

12

SVG - це круто (як добре описаний FakeRainBrigand) і виглядає чудово, але може бути досить складним. Браузер має більше роботи, коли має справу з векторними даними замість піксельних зображень. Зображення - це один елемент, у SVG може бути багато дочірніх елементів, які можна навіть додати до DOM, коли використовується вбудовано.

Я не робив жодних цінних тестів продуктивності, але з логічної точки зору SVG слід обережно використовувати, коли справа стосується продуктивності, особливо коли мова йде про мобільні браузери середнього віку (стрес CPU). Було б дуже корисно мати діаграму, де ви можете бачити потужність процесора, яку споживають 100 зображень SVG проти 100 зображень PNG на різних пристроях Android та IOS ...

Ще одна помилка, пов’язана з SVG, полягає в тому, що Tag потребує атрибута width та height для деяких браузерів Android / Samsung і будь-якого нашого старого доброго IE. А більшість сучасних редакторів SVG, таких як A *** e Illustrator, просто додають атрибут "viewBox".

Найкрутіше в SVG - це те, що він робить приємним і чітким при будь-якій щільності пікселів.


3

Це правда, png використовується майже скрізь. Я думаю, це тому, що SVG, в більшості випадків, досить марний, зображення має бути більшим (я думаю), і комп’ютер повинен регенерувати зображення щоразу, коли ви його масштабуєте (адже ви завжди масштабуєте зображення, чи не так ?) Я думаю, це найголовніша причина.


26
SVG ДУЖЕ корисні для значків, які є повсюдними на сучасних (мобільних) веб-сайтах. Вони пропонують масштабування та стилістику CSS без якісних покарань, дві важливі функції, відсутні у файлах PNG.
user1884155

З точки зору користувача, це безглуздо, але як розробник мультимедіа чудово використовувати лише один файл, який можна використовувати на будь-якому екрані і завжди зберігатиме однакову якість.
Себастьян Ромеро

2

Зазначимо, що SVG, що працює за показником, може стати жахливим. Навіть у сучасних браузерах, таких як Chrome (пише це у 2019 році!), Подібна до CMS сторінка з кількома сотнями (практично 3-800) піктограм svg буквально зависає в браузері протягом 5+ секунд, щоб закінчити рендеринг. Тим часом збільшується процесор.

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

Варіант №1: перетворення svgs у webfont (див. Таблицю продуктивності тут: http://frozeman.de/blog/2013/08/why-is-svg-so-slow/ )

Варіант №2: поверніться до простих старих файлів PNG

У таких ситуаціях, коли ви ~ ніколи не хочете робити нічого вигадливого, як модифікація кольору на льоту, і у вас є БАГАТО екземплярів SVG, старий PNG виконує цю роботу і економить день!


я не думаю, SVG має кращу продуктивність. рекомендую прочитати це: vecta.io/blog/comparing-svg-and-png-file-sizes
Гаррі Саршог
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.