Я занимаюсь разработкой веб-сайта, и у меня возникла проблема с отложенной загрузкой изображений.
Загрузка изображений заняла слишком много времени, поэтому я проверил вкладку «Сеть браузера» и увидел, что Safari несколько раз загружал одно и то же изображение, замедляя загрузку других носителей.
Я воспроизвел код, чтобы сделать его максимально простым, и когда я лениво загружаю изображения, браузер загружает их дважды.
<style type="text/css">
[data-src]{
opacity: 0;
transition: all .4s ease;
}
[data-src].vis{
opacity: 1;
}
</style>
<img data-src="https://via.placeholder.com/150/045b1f/ffff11" src="dot.png">
<img data-src="https://via.placeholder.com/150/045b44/ffff22" src="dot.png">
<img data-src="https://via.placeholder.com/150/045b77/ffff33" src="dot.png">
<img data-src="https://via.placeholder.com/150/045b00/ffff44" src="dot.png">
<script type="text/javascript">
function lazy(){
$('[data-src]').each(function(){
var $img = $(this);
var src = $img.attr('data-src');
var img = new Image();
img.src = src;
$(img).on('load', function(){
console.log('loaded',src);
$img.attr('src',this.src);
$img.addClass('vis');
});
});
}
jQuery(function($){
setTimeout(function(){
lazy();
},3000)
});
</script>
Я тоже сделал CodePen https://codepen.io/nbl7/pen/GaoZXW
На моем сайте это происходит только в Safari, и оно загружает одно и то же изображение даже 10 раз. Возможно потому, что я вызываю функцию отложенной загрузки разное время.
В приведенном мною коде это происходит и в Chrome.
Должен ли браузер уже знать, какое изображение было загружено, и кэшировать его без новых запросов?
Спасибо за помощь.