如何使用Firefox或Chrome在缓存文件上编辑数据大小?

时间:2013-02-10 03:02:10

标签: google-chrome firefox caching size

重现问题的步骤:

  • 第1步:我们假设您已在浏览器(Firefox)上清理了缓存历史记录。

  • 第2步:您在浏览器中输入www.stackoverflow.com,可以在缓存文件夹中获取一些新数据。

  • 第3步:您在浏览器上输入“cache:about”

  • 第4步:点击“磁盘缓存设备/列表缓存条目”

  • 第5步:我搜索已下载到缓存文件夹的某些“.png”文件。并注意到数据大小实际为16425字节。

  • 步骤6:复制图像存储在计算机上的路径。

  • 第7步:在继续解决问题之前,我会快速查看图片的样子。

  • 第8步:检查图片

  • 第9步:启动/运行/粘贴我们最近复制的路径,图片已存储在您的系统中。

  • 第10步:这是图片!但我们必须手动输入“.png”

  • 第11步:我看一下它的样子:

  • 第12步:我编辑了我想要更改文件大小的图像,其大小与浏览器缓存的实际大小不同。因此,我将图像缩小并保存。

  • 第13步:我检查一下文件的大小是否真的发生了变化。 之前是17kb现在3kb。

  • 第14步:我删除了添加到文件名中的“.png”文本,以便浏览器可以阅读

  • 第15步:现在我在浏览器上按下重新加载,文件没有被加入!

预期结果:   - 在示例中,为了使其易于理解,我使用了“.png”,但是没有得到相同的结果。在我真正的问题上,我试图让缓存读取一个FLASH .swf文件,我要改变它原来的数据大小。 有任何想法吗?链接?我无法在互联网上找到有关如何向浏览器说再次读取已下载文件的信息,即使尺寸已经改变!!

2 个答案:

答案 0 :(得分:1)

重点是客户端永远不会再次检查服务器,如果它被缓存,直到(以及如果)该元素的缓存已过期。将HTTP标头上的最大年龄设置为10分钟,如果自上次下载以来已超过10分钟,则客户端重新下载。您无法仅因尺寸更改而更新。除非你有一个JS或ajax或者某些东西会根据客户端检查服务器时检测到的某些结果更新客户端缓存,以查看是否有最近的更改,否则就不可能了。

因此,如果必须拥有它,则必须根据服务器上的现有数据,在服务器发生变化时跟踪服务器。例如,服务器会跟踪初始大小。如果更改图像大小(或假设Web应用程序中的某些内容更改了它),服务器将知道服务器上已更改此内容(因为它将始终在服务器上获取当前图像大小)。因此,您还需要在下载图像时使用cookie或html5 localStorage跟踪客户端上的图像大小。

然后,脚本的客户端部分在页面加载时请求服务器(发送存储在cookie或localStorage中的图像大小),然后服务器脚本将当前图像的大小与客户端发送的大小进行比较。如果它不同,它会明确地过期客户端缓存,这意味着客户端必须显式重新下载映像。否则它什么都不做,只使用缓存的图像。

所以基本上你需要像登录cookiet那样处理你的图像(如果你想要这种功能,服务器显式地跟踪它,使它过期,设置新的,过期等等)。

答案 1 :(得分:0)

我遇到了同样的问题,最后得到了一个解决方法,感谢这个帖子。

这仅适用于Firefox。 转到:config 将变量“browser.cache.check_doc_frequency”(默认值3)编辑为2 (http://kb.mozillazine.org/Browser.cache.check_doc_frequency

编辑缓存目录中的文件。 (如果新尺寸不同,则无关紧要!) 无需更改chache_001中的文件大小条目。

希望这会对你有所帮助。

编辑:只需确保文件大小小于swf文件的原始文件大小。

原因:我真的不知道,但是当我尝试编辑一个在线游戏的swf时,游戏再也无法加载新的缓存文件(就像firefox预留x内存字节一样,x由服务器..但文件大于x字节,因此不会加载整个文件,并且flash电影不会加载)。

我将swf中的一些图像编辑为相同大小的空白图像,重新编译并重新压缩以获得比原始swf低的文件大小,并且它有效!