iPad ajax问题

Tim*_* S. 9 javascript safari ajax ipad

长话短说:我必须创建一个聊天功能,这似乎适用于除iPad(可能还有iPhone)之外的所有设备.我们的客户使用他们的iPad聊天,因此我尝试解决过去7个月的问题.

这是我花了多长时间来确定这个问题.

这个问题显然出现在iPad的浏览器中.我使用库jQuery运行JSON Ajax请求.请求很好,它们不包含错误.在某些时候,iPad根本不会运行Ajax请求.我不知道为什么,我找不到原因.记录每个Ajax请求,但在某些时候服务器不会收到任何请求.我已经问过无数次,客户是肯定的,他们只是触摸ipad以防止它被锁定.

我已将请求率降低到每分钟约15个请求,但这不起作用.

所以,我的问题是:是否有人知道为什么ipad在10-15分钟后突然停止发送Ajax请求?

Ric*_*haw 7

把它放在这里,就像评论一样,没有任何语法突出显示.

我在这里做了一个超级最小的测试页面: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上运行它并记录它的行为.这看起来像这样:

Chrome Profiler视图,显示DOM节点,事件监听器和内存使用情况的图表.

(全尺寸)

这里有一些奇怪之处,因为起初事件监听器的数量保持不变,然后经过一段时间的疯狂,增加到56个听众,然后再次降至1.DOM节点计数也反复出现高峰,高达424.两者都有相当奇怪的行为,同时考虑到此代码的简单性.

也许在您的应用程序中,正在跟踪的Dom节点的数量,或者事件监听器的数量达到某个值,导致iPad无法跟踪正在发生的事情或类似情况.

值得注意的是,在垃圾收集发生之前,内存使用量会逐渐增加.这就是要发生的事情,尽管它可能在iPad上的效率较低.

编辑:我已经在一个干净的配置文件上再次测试它,许多事件监听器都是由于扩展 - 发生相同的行为,但不是相同程度,背景值也是0-1而不是15-20

  • 我们打电话给苹果专家,他证实iPad上的Safari非常烦人.Apple在iPad上为Safari添加了许多安全功能(正如我之前所经历过的那样)并且没有解决方法.我们要么必须制作应用程序,要么使用其他设备,因为它在台式机上甚至在我的Android手机上都能完美运行.我也发现Opera for iPad,虽然我不确定这是否有帮助.非常感谢您的帮助.而不是拥抱我只会给你赏金!应得的! (2认同)