Должен ли я отображать SVG в правильном размере или я должен уменьшить их и позволить браузеру изменить их размер?

SVG — это векторы, поэтому они могут масштабироваться без потери качества.

Зная это, мой разум говорит, зачем мне вообще использовать SVG правильного размера. Мне кажется, что тот же размер SVG в 100px x 100px намного больше по размеру, чем в 10px x 10px.

Итак, вопрос в том, должен ли я пойти на меньший размер файла и позволить браузеру изменить размер изображения, или лучше обслуживать изображение с правильным размером, чтобы браузеру не приходилось выполнять какое-либо изменение масштаба (принимая во внимание, что во многих случаях из-за отзывчивости ему придется сделать это в любом случае).

Я знаю, что это может попасть в категорию микрооптимизации, но кажется, что многие из моих SVG могут быть значительно меньше, и это может помочь с оценкой скорости страницы Google.


person Eoin    schedule 12.02.2021    source источник
comment
Самая большая ошибка с SVG — это НЕ снижать точность с помощью таких инструментов, как jakearchibald.github.io/svgomg.   -  person Danny '365CSI' Engelman    schedule 12.02.2021
comment
@ Danny'365CSI'Engelman, просто чтобы уточнить - вы говорите, что следует снизить точность, верно? Там не поспоришь.   -  person Codebling    schedule 12.02.2021
comment
Да, уменьшить точность; и если вам нужна точность, например: M20.3 7.9L30.7 21.3, рассмотрите возможность умножения viewBox на 10   -  person Danny '365CSI' Engelman    schedule 12.02.2021


Ответы (2)


Когда размер SVG имеет значение

Размеры в SVG довольно произвольны, поскольку это векторный формат, макет выполняется с помощью математики и поэтому не зависит от указанного вами размера.

Однако, если SVG визуализируется на странице, а затем изменяется размер, это может иметь значение на этапе визуализации.

Это связано с тем, что все SVG создаются, а затем преобразуются в растровые изображения для отображения. Таким образом, если у вас есть гигантское изображение, поскольку вы установили размер с помощью cm, а браузер еще не рассчитал его окончательную ширину, вы можете столкнуться с ситуацией, когда выполняется много ненужной работы по рендерингу.

Это крайний случай, поэтому он вряд ли повлияет на большинство сайтов, особенно если их критический CSS встроен и т. д.

Единственный другой случай, когда это имеет значение, — это если ваш CSS не может быть применен правильно по какой-либо причине. Но на большинстве сайтов гигантские SVG не будут самыми большими вещами, которые сломаются, если CSS по какой-либо причине выйдет из строя, так что еще раз, очень второстепенный момент.

Подводя итог: не беспокойтесь об этом, в 99,9% случаев это не стоит усилий и будет работать одинаково хорошо.

Оптимизация SVG для повышения производительности.

Оптимизация SVG больше связана с удалением ненужных узлов (поэтому, если вы отображаете SVG размером 10 на 10 пикселей, возможно, стоит удалить некоторые узлы и упростить SVG для экономии байтов и сложности рендеринга за счет Detail.) и оптимизация SVG за счет упрощения сложных путей и устранения раздувания.

отличным инструментом для минимизации SVG является SVG OMG, вот тут вы увидите прирост производительности за счет меньшего количества байтов и упрощенных путей и т. д.

Последняя мысль

У меня есть сайт, который очень сильно загружен SVG, кроме сложности DOM, его размер крошечный, всего 80 КБ в сжатом виде (как SVG можно минимизировать и сжать, поскольку это просто текст), я полагаю, что ваше время лучше потратить на оптимизацию в другом месте, если вы уже не набрали 95+ баллов в Page Speed ​​Insights.

person Graham Ritchie    schedule 12.02.2021
comment
Я подумал, что это может быть ответом. Я попробую SVG OMG (веселое название). Ваш сайт потрясающий. - person Eoin; 12.02.2021
comment
Спасибо, Эоин, SVG OMG великолепен, поэтому я надеюсь, что он сэкономит вам несколько КБ! Удачи в проектах, над которыми вы работаете! - person Graham Ritchie; 12.02.2021
comment
Отличный ответ! Мой ответ в основном касается/придирается только к небольшой части вопроса, поэтому я рад, что кто-то еще (вы) смог предоставить остальную информацию. (и Эоин прав, ваш сайт потрясающий!) - person Codebling; 12.02.2021
comment
Спасибо за ссылку на инструмент SVG OMG. Мой текущий SVG был создан в Photoshop и имеет viewBox=0 0 3813 688, учитывая, что он загружается только на моем сайте с разрешением 220x40px, должен ли я сначала воссоздать SVG из Photoshop с точным физическим размером, прежде чем отправлять его через SVG OMG? Мой текущий SVG весит всего 2,8 КБ, а SVG OMG может уменьшить его до 1,6 КБ. - person MitchellK; 19.04.2021
comment
Ваше поле просмотра не имеет большого значения для SVG, все, что оно делает, это определяет эй, пожалуйста, покажите все пути, которые появляются в этих координатах. Так что не имеет значения, меньше ли окно просмотра SVG. Важно количество путей и точек на этих путях, с которыми поможет SVG OMG, поэтому я полагаю, что короткий ответ (особенно с файлом размером 2,8 КБ) — просто оставить все как есть и запустить его через SVG OMG. - person Graham Ritchie; 19.04.2021

