2012-05-29 9 views
9

लंबी कहानी कम: मैं जो आईपैड (और संभवतः iPhone) को छोड़कर सभी उपकरणों पर काम करने लगता है एक चैट कार्यक्षमता बनाने के लिए किया था। हमारा ग्राहक चैट करने के लिए अपने आईपैड का उपयोग करता है और इसलिए मैंने पिछले 7-आईश महीनों के लिए समस्याओं को हल करने का प्रयास किया है।आईपैड ajax समस्याओं

है कि कब तक यह मेरे लिए कुछ हद तक समस्या को इंगित करने के लिए ले लिया।

समस्या आईपैड के ब्राउज़र में स्पष्ट रूप से है। मैं लाइब्रेरी jQuery का उपयोग कर जेएसओएन अजाक्स अनुरोध चलाता हूं। अनुरोध ठीक हैं, उनमें त्रुटियां नहीं हैं। कुछ बिंदु पर, आईपैड सिर्फ अजाक्स अनुरोध नहीं चलाता है। मुझे नहीं पता क्यों, मैं क्यों नहीं ढूंढ सकता। प्रत्येक अजाक्स अनुरोध लॉग होता है, लेकिन किसी बिंदु पर सर्वर को कोई अनुरोध नहीं मिलता है। मैंने एक अरब बार पूछा है और ग्राहक सकारात्मक है, वे इसे लॉक होने से रोकने के लिए केवल आईपैड को छू रहे हैं।

मैं प्रति मिनट लगभग 15 अनुरोधों के अनुरोधों की दर कम कर दिया है, लेकिन यह काम नहीं किया।

तो, मेरा प्रश्न है: क्या कोई जानकारी है कि आईपैड अचानक 10-15 मिनट के बाद अजाक्स अनुरोध भेजने से क्यों रोकता है?

+0

क्या यह कंप्यूटर पर सफारी पर काम करता है? – adarshr

+0

क्या आप एसिंक्रोनस अनुरोध कर रहे हैं? क्या आप कैश्ड = झूठी सेटिंग कर रहे हैं? – FlavorScape

+0

@adarshr हाँ हम यह –

उत्तर

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> 

तो, मैं एक घंटे के लिए इस भाग गया, और किसी भी मुद्दे, आईपैड नहीं था (पूरी तरह से अपडेट किया गया) बिना किसी लापता के पूरे भर में ठीक चला गया।

मैंने इसे क्रोम पर भी चलाया और इसका व्यवहार रिकॉर्ड किया। यह इस तरह दिखता है:

Chrome Profiler view, showing graphs for DOM Node, Event Listeners and memory usage.

(Full size)

वहाँ कुछ weirdness यहाँ, कि में पहली घटना श्रोताओं की संख्या स्थिर रहती है पर, तो कुछ समय बाद पागल हो जाता है ,, 56 अप करने के लिए बढ़ रही है 1 बार फिर से गिरने से पहले श्रोताओं। डोम नोड गणना भी बार-बार स्पाइक्स, 424 जितनी ऊंची है। दोनों के पास इस कोड की सादगी को ध्यान में रखते हुए काफी अजीब व्यवहार है।

है कि आपका ऐप्लिकेशन पर डोम नोड्स की संख्या पता लगाया जा रहा है, या घटना श्रोताओं की संख्या कुछ आईपैड क्या हो रहा है का ट्रैक, या ऐसा ही कुछ खोने के लिए पैदा कर रहा मूल्य तक पहुंच रहा है।

यह भी देख लायक है कि जब तक कचरा संग्रहण होता स्मृति उपयोग रैंप। ऐसा होने का मतलब है, हालांकि शायद यह आईपैड पर कम कुशल है।

संपादित करें: मैंने इसे फिर से एक साफ प्रोफ़ाइल पर परीक्षण किया है, कई ईवेंट श्रोताओं एक्सटेंशन के कारण हैं - वही व्यवहार होता है, लेकिन समान डिग्री नहीं, पृष्ठभूमि मूल्य 15-20 के बजाय 0-1 हैं

+0

मैं थोड़ी देर के लिए निदान चला रहा हूं, कुछ बातचीत के साथ (यह देखने के लिए कि क्या बातचीत मेमोरी लीक या कुछ भी कारण है) हालांकि स्मृति ठीक लगती है। एकमात्र शिखर पहले 2.5 मिनट (12 एमबी) में है लेकिन उसके बाद यह 5 एमबी से नीचे रहता है इसलिए मुझे संदेह है कि यह समस्या है। हालांकि प्रयास के लिए धन्यवाद। –

+0

यह वास्तव में अजीब तरह का है। मैं आईपैड को छोड़ने के कारण कुछ विनाशकारी निर्माण को देखने की उम्मीद कर रहा था ... शायद उनके आईपैड वाईफाई कनेक्शन को संक्षेप में खो रहे हैं, अनुरोध बंद कर देते हैं। मुझे नहीं पता कि आईपैड इसके बाद पूछना जारी रखेगा या नहीं। इसे पाने के लिए, आप कोड को आईफ्रेम में चला सकते हैं, फिर हर 10 मिनट में आईफ्रेम या कुछ ताज़ा करें। –

+0

मैं यह देखने के लिए देख रहा हूं कि इस दृष्टिकोण के साथ स्वाभाविक रूप से गलत कुछ है, लेकिन ज्यादा नहीं देख सकता है। स्पष्ट रूप से लंबे मतदान, या धूमकेतु या कुछ को देखकर शायद परेशानी के लायक नहीं है, लेकिन यह सोचने के लिए कुछ है। –