Tim*_* S. 9 javascript safari ajax ipad
长话短说:我必须创建一个聊天功能,这似乎适用于除iPad(可能还有iPhone)之外的所有设备.我们的客户使用他们的iPad聊天,因此我尝试解决过去7个月的问题.
这是我花了多长时间来确定这个问题.
这个问题显然出现在iPad的浏览器中.我使用库jQuery运行JSON Ajax请求.请求很好,它们不包含错误.在某些时候,iPad根本不会运行Ajax请求.我不知道为什么,我找不到原因.记录每个Ajax请求,但在某些时候服务器不会收到任何请求.我已经问过无数次,客户是肯定的,他们只是触摸ipad以防止它被锁定.
我已将请求率降低到每分钟约15个请求,但这不起作用.
所以,我的问题是:是否有人知道为什么ipad在10-15分钟后突然停止发送Ajax请求?
把它放在这里,就像评论一样,没有任何语法突出显示.
我在这里做了一个超级最小的测试页面:http://www.focalstrategy.com/tests/ajax.php
代码是:
<?
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
echo date("F j, Y, G:i:s a");
exit();
}
?>
<!doctype html>
<html>
<head>
<title>AJAX test</title>
</head>
<body>
<h1>Ajax Test</h1>
<p>This page makes an AJAX request every 5 seconds and replaces the div below with the returned date.</p>
<div><p id="date"><?= date("F j, Y, G:i:s a") ?></p></div>
<div><p><span id="count">0</span> updates made.</p></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
var count = 0;
var getDate = function() {
$.get('/tests/ajax.php', function(data) {
$('#date').html(data);
count = count + 1;
$('#count').html(count);
});
}
setInterval(getDate, 5000);
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
所以,我跑了一个小时,并没有任何问题,iPad(完全更新)运行良好,没有遗漏任何问题.
我也在Chrome上运行它并记录它的行为.这看起来像这样:

(全尺寸)
这里有一些奇怪之处,因为起初事件监听器的数量保持不变,然后经过一段时间的疯狂,增加到56个听众,然后再次降至1.DOM节点计数也反复出现高峰,高达424.两者都有相当奇怪的行为,同时考虑到此代码的简单性.
也许在您的应用程序中,正在跟踪的Dom节点的数量,或者事件监听器的数量达到某个值,导致iPad无法跟踪正在发生的事情或类似情况.
值得注意的是,在垃圾收集发生之前,内存使用量会逐渐增加.这就是要发生的事情,尽管它可能在iPad上的效率较低.
编辑:我已经在一个干净的配置文件上再次测试它,许多事件监听器都是由于扩展 - 发生相同的行为,但不是相同程度,背景值也是0-1而不是15-20