iOS上的AppCache令人难以忍受

Kar*_*ite 5 javascript web-applications application-cache ios

我正在开发一个利用应用程序缓存的网络应用程序,一切都在桌面浏览器和Android(甚至很老和慢的Android手机)上运行良好.但是,下载appcache在Safari 6和Chrome上的iOS 6上花费的时间要长得多.

我的应用程序缓存大小仅为2.1Mb,而且我有一个相当稳固的70Mbps(下载)互联网连接.我希望缓存非常快.

这是我到目前为止的时间:

  • 桌面Chrome:<1s (与Safari和Firefox相似)
  • Android 2.3.3 Stock浏览器:~4s (Chrome和Dolphin的相似时间)
  • Android 4.2.2(仿真):~7s(在PhoneGap应用程序内运行)
  • iPhone 4S 6.0 Safari:8分钟!!! (在iOS Chrome中也差不多!!)
  • iPad 2 6.0 Safari:如上所述!!!

所有这些设备都使用相同的WiFi和互联网连接,我的iPhone/iPad运行正常(没有本地应用程序显示互联网速度问题,常规网站加载正常).在iOS下,似乎有一些绝对贬低AppCache下载速度的东西.

window.applicationCache.status整个这段时间里appCache.DOWNLOADING,我有一个progress事件正在运行,在下载文件时对这些文件进行计数,所以我确信它不会卡在其他地方.这似乎是下载所需的时间.是什么赋予了?

附录:iPhone也运行得非常热,电池在此操作过程中非常快速地下降.似乎有些东西导致CPU在下载过程中运行平稳.

(注:我不能发布一个链接到web应用这里我们仍处于内部测试阶段,但如果你需要看到它之前,你认为你能帮助诊断它,在给我发电子邮件在我的个人资料中的地址,我将发送一个链接到该应用程序).

Kar*_*ite 2

好的,我在 iOS 模拟器和 Xcode Instruments 的帮助下找到了它来分析它。(我不确定是否应该将我的解决方案添加到主要问题中,或者作为答案,但我想我会这样做,因为我的问题已经有点混乱)。

事实证明,实际上是一些错误的 javascript 导致了这个问题,但显然只在 iOS 上。

该网络应用程序的目的只是一个单页高(没有垂直滚动,除非在特定的DIV范围内),所以除了用于隐藏地址栏的常用标准 JS 代码之外......

        window.addEventListener("load",function() {
            // Set a timeout...
            setTimeout(function(){
                // Hide the address bar!
                window.scrollTo(0, 1);
            }, 0);
        });
Run Code Online (Sandbox Code Playgroud)

...我还添加了以下内容:

        $(document).scroll(
            function(e){
                window.scrollTo(0, 1);
            });
Run Code Online (Sandbox Code Playgroud)

通过查看配置文件结果,我可以看到花费了大量scrollTo时间,因此它立即指出这是原因。为什么该scroll事件被如此频繁地触发,我不知道(这是在没有触摸屏幕的情况下发生的)。

我最初的解决方案是限制该代码,但我现在正在评估我是否需要它。这是我现在修复它的代码(使用jquery-debounce,我已经将其用于其他用途):

        $(document).scroll(
            $.throttle(function(e){
                window.scrollTo(0, 1);
            })
        , 10);
Run Code Online (Sandbox Code Playgroud)

应用程序缓存的下载时间现在与Android时间一致。唷!