javascript - AppCache 在 iOS 上非常慢

标签 javascript ios web-applications application-cache

我正在开发一个使用应用程序缓存的网络应用程序,一切都在桌面浏览器和 Android 上运行良好(即使是非常老旧和缓慢的 Android 手机)。然而,在 iOS 6 上,在 Safari 和 Chrome 中下载应用程序缓存要花费更长的时间。

我的应用程序缓存 大小仅为 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.statusappCache.DOWNLOADING,我有一个 progress 事件正在运行,对文件进行计数已下载,所以我确定它不会卡在其他地方。这似乎只是下载所需的时间。给了什么?

附录:iPhone 的运行温度也高得离谱,在此操作过程中电池电量消耗得非常快。似乎有什么导致 CPU 在下载过程中全力运行。

(注意:我无法在此处发布网络应用程序的链接,因为我们仍处于私有(private)测试阶段,但如果您需要在认为能够帮助诊断之前查看它,请发送电子邮件至我在我的个人资料中的地址,我会发送一个链接到该应用程序)。

最佳答案

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

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

Web 应用程序旨在只有一个页面高度(没有垂直滚动,除了在特定的 DIV 中),所以除了用于隐藏地址栏的常用标准 JS 代码之外。 ..

        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时间一致。呸!

关于javascript - AppCache 在 iOS 上非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15936730/

相关文章:

ios - ARKit 平面,上面有现实世界的物体

ios - textField resignFirstResponder 消失 UITableView header

java - 根据我的需要,正确的 java 应用程序类型是什么?

web-applications - 基于 POS 网络的优点/缺点优于桌面应用程序

java - 启动嵌入式jetty时指定系统属性

javascript - 使用两个关联在 Sequelize 中获取模型的实例

JavaScript - 保留尾随零

ios - 如何获取 UIView 的坐标

javascript - AngularJS 编辑按钮只能工作一次,然后出现 TypeError : l is not a function

javascript - 下载 XML 而不是打开