1

在独立模式下运行我的网站时,我的用户在他们的 iPad 上遇到了冻结问题。

他们使用的设备运行 iOS 9.2.1。

设备的响应速度似乎逐渐变慢,使用一个小时后甚至可能会冻结。

单击主页按钮并以独立模式重新打开网页将修复/重置问题。

我的用户在独立模式下查看的网页包含一些输入(文本、单选、复选框)和一个提交按钮。所以浏览器在冻结之前被重新加载了几次。

该页面的资源相当小,一些页面可能包含一两个图像,并且在 css 中导入了一个字体文件以供图标使用。

有谁知道什么可能导致冻结?

我假设它与内存有关。

我可以在独立模式下跟踪 iOS 设备的内存使用情况吗?

与 Chrome 相比,Safari 的网络检查器工具受到限制,并且 Safari 不支持window.performance.memory.

我还尝试使用“仪器”应用程序进行远程调试,但“泄漏”工具中没有记录任何内容,并且收到错误“无法附加到任务;端口无效。尝试使用分配工具时。

我应该使用其他工具吗?

4

1 回答 1

1

看来这是 iOS 9 独立模式下的错误。

我用苹果提交了这个错误并将其添加到开放雷达http://openradar.appspot.com/25109349

如果您在 iOS 9 上以独立模式运行下面的 html 页面,您将能够重现该问题。加载 100 多个页面后,您会注意到触摸响应延迟,加载 400 多个页面后,屏幕将完全无响应。

运行代码段在独立模式下无法运行,因此您必须复制 html 并制作自己的文件。您应该将表单的操作更新为您创建的文件的名称或将您的文件命名为“autoSubmitLoop.html”。

<!DOCTYPE html>
<html>
    <head>
        <title>(Auto) iOS 9 standalone mode, page load, unresponsive touch bug</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta name="apple-mobile-web-app-status-bar-style" content="black" />
        <meta name="apple-mobile-web-app-capable" content="yes" />
        <meta name="mobile-web-app-capable" content="yes" />
    </head>
    <body>
        <h1>Auto submit test</h1>
        <form method="get" action="autoSubmitLoop.html" id="form"  name="form">
            <p>Auto submit at 3s</p>
            <p>Timer: <span id="timer-counter">0</span></p>
            <input type="hidden" id="page" name="page" value="0" />
            <p>Auto submit count: <input type='number' id="page-counter" name="page-counter" value="0" disabled></p>
            <input type="submit" value="Submit" id="submit-button"/>
            <br>
            <br>
            <br>
            <button type="button" onclick="location.reload();">Reload</button>
            <br>
            <br>
        </form>
        <p>Scroll</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>&darr;</p>
        <script>
            (function() {
                var paramArray = window.location.search.substring(1).split("&");
                var time = 3;
                var counter = 0;

                for (var i = 0; i < paramArray.length; i = i + 1) {
                    var pair = paramArray[i].split("=");
                    if (pair[0] === "page") {
                        var nextPage = Number(pair[1]) + 1;
                        document.getElementById('page').value = nextPage;
                        document.getElementById('page-counter').value = nextPage;
                    }
                }

                setInterval(function(){
                    counter = counter + 1;
                    document.getElementById('timer-counter').innerHTML = counter;
                    if(counter >= time){
                        document.getElementById('submit-button').click();
                    }
                },1000);
            })();
        </script>
    </body>
</html>

这是另一个没有表单的示例,如果您删除 html 底部的脚本并手动提交页面,问题仍然会发生。

<!DOCTYPE html>
<html>
    <head>
        <title>(Auto Reload) iOS 9 standalone mode, page load, unresponsive touch bug</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta name="apple-mobile-web-app-status-bar-style" content="black" />
        <meta name="apple-mobile-web-app-capable" content="yes" />
        <meta name="mobile-web-app-capable" content="yes" />
    </head>
    <body>
        <h1>Auto reload test</h1>
        <p>Auto reload at 3s</p>
        <p>Timer: <span id="timer-counter">0</span></p>
        <br>
        <br>
        <button type="button" onclick="location.reload();">Reload</button>
        <br>
        <br>
        <p>Scroll</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>|</p>
        <p>&darr;</p>
        <script>
            (function() {
                var time = 3;
                var counter = 0;
                setInterval(function(){
                    counter = counter + 1;
                    document.getElementById('timer-counter').innerHTML = counter;
                    if(counter >= time){
                        location.reload();
                    }
                },1000);
            })();
        </script>
    </body>
</html>

于 2016-03-11T16:54:06.337 回答