Как вы сказали, SVG — это векторы.

я должен пойти на меньший размер файла

Вы не можете уменьшить размер файла SVG. XML-код SVG остается прежним, даже если вы уменьшите заявленный DPI или размер пикселя SVG.

Изменится ли размер файла SVG при изменении viewBox?

Обычно не будет, или, по крайней мере, не сильно. Вот запутанный пример, в котором это БУДЕТ измениться.

Вот оригинальная (маленькая) версия:

<svg viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg">
  <rect y="5" x="5" width="2" height="2"></rect>
  <circle cx="5" cy="5" r="20%" fill="white"></circle>
</svg>

Теперь давайте увеличим размер viewBox. Нам нужно пропорционально увеличить абсолютные координаты всех элементов.

<svg viewBox="0 0 10000000 10000000" xmlns="http://www.w3.org/2000/svg">
  <rect y="5000000" x="5000000" width="2000000" height="2000000"></rect>
  <circle cx="5000000" cy="5000000" r="20%" fill="white"></circle>
</svg>

В результате получается то же изображение, но на 48 байт больше (28%!). На 48 байт больше БЕЗ УЧЕБНОЙ ПРИЧИНЫ — представленное изображение точно такое же, с таким же уровнем точности.

Этот пример запутан, потому что большинство SVG не будут такими — они будут использовать числа с плавающей запятой, и даже если десятичная (буквальная .) позиция сдвинется, количество цифр не изменится — так что будет немного или нет разницы в размерах.

Если вы изменяете размер viewBox и масштабируете все значения и действительно видите разницу, то это похоже на запутанный пример выше, ЛИБО вы фактически теряете точность, потому что изменение масштаба уменьшает количество цифр в значениях с плавающей запятой, что снизит качество конечного изображения.

person Codebling    schedule 12.02.2021
comment
Если вы посмотрите на размер КБ, он меняется в зависимости от размера файла viewBox. Это правда или я ошибся? - person Eoin; 12.02.2021
comment
@Eoin это возможно, но я думаю, что это в основном неправильно. Я собираюсь обновить ответ, так как здесь недостаточно места - person Codebling; 12.02.2021
comment
@Eoin обновил ответ, надеюсь, что это прояснит - дайте мне знать, если я в чем-то ошибаюсь - person Codebling; 12.02.2021
comment
Ваше изображение стало всего на 48 байт больше, так как вы добавили 48 байтов символов (6 нулей x 8 знаков)! Фактический размер в действительности не меняется, как вы сначала сказали. - person Graham Ritchie; 12.02.2021
comment
@GrahamRitchie именно то, что я пытаюсь донести - я должен это уточнить? - person Codebling; 12.02.2021
comment
Возможно, просто потому, что увеличение на 28% выглядит пугающе, и мы все знаем, что люди не умеют правильно читать :-P хе-хе. Я просто указал, что ваш первый ответ был точным в любом случае! - person Graham Ritchie; 12.02.2021
comment
ха-ха :) Может быть, это нуждается в какой-то смелой оговорке рядом с этим - person Codebling; 12.02.2021
comment
количество раз, когда я добавляю заявления об отказе от ответственности, на самом деле довольно тревожно, лол! +1 ты как понял я этого не делал :-) - person Graham Ritchie; 12.02.2021
comment
@GrahamRitchie, теперь у моего ответа больше голосов, чем у твоего, что неправильно, потому что твой ответ на самом деле отвечает на больше вопросов, чем мой. Думаю, никто из нас не играет в эту игру из-за волшебных интернет-точек, хотя они и помогают повысить мою уверенность в себе. - person Codebling; 12.02.2021
comment
О нет, я нарцисс, баллы значат для меня гораздо больше, чем должны ???????? Тогда я могу отозвать свой голос. ???? - person Graham Ritchie; 12.02.2021