9

簡単に言えば、iPad (およびおそらく iPhone) を除くすべてのデバイスで動作するように見えるチャット機能を作成する必要がありました。私たちの顧客はチャットにiPadを使用しているため、過去7か月ほど問題を解決しようとしました.

それは、問題をある程度特定するのにかかった時間です。

問題は明らかに iPad のブラウザにあります。ライブラリ jQuery を使用して JSON Ajax リクエストを実行します。リクエストは問題なく、エラーは含まれていません。ある時点で、iPad は Ajax リクエストをまったく実行しません。理由がわからない、理由が見つからない。すべての Ajax リクエストはログに記録されますが、ある時点でサーバーはリクエストを受け取りません。私は数え切れないほど尋ねてきましたが、顧客は、iPad がロックされるのを防ぐために、iPad だけに触れていると確信しています。

リクエストのレートを 1 分あたり約 15 リクエストに減らしましたが、うまくいきませんでした。

だから、私の質問は次のとおりです。iPadが10〜15分後にAjaxリクエストの送信を突然停止する理由について、人に知られている情報はありますか?

4

1 に答える 1

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>

だから、私はこれを 1 時間実行しましたが、問題はありませんでした。iPad (完全に更新された) は問題なく動作し、欠落することはありませんでした。

これもChromeで実行し、その動作を記録しました。これは次のようになります。

DOM ノード、イベント リスナー、およびメモリ使用量のグラフを表示する Chrome プロファイラー ビュー。

(フルサイズ)

最初はイベント リスナーの数が一定に保たれ、しばらくするとおかしくなり、最大 56 のリスナーに増加してから再び 1 に減少するという点で、ここにはいくつかの奇妙な点があります。DOM ノード数も繰り返し急増し、424 まで上昇します。このコードの単純さを考えると、どちらもかなり奇妙な動作をしています。

おそらく、アプリで追跡されている Dom ノードの数、またはイベント リスナーの数が特定の値に達し、iPad が何が起こっているかを追跡できなくなったり、同様のことが起こったりする可能性があります。

また、ガベージ コレクションが発生するまでメモリ使用量が増加することにも注意してください。iPad では効率が悪いかもしれませんが、これが意図された動作です。

編集:クリーンなプロファイルで再度テストしました。イベントリスナーの多くは拡張機能が原因です – 同じ動作が発生しますが、同じ程度ではなく、バックグラウンド値も 15-20 ではなく 0-1 です。

于 2012-06-04T11:23:43.603 に答える