我正在开发一个利用应用程序缓存的网络应用程序,一切都在桌面浏览器和Android上运行良好(即使是非常老旧的Android手机)。但是,在Safari和Chrome中,下载appcache在iOS 6上花费的时间要长得多。
我的应用程序缓存总大小仅为2.1Mb,而且我有一个相当稳固的70Mbps(下载)互联网连接。我希望缓存非常快。
到目前为止,这是我的时代:
所有这些设备都使用相同的wifi和互联网连接,我的iPhone / iPad运行正常(没有本地应用程序显示互联网速度问题,常规网站加载正常)。在iOS下,似乎有一些绝对贬低AppCache下载速度的东西。
window.applicationCache.status
整个时间都是appCache.DOWNLOADING
,我有一个progress
事件正在运行,计算文件在下载时的数量,因此我确信它不会卡在其他地方。这似乎是下载所需的时间。是什么给了什么?
附录:iPhone也运行得非常热,电池在此操作过程中会很快下降。似乎某些东西导致CPU在下载期间运行平稳。
(注意:我无法在此处发布指向网络应用的链接,因为我们仍然处于私人测试阶段,但如果您认为在能够帮助诊断它之前需要查看它,请发送电子邮件我在我的个人资料中的地址,我将发送一个链接到该应用程序。)
答案 0 :(得分:2)
好的,我在iOS模拟器和Xcode Instruments的帮助下想出了它。 (我不确定我是否应该将我的解决方案添加到主要问题中,或作为答案,但我认为我会这样做,因为我的问题已经有点杂乱了。)
事实证明,这实际上是一些导致问题的错误的javascript,但显然只是在iOS上。
web-app只是一个单页高(没有垂直滚动,特定DIV
除外),所以除了通常的标准JS代码隐藏地址栏... < / p>
window.addEventListener("load",function() {
// Set a timeout...
setTimeout(function(){
// Hide the address bar!
window.scrollTo(0, 1);
}, 0);
});
...我还在下面添加了:
$(document).scroll(
function(e){
window.scrollTo(0, 1);
});
通过查看个人资料结果,我能够看到scrollTo
中花费了很多时间,因此它立即指出这是原因。为什么scroll
事件被触发了这么多,我不知道(这是在没有触及任何屏幕的情况下发生的。)
我最初的修复是限制代码,但我现在正在评估我是否甚至需要它。这是我现在修复它的代码(使用jquery-debounce,我已经使用了其他东西):
$(document).scroll(
$.throttle(function(e){
window.scrollTo(0, 1);
})
, 10);
应用程序缓存的下载时间现在与Android时间一致。呼!
答案 1 :(得分:0)
代码正在进入无限循环,因为初始scrollTo函数调用会触发scroll事件处理程序,然后重复触发自身!我最好的猜测是iOS JavaScript引擎处理这个无限循环与其他浏览器的JavaScript引擎不同。