我列出了HTML在缓存清单的显式缓存部分中引用的静态资源(CSS和javascript文件),就像现代移动Web应用程序通常那样。但令人惊讶的是,在Chrome中发现这些静态资源在没有任何本地缓存时首次访问Web应用程序时被下载两次,因为缓存用于最小化带宽。我认为它们被下载两次的原因是它们在缓存清单和HTML中被引用。
如果两个地方都引用了资源,为什么浏览器不共享该资源?它符合HTML5标准还是Chrome中的错误?
答案 0 :(得分:1)
在使用缓存清单时,我几乎在所有浏览器(Chrome,IE和Firefox)中都看到过这种行为。据我所知,资源确实被下载两次,因为它们在缓存清单和html / css中都被引用。初始加载用于加载页面本身,第二个加载用于加载appcache。
现在,即使需要执行第二个请求来加载appcache,也应该从常规浏览器缓存中提供资源,因为原始请求可能会将其加载到浏览器缓存中。但是,所有浏览器似乎都会以不同于常规浏览活动的方式处理appcache加载并绕过缓存。
就HTML5规范而言,规范建议浏览器可以实现使用现有下载的机制,但它是可选的:
从URL清单URL的原点获取资源,并设置同步标志和手动重定向标志。如果这是升级尝试,则使用缓存组中的最新应用程序缓存作为HTTP缓存,并尊重与该缓存相关的HTTP缓存语义(例如,到期,ETag等)。用户代理也可以使用其他缓存,但也很荣幸。
如果由于其他原因已经下载了相关资源,那么现有的下载过程有时可用于此步骤的目的,如获取算法所定义。
可能已经下载的资源示例是第一次看到的网页上的大图像。下载图像以满足页面上的img元素,以及列在缓存清单中。根据获取图像的规则,只需要下载一次,它既可以用于缓存,也可以用于渲染的网页。