在独立模式下运行我的网站时,我的用户在iPad上遇到冻结问题。
他们使用的设备正在运行iOS 9.2.1。
设备的响应速度似乎逐渐变慢,使用一个小时后,甚至可能冻结。
单击主页按钮,然后以独立模式重新打开网页将解决/重置该问题。
我的用户以独立模式查看的网页包含少量输入(文本,单选,复选框)和提交按钮。因此,浏览器在冻结之前需要重新加载几次。
该页面的资源非常小,某些页面可能包含一两个图像,并且在CSS中导入了一个字体文件以供图标使用。
有谁知道会导致冻结的原因吗?
我假设它与内存有关。
我可以在独立模式下跟踪iOS设备的内存使用情况吗?
与Chrome相比,用于Safari的Web检查器工具受到限制,并且Safari不支持window.performance.memory
。
我还尝试了使用“仪器”应用程序进行远程调试,但“泄漏”工具中未记录任何内容,并且收到错误消息“无法附加到任务;端口无效。”尝试使用分配工具时。
我应该使用其他工具吗?
最佳答案
看来这是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>↓</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>↓</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>