2009-04-24 20 views
12

मुझे आईई 7 पर jQuery AJAX कॉल के साथ कोई समस्या है। यह सरल कोड एफएफ और ओपेरा पर ठीक काम करता है। लेकिन आईई 7 पर यह 3-5sec लगता है। - यह एफएफ से 20 गुना धीमा है! सामग्री लोड हो रहा है शुद्ध HTML और इनलाइन जावास्क्रिप्ट कोड। कोई जेएस प्रतिपादन नहीं। मैं इनलाइन जावास्क्रिप्ट कोड भी बदल गया। बु अभी भी धीमा है।आईई 7 पर jQuery अजाक्स इतना धीमा क्यों है?

$('#block').load('some url'); 

इस समस्या को कैसे दूर करें? किसी भी तरह की सहायता का स्वागत किया जाएगा।

+0

आप कितना सामग्री लोड कर रहे हैं:

परिणामस्वरूप कोड कुछ इस तरह था? आईई आमतौर पर कुछ चीजों के लिए थोड़ा धीमा होता है, और बहुत सारी सामग्री होने पर बहुत धीमी होती है। – cgp

+0

11 केबी। क्या यह आईई 7 के लिए बहुत अधिक है? एफएफ ओपेरा क्रोम बहुत तेजी से लोड होता है। – taras

उत्तर

16

इस समस्या को कैसे दूर करें? किसी भी मदद को बहुत सराहा जाएगा।

पेज लोड पर आईई 7 का पता लगाएं, और एक अलग सुझाव प्रदान करें कि जो उपयोगकर्ता धीमी लोडिंग पसंद नहीं करते हैं उन्हें अपग्रेड करना चाहिए।

3

वास्तव में आप ऐसा नहीं कर सकते हैं। आईई का जावास्क्रिप्ट इंजन किसी भी अन्य की तुलना में धीमा तरीका है (वास्तव में, यह बेकार है)। आप आईई 8 आज़मा सकते हैं। यह बेहतर है ... मामूली ...

+0

वास्तव में, आईई 8 बहुत तेज़ है - और कुछ पहलुओं में, एफएफ 3 की तुलना में तेज़ यह विश्वास नहीं करता है। बिल्कुल सही उदाहरण StackOverflow है। मेरे पास "रुचि" के लगभग 21 टैग हैं, और आईई 7 ने इतनी धीमी गति से प्रस्तुत किया ... एफएफ बहुत बेहतर था। जब मैं आईई 8 में अपग्रेड किया गया, आईई 8 अब स्टैक ओवरफ्लो पर चिल्लाता है। इस बिंदु पर कि फ़ायरफ़ॉक्स अब SO पर धीमा है। तो, मैं एसओ पर आईई पर वापस आ गया हूँ। :) – eduncan911

+6

अब सफारी 4 या क्रोम पर आज़माएं। आप सही हैं, यद्यपि। फ़ायरफ़ॉक्स हाल ही में निराशाजनक रहा है (जब फायरबग के कारण विकासशील हो रहा है ... हम उस चीज़ के बिना क्या करेंगे ??)। आईई 8 ने डेवलपर टूलबार जोड़ा, जो कि लोड से बेहतर है, ओह, कुछ नहीं ... लेकिन, यह अभी भी फायरबग नहीं है। ओटी रान के लिए खेद है। – KyleFarris

+1

डेवलपर टूलबार आईई 6 – John

8

मुझे धीमी जेस्क्रिप्ट यानी 7 इंजन के साथ एक ही समस्या थी। मैंने मानव के लिए एक स्थिति पॉपअप विंडो जोड़ा। मैं स्टेटस विंडो अपडेट करता हूं क्योंकि जेएस भाग में जेएस की कमाई करता है। छद्म कोड:

  1. अपने पक्ष जेएस लाइब्रेरी का उपयोग कर स्थिति कंटेनर बनाएं। मैं यूयूआई पसंद करता हूँ। उनके कंटेनर एपीआई देखें।
  2. अपना कुछ डेटा लोड करें। - आपको इसे पहले भाग में विभाजित करने की आवश्यकता होगी
  3. स्थिति पॉपअप अपडेट करें। (% लोड पूरा हो गया है, बार संकेतक इत्यादि बढ़ाएं) ध्यान दें कि स्क्रीन शायद आपके बिंदु पर नहीं बदलेगी क्योंकि आपका जेएस थ्रेड अभी भी चल रहा है।
  4. इसके बाद, फोन
