Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
background: url(image.png);
background: url(image.svg) center / auto auto;
/* auto auto - это background-size, старые версии браузеров хоть и знают про background-size, но background в такой записи проигнорируют, и отображаться будет image.png */
в svg некоторые иконки весили более 30 — 40кбЭто что-то за гранью добра и зла уже. You do it wrong.
я вот всегда пасую перед иконками в шрифтах, так как не уверен в них никогда на 100%.В статье об этом и речь в общем.
img.yandex.net/i/wiz6.png
img.yandex.net/i/wiz1.png<img src="something.svg"> продуцирует DOM элемент у которого картинка есть фактически [cached] bitmap который получается путем «проигрывания» SVG на bitmap surface. Такой bitmap живет в GPU (как текстура) Последующие paint команды это сугубо rendering той bitmap на уровне GPU — крайне эффектвно. При изменении размеров img элемента «проигрывание» SVG осуществляется по новой. Растеризация в этом случае делается CPU — может быть затратно ибо CPU он один на всех.<svg>... svg DOM elements... </svg> всегда транслируется в живое DOM под-дерево host документа. DOM access методы позволяют модифицировать содержимое такого svg island стандартным образом. CSS правила описанные в host html document позволяют стилировать в том числе элементы внутри такого <svg>. Rendering inline svg не использует caching — SVG dom элементы рисуются покомпонентно в процессе исполнения paint ( WM_PAINT на Windows, NSView.drawRect на Mac ). На Windows используется Direct2D поэтому примитивы транслируются в DirectX/GPU команды (не все, но в основном).
1. <img src="something.svg"> продуцирует... Да, все так и работает в Firefox, например. Да сколько там графики будет на среднюю страницу не контентной? Ну может быть в конце получится bitmap в метров 10. В GPU памяти хранить конечно вообще win. Но даже если решили сэкономить ее, ну можно в простую этот кэш бросить.image-rendering:-moz-crisp-edges;
image-rendering: -o-crisp-edges;
image-rendering:-webkit-optimize-contrast;
-ms-interpolation-mode:nearest-neighbor;
По части вещей вроде SVGO — я отношусь к ним довольно скептическиSVGO не только убирает лишние пробелы и строки, но и оптимизирует фигуры. Например, вот два пересекающихся квадрата, экспорт из Скетча:
Было
<rect x="0" y="48" width="110" height="110"></rect>
<rect x="48" y="0" width="110" height="110"></rect>
Стало
<path d="M0 48h110v110h-110zM48 0h110v110h-110z"/>d="…" в «Стало», то там, по сути, то же самое, но такой формат записи кажется оптимальнее для машины, плюс одна нода вместо двух.Еще для этих целей можно использовать SVGO. Кажется объединение в общий shape — это единственная его часть, которая действительно драматически влияет на производительность.Он там атрибуты какие-то и мета-инфу удаляет и вообще больше про парсинг. Еще правда близкие к целым координаты округляет — хорошая штука.
Зато перед нами открывается куча возможностей начиная от банальной смены цвета и размера, заканчивая пачкой CSS манипуляций с шрифтами, вроде тенюшек и т.д.
background-image — ничего там не изменишь уже.
SVG, Iconfonts vs PNG