window.applicationCache更新冻结浏览器 - 如何降低频率或强制它们由用户启动

时间:2011-05-04 00:45:53

标签: javascript html5 web-applications application-cache

我创建了一个Web应用程序,可以缓存所有必要的代码和数据,以便通过applicationCache脱机使用。但是,每次应用程序启动时,它都会立即尝试检查更新。这会阻塞浏览器很长一段时间,即使它没有找到任何要更新的内容。这种行为对应用程序具有很大的破坏性(不应该在后台进行更新,无论如何?)。只有检查阶段需要花费大量时间在移动设备上,如果它找到更新,所有下注都将关闭下载需要多长时间(b / c它必须重新下载所有文件) - 其中也冻结了浏览器。

所以,我想知道:

  1. 有没有办法将applicationCache更新委托给共享的Web Worker? OR
  2. 有没有办法阻止所有的applicationCache更新,直到用户特别想要检查更新并按下一个按钮来启动通过applicationCache.update()的更新? OR
  3. 还有其他方法可以减少检查更新所花费的时间吗?
  4. 应用程序缓存更新不应该在后台异步运行吗?


  5. 编辑:清单文件上可能是一个精心构造的缓存控制头是答案吗?我会调查这个,但我希望有人可以给我更多关于这些更新的信息。感谢。


    更新

    好的,我玩过标题,没有任何帮助。我开始赏金了。如果你能提供帮助,请做!

2 个答案:

答案 0 :(得分:1)

如果要让用户更好地控制实际更新,可以使用特定于该用户的内容对清单URL进行参数化。然后,当用户想要更新时,您将向服务器发出请求,该请求将滚动该特定用户的清单文件,然后重新加载页面客户端以强制重新加载清单。

我已经做了一些阅读并且遇到了这篇文章,如果用户已经在缓存页面上,这似乎是一个更优雅的解决方案 -

http://www.html5rocks.com/tutorials/appcache/beginner/#toc-updating-cache

至于清单最新检查所涉及的加载时间,这不是我遇到过的问题。我的理解是它发生在后台,您是否只关注浏览器显示加载提示?

答案 1 :(得分:0)

abort()方法可能是答案... 某天,但我还没有遇到任何实现它的浏览器。

我遇到了类似的问题,并尝试了所有方法,包括将清单置于其中以查看是否会缓存自身的疯狂想法。所以我可以使用ajax请求手动进行更新,并将eval'ing javascript填入localStorage ... yikes。

最后,我创建了一个非常简单的html页面,其中包含一个简单的清单。当我测试它时,UI没有锁定。慢慢地我开始在页面中添加内容,并使用清单内容来查看在applicationCache检查期间可能导致它冻结的内容。当我向页面添加图像时,我终于失败了,但是将它从清单中删除了 - 那时UI又开始锁定了。我回到原来的项目,发现需要在清单中的一些图像,并修复了锁定UI问题。

applicationCache 的检查阶段尝试是异步的(至少在我测试过的设备上)。但是,如果清单中缺少任何文件,则所有内容都必须等待applicationCache完成检查

当浏览器需要一个 not 缓存的文件时,它会等待applicationCache完成更新,然后才能发出文件请求 - 哪种有意义,因为其他资源可能依赖于丢失的文件。这会对渲染进行制动并使UI冻结。如果清单无法访问(例如,在不同的网络上),则可以将UI锁定大约一分钟。

要查找需要添加到清单中的文件,请在刷新应用程序几次时查看服务器日志。嫌疑人将是对清单以外的文件的任何GET请求。