Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript不缓存图像_Javascript_Caching - Fatal编程技术网

Javascript不缓存图像

Javascript不缓存图像,javascript,caching,Javascript,Caching,我有一个我在phototshop(一个加载轮)制作的gif,但我发现我使用它的方式(先用css隐藏,然后用css显示,然后用javascript重写)一开始就太慢了,一开始真的很难跳过。所以我决定在调用之前先缓存图像。我就是这样做的: function preloadImages(array) { for (var i = 0; i < array.length; i++) { var img = new Image(); img.src = arr

我有一个我在phototshop(一个加载轮)制作的gif,但我发现我使用它的方式(先用css隐藏,然后用css显示,然后用javascript重写)一开始就太慢了,一开始真的很难跳过。所以我决定在调用之前先缓存图像。我就是这样做的:

function preloadImages(array) {
    for (var i = 0; i < array.length; i++) {
        var img = new Image();
        img.src = array[i];
        preloadImages.list.push(img);
    } 
}

var imageURLs = [
    "loading.gif"
];
这是我从一个教程中得到的。 现在,当我实现这个(目前是第一个)并随后正常调用映像时,它似乎运行得更快,我可以在缓存中看到它。然而,作为怀疑论者,我决定放入一个我从未在HTML中使用过的图像,看看它是否得到缓存(它应该得到缓存),然后再也不调用它。下面是我的新JS:

function preloadImages(array) {
    for (var i = 0; i < array.length; i++) {
        var img = new Image();
        img.src = array[i];
        preloadImages.list.push(img);
    } 
}

var imageURLs = [
    "loading.gif",
    "today.gif"
];
函数预加载图像(数组){
对于(var i=0;i
请注意,我现在添加了
today.gif
,如果我对缓存的理解是正确的,那么现在应该缓存这个图像,即使我从未在“原始”HTML中调用它,对吗?其实不是。这让我怀疑加载的gif是否被缓存了,或者我的浏览器是否决定配合一下。有什么想法吗?下面是在使用第二个javascript代码段进行刷新清除后重新加载时缓存的外观:


所以这里的问题是:即使缓存说它不工作,它是否仍在工作?我在想象吗?我这样做正确吗/我对本地缓存的理解正确吗?如果没有,有人能解释一下我哪里出了问题吗?干杯。

你做得不对-

在for循环中创建图像对象时,请在闭包函数中执行,否则上一个对象将被上一个对象覆盖,这是异步的-

(function(i){
var img = new Image();
img.src= array[i];}(i))

另外,你创建一个列表并将对象推到列表中是完全没有用的

您定义的函数需要一个数组作为参数


尝试
预加载图像([“images/loading.gif”,“images/today.gif]”)。当前您缺少右引号,没有传递数组,而是传递两个单独的字符串作为参数。

您是否可以检查浏览器工具中的“net”选项卡,查看是否曾经请求GIF?是否调用预加载函数<代码>预加载图像(图像URL)抛出一个
警报('ASDF')
在循环的
结束后,查看它是否弹出。(可怜人的调试方法。)@Pekka웃 很明显,有人请求加载.gif,但从来没有人请求今天加载.gif。那么,浏览器是否正在优化对从未插入DOM的图像元素的调用?不知道这里的技术水平如何。(如果这是真的,它将使大多数预加载机制变得毫无意义)
(function(i){
var img = new Image();
img.src= array[i];}(i))