Как мы можем кэшировать встроенный SVG в браузерах?
SVGs существуют в течение многих лет из-за его масштабируемости, и давно известно, что преимущество встроенного SVG заключается в том, что можно манипулировать им с помощью CSS и JS, и когда мы хотим повторить тот же SVG над html-документом, мы можем использовать <use>
тег для ссылки на оригинальный элемент. Кроме того, встроенные SVGs также могут уменьшить количество HTTP-запросов.
однако многие статьи предполагают (без объяснения деталей), что, хотя мы используем встроенный SVG для сохранения HTTP-запроса, он больше не кэшируется браузером как отдельная тема, что означает, что он не может быть повторно использован на страницах.
поскольку я широко использую встроенные SVGs для проекта, я хотел бы точно знать, как встроенный SVG (известный элемент html5, который является рекомендацией w3c) может быть кэширован в браузерах при использовании SVGs с <img>
тег или background-image
кэшируются.
если DOM кэшируется, то почему не может SVG DOM ? (который основывается и совместим с уровнем DOM 2. Ref:https://www.w3.org/TR/SVG/svgdom.html)
пока решение я придумал кэширование-это использование схема URI данных (Также См.: оптимизация svgs в uris данных ) Но при этом он теряет возможность иметь дело с CSS и JS для стилизации и манипуляции.
несколько примеров в интернете предлагают использовать JS для загрузки кэшируемого ресурса или путем замены элементов-заполнителей, таких как <object>
tag, а также использование хранилище localStorage, CacheStorage и Работник Сервиса. Но мне все еще нужны некоторые направляющие линии, чтобы начать добиваться идеального решения.
может кто-нибудь пролить на меня свет, пожалуйста?
-
-
-
Ref:кэширование Спрайта SVG в localStorage
Ref:встроенный SVG и кэширование
Ref:SVG В ИНТЕРНЕТЕ
1 ответов
основное кэширование HTTP работает на основе URL-адресов, и это "все или ничего" - вы можете поручить клиенту либо взять весь ресурс из кэша, либо перезагрузить его полностью.
теперь, "вставляя" ваши SVGs, вы делаете их частью HTML-документа - они больше не являются внешними ресурсами, которые можно индивидуально проверить, могут ли они быть взяты из кэша или должны быть перезагружены.
Итак, если у вас есть три HTML-документа, которые имеют одинаковый SVG изображение встроено, код изображения будет загружен три раза -, потому что это часть трех документов HTML.
тогда как, если изображение было встроено в качестве внешнего ресурса (как img, background-image, object, ...), оно будет загружено только один раз, на первой из этих трех HTML-страниц загружается браузер. На других страницах он распознает: "Эй, этот внешний ресурс с этим конкретным URL - адресом уже находится в моем кэше-нет необходимости загружать его снова."