Javascript 除了缓存,还有其他方法可以避免应用程序清单的第二个请求吗?

Javascript 除了缓存,还有其他方法可以避免应用程序清单的第二个请求吗?,javascript,html,offline,application-cache,Javascript,Html,Offline,Application Cache,当使页面脱机时,浏览器将(忽略细节)下载页面、其清单和资源,然后在下载完成后重新请求清单(步骤24),如果返回的清单与第一个清单不匹配,则缓存失败 根据规范,浏览器应在“短暂延迟”后安排另一次尝试(步骤25)。可悲的是,就我所知,无论是Chrome还是Firefox都没有做到最后一部分;相反,他们只是无法缓存(或更新)页面,而不重试 因此,为了可靠地缓存/更新页面,我们需要确保清单的第二个副本是前几分钟第一个副本的逐字节副本 如果页面的数据已经有某种内置版本,您可以在清单中使用,很好,但如果没有

当使页面脱机时,浏览器将(忽略细节)下载页面、其清单和资源,然后在下载完成后重新请求清单(步骤24),如果返回的清单与第一个清单不匹配,则缓存失败

根据规范,浏览器应在“短暂延迟”后安排另一次尝试(步骤25)。可悲的是,就我所知,无论是Chrome还是Firefox都没有做到最后一部分;相反,他们只是无法缓存(或更新)页面,而不重试

因此,为了可靠地缓存/更新页面,我们需要确保清单的第二个副本是前几分钟第一个副本的逐字节副本

如果页面的数据已经有某种内置版本,您可以在清单中使用,很好,但如果没有,您的选项似乎是:

  • 生成某种合成版本并在服务器上记住它,以便可以为两个请求返回相同的版本

  • 允许浏览器在其正常缓存中短时间(例如,最多两分钟)缓存清单;这样,浏览器的正常缓存就满足了对它的第二个请求,因此总是逐字节的。当然,这意味着你不能在这两分钟内更新页面


  • 我在规范中没有看到任何东西,但是有没有办法完全避免第二个清单加载,从而避免任何一个选项?要告诉浏览器第一个清单的时间点没有问题,我们不希望它在之后重新检查?(在我们的例子中,我们确信,通过下载资源,世界不会改变一半,因此第二次检查的原因不适用于我们。)

    AFAIK,没有办法告诉浏览器第一次清单的时间点是正确的。顺便说一句,由于ServiceWorker-Cache API在不久的将来将被视为appcache的替代品,因此我建议您将时间花在它而不是appcache上。@Tresdin:谢谢。是的,很期待服务人员,但我们的应用程序现在已经上线,而且服务人员还不是一个可行的选择。但是,是的,展望未来,因为我不同意杰克·阿奇博尔德文章的标题更多…:-)出于好奇。既然第二个检查很简单,为什么需要保存它呢?我在问题中谈到了这一点——让第二个副本与第一个副本匹配,但能够进行更新是一种痛苦。你是说整个缓存文件都将被重新下载吗?只是因为它永远不会发生与一个正确的实现。