Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.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_Image_Browser Cache_Image Preloader - Fatal编程技术网

Javascript 检测是否缓存了图像

Javascript 检测是否缓存了图像,javascript,image,browser-cache,image-preloader,Javascript,Image,Browser Cache,Image Preloader,要知道缓存中是否有图像,可以在Firefox mozIsLocallyAvailable()中使用。 chrome或IE中没有这样的东西 你知道其他的方法吗 我试图用Ajax检查“304未修改”,但Ajax似乎有自己的缓存系统。(每次关闭浏览器时,ajax缓存都会被删除) 我的目标是检测我的访问者何时清理了他们的缓存,这样我就可以重新启动我的“后台预加载”系统(它适用于有大量图像的游戏)。我听过一些关于AppCache的介绍,但还不足以知道它是否可以存储多达40mb的图像,以及在页面加载完成后是

要知道缓存中是否有图像,可以在Firefox mozIsLocallyAvailable()中使用。 chrome或IE中没有这样的东西

你知道其他的方法吗

我试图用Ajax检查“304未修改”,但Ajax似乎有自己的缓存系统。(每次关闭浏览器时,ajax缓存都会被删除)

我的目标是检测我的访问者何时清理了他们的缓存,这样我就可以重新启动我的“后台预加载”系统(它适用于有大量图像的游戏)。我听过一些关于AppCache的介绍,但还不足以知道它是否可以存储多达40mb的图像,以及在页面加载完成后是否可以下载这些图像


关于。

考虑到你所说的最终目标,我想我应该做的是让后台(预)加载过程始终发生,如果它没有在(比如)250毫秒或500毫秒内完成,则发布一条消息告诉用户发生了什么。如果在很短的时间内加载了所有40MB的图像,您可以相当肯定它们来自缓存。:-)相反,如果它们的加载时间超过500毫秒(半秒),你并不在乎这是因为它们正在下载,还是因为某些原因用户的缓存速度太慢,你可能仍然想告诉他们发生了什么。

考虑到你所说的最终目标,我想我应该做的是有背景(pre)加载过程总是会发生,如果在(比如)250毫秒或500毫秒内还没有完成,请显示一条消息,告诉用户发生了什么。如果在很短的时间内加载了所有40MB的图像,您可以相当肯定它们来自缓存。:-)相反,如果加载它们需要500毫秒(半秒)以上的时间,您并不真正关心这是因为它们正在下载,还是因为某些原因用户的缓存速度非常慢,您仍然可能想告诉他们发生了什么

我的目标是检测访问者何时清理了缓存,这样我就可以重新启动“后台预加载”系统

您可以在每个会话上预加载图像。如果浏览器缓存中有这些文件,则不会再次加载它们。你一定要把信寄出去

我的目标是检测访问者何时清理了缓存,这样我就可以重新启动“后台预加载”系统


您可以在每个会话上预加载图像。如果浏览器缓存中有这些文件,则不会再次加载它们。只需确保您发送。

“我试图用Ajax检查“304未修改”,但Ajax似乎有自己的缓存系统。”不,是同一个,但您看不到304代码。如果服务器回复为304,则您看到的(例如,在
XMLHttpRequest
对象的
status
属性上)是200。例如,ajax层对您隐藏了详细信息。您无法真正构建跨浏览器的任何内容,以提供有关缓存内容和未缓存内容的可靠信息。通过检查“oncomplete”事件的状态,我可以看到“304未修改”。但是当我这样做的时候,在清理缓存之后,第一次调用得到“200”,之后的任何调用都得到304。但是,如果我关闭浏览器并重新打开,在看到“304”之前,我会得到另一个“200”。就像在浏览器重启时清理缓存一样。“我试图用Ajax检查“304未修改”,但Ajax似乎有自己的缓存系统。”不,是同一个,但你看不到304代码。如果服务器回复为304,则您看到的(例如,在
XMLHttpRequest
对象的
status
属性上)是200。例如,ajax层对您隐藏了详细信息。您无法真正构建跨浏览器的任何内容,以提供有关缓存内容和未缓存内容的可靠信息。通过检查“oncomplete”事件的状态,我可以看到“304未修改”。但是当我这样做的时候,在清理缓存之后,第一次调用得到“200”,之后的任何调用都得到304。但是,如果我关闭浏览器并重新打开,在看到“304”之前,我会得到另一个“200”。就像在浏览器重新启动时清除了缓存一样。它仍然会调用HTTP请求,不是吗?我不想每次访问者访问游戏时都发出250个无用的HTTP请求。它仍然会调用HTTP请求,不是吗?我不想每次访问者访问游戏时都向他们发出250个无用的HTTP请求。我考虑过这一点,可能会这样做,但如果可能的话,我希望有一种更一致的方法,不依赖带宽速度。无论如何,谢谢你的主意@JiDW:我的观点是它是一致的。:-)大概,向用户显示消息的目的是让他们知道延迟的原因。因此,您不在乎延迟是什么,如果过程持续超过一小段时间(无论出于何种原因),您将显示消息。(另一方面:我没有关注你的带宽,我的建议不依赖于用户的连接速度。)好吧,对不起,我忘了再解释一下。我已经为我的页面提供了一个可见的预加载程序,它只加载这个特定页面所需的图像。我们的想法是在这个可见的预加载程序结束后继续预加载图像,以加快其他页面的加载速度。因此,我可以监控图像的加载时间,以检查他的缓存是否已被清理。我考虑过这一点,可能会这样做,但如果可能的话,我希望有一种更一致的方法,不依赖于带宽速度。无论如何,谢谢你的主意@JiDW:我的观点是它是一致的。:-)大概,向用户显示消息的目的是让他们知道延迟的原因。因此,您不在乎延迟是什么,如果过程持续超过一小段时间(无论出于何种原因),您将显示消息。(另一方面:我没有关注你的带宽,我的建议不依赖于用户的连接速度。)好吧,对不起,我忘了再解释一下。我已经为我的页面提供了一个可见的预加载程序,它只加载这个特定页面所需的图像。我们的想法是在visibl结束后继续预加载图像