【问题标题】:Can images be preloaded without the cache using Image objects?可以使用 Image 对象在没有缓存的情况下预加载图像吗?
【发布时间】:2017-06-18 11:00:24
【问题描述】:

我正在尝试找到一种方法来(几乎)保证位于服务器上的图像文件在初始加载期后可以毫无延迟地附加到 DOM。

我一直在使用标准的预加载技术,例如:

var images_to_load = ['img1.png', 'img2.png', 'img3.png'];
for(var i=0; i<images_to_load.length; i++){
  var img = new Image();
  img.src = images_to_load[i];
}

但我了解到,这是否有效取决于服务器和浏览器设置等因素,以及要加载的图像数量。

我想知道是否将图像存储在内存中,然后将图像对象直接附加到 DOM 会改变预加载的行为方式。这会绕过缓存吗?例如:

var images_to_load = ['img1.png', 'img2.png', 'img3.png'];
var images = [];
for(var i=0; i<images_to_load.length; i++){
  var img = new Image();
  img.src = images_to_load[i];
  images.push(img);
}

document.getElementById('target').appendChild(images[0]);

(相关:有哪些工具可用于测试这种行为?)

【问题讨论】:

  • 我认为您需要进一步澄清。原图在哪里?该数组仅包含名称。这些文件在客户端机器上吗?或者他们在服务器上,你从客户端加载它?如果有的话,服务器端平台是什么?
  • 我已经澄清,图片文件在服务器上,需要客户端加载。

标签: javascript image caching


【解决方案1】:

保证它们都被加载的唯一方法是使用加载事件处理程序

for(var i=0; i<images_to_load.length; i++){
  var img = new Image();
  img.src = images_to_load[i];
  images.onload = function(){
     document.getElementById('target').appendChild(img);
  };
}

请注意,这将按加载顺序添加,而不是数组顺序。

至于缓存,任何缓存的图片都会加载得更快,仅此而已

【讨论】:

  • 像这样加载的图像会在会话期间保持加载吗?换句话说,如果我有一个用户查看 25 分钟的单页应用程序,并且我在会话开始时使用此方法加载他们将看到的所有图像,浏览器会在某个时候清除内存吗?我需要在会话开始 20 分钟后显示的图像与开始时加载的图像一样快。
  • 应该没问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 2012-10-11
  • 1970-01-01
  • 2012-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多