var t = setTimeout("next_step(2)", 0); 
// Where arg of 2 would mean do the second step 
// This will yield to the browser, and the display will then be updated. 
// If you want to maintain the value of "this" in the function, then do 
// something like 
var t = setTimeout("next_step.call(MyContext, 2)", 0); 
// using call to set the function's context.

निष्कर्ष है कि उपयोगकर्ता कुछ स्क्रीन पर बदल रहा है देखेंगे। ध्यान दें कि 0 के टाइमआउट के साथ उपज करने का चरण काफी समय लगता है, अपेक्षाकृत बोल रहा है। तो मेरा कोड ब्राउज़र का परीक्षण करता है और आईई के अलावा कुछ भी है तो प्रति कार्य अधिक काम करता है।

उपयोगकर्ता को बदलती प्रतिक्रिया प्रदान करना बहुत महत्वपूर्ण है। अन्यथा वे सोचते हैं कि यह वास्तव में उससे अधिक समय ले रहा है।

HTH,

लैरी

+0

मुझे इस मुद्दे को कई बार खुद मिला है और आपने अपने उत्तर में एक ही "छद्म" थ्रेडिंग तकनीक लागू की है। अक्सर मुझे एक क्यूइंग तंत्र बनाना पड़ा। jQuery 1.3 ने एक कतार लागू की जो http://docs.jquery.com/Effects/queue –

+0

उत्कृष्ट सुझाव के साथ काम करने के लिए बहुत आसान बना सकता है। एसिंक कॉल या संभवतः बहुत गहन एल्गोरिदम करते समय हमेशा कुछ प्रकार की प्रतिक्रिया होनी चाहिए जो एक सेकंड से अधिक समय ले सकती है (भले ही यह केवल 'लोडिंग' एनीमेशन हो)। हालांकि यह किसी भी ब्राउज़र/कार्यान्वयन के लिए चला जाता है। – KyleFarris

3

मैं वास्तविक कोड को देखने के लिए है, लेकिन एक ऐसी ही समस्या मैं jQuery.load() से छुटकारा पाने के लिए किया था करने के लिए का सामना करना पड़ा था। इसके बजाय, मैंने jQuery.get() "html" डेटा प्रकार के साथ उपयोग किया और अपना खुद का कॉलबैक लिखा, जहां मैंने के माध्यम से डेटा इंजेक्शन दिया .innerHTML। ऐसा करने के बाद, मैंने एक और बग भी मारा (यह < > टैग का चयन करें और आईई इस पर विजेता HTML की अनुमति नहीं देगा) इसलिए मैंने एक बदसूरत कामकाज लिखा।

// Fetch data (GET method allows me to use browser cache) 
$.get(url, get, function(htmlValues, txtStatus){ 
    that.populateSelects(htmlValues, that.selectContainers); 
}, "html"); 


// Create <select> 
var select = $('<span><select disabled="disabled"></select></span>'); 
$("<option>").attr("value", "").text("Loading...").appendTo(select.find("select")); 


// Populate <select> 
that.populateSelects = function(values, selectContainers){ 
    var span, select, tags; 

    for(var i=0, len=selectContainers.length; i<len; i++){ 
     span = selectContainers[i]; 

     if($.browser.msie){ 
     tags = span.innerHTML.match(/^(<select[^>]+>).*(<\/select>)$/i); 
     span.innerHTML = tags[1] + values + tags[2]; 
     select = span.firstChild; 
     }else{ 
     select = span.firstChild; 
     select.innerHTML = values; 
     } 
     $(select).removeAttr("disabled"); 
    } 
} 
+0

इसके लिए चीयर्स, मैंने $ .get + innerHTML के साथ $ .load को प्रतिस्थापित करके अपने ऐप के लोडिंग समय से कुछ सेकंड शेव करने में कामयाब रहा है। –

संबंधित मुद्दे