2011-08-17 8 views
7

मुझे कुछ अलग-अलग वर्गों (आंशिक विचारों) के साथ एएसपी.नेट एमवीसी में एक पोर्टल पेज मिला है, जिनमें से कुछ उपयोगकर्ता द्वारा पहली बार पहुंचने पर अपरिहार्य रूप से धीमा हो जाएगा, क्योंकि उन्हें अद्यतित करना है बाहरी इंटरनेट स्रोत से डेटा।मैं धीरे-धीरे धीमे पृष्ठ को लोड करने के लिए प्रगतिशील वृद्धि तकनीकों का उपयोग कैसे कर सकता हूं?

इस डेटा के कुछ लगभग तुरंत लोड किया जा सकता है, लेकिन पुराने "वेब 1.0" डिजाइन सिर्फ डेटा के सभी उपलब्ध है जब तक एक "लोड हो रहा है" पृष्ठ को जाता है। मैं तुरंत स्थानीय डेटा प्रदर्शित करके उपयोगकर्ता अनुभव को बेहतर बनाने की कोशिश कर रहा हूं, और उसके बाद कुछ सेकंड बाद दूरस्थ डेटा प्रदर्शित करने के लिए कुछ AJAX अपडेट का उपयोग कर रहा हूं।

बेशक मैं जावास्क्रिप्ट को तोड़ने, अवरुद्ध होने या किसी भी कारण से समर्थित नहीं होने पर प्रगतिशील वृद्धि का उपयोग करके ऐसा करना चाहता हूं। मेरा पहला विचार मेटा रीफ्रेश का उपयोग करना था और इसे जावास्क्रिप्ट से अक्षम करना था, लेकिन apparently that's impossible। मैं भी हिंसकwindow.location रीडायरेक्ट के विचार के विपरीत है, क्योंकि (ए) यह एक सर्वर रीडायरेक्ट के विपरीत, अत्यधिक समझदार है, और (बी) यह जेएस रीडायरेक्ट पर काम करने के लिए संभावना के दायरे में अच्छी तरह से है लेकिन AJAX अभी भी ब्रेक करें (आईई 6, बीमार व्यवहार वाले मोबाइल डिवाइस इत्यादि)

क्या कोई तरीका है कि मैं चरणों में लोड होने वाला एक पृष्ठ बना सकता हूं, लेकिन अभी भी सादे HTML के साथ काम करता है?

+0

यह एक * बुरा * सुझाव हो सकता है, लेकिन जब हम किसी साइट पर विज्ञापन प्रदर्शित करते हैं, तो हम iframes का उपयोग करते हैं और विज्ञापनों को प्रस्तुत करते हैं क्योंकि iframes में सामग्री लोडिंग वर्तमान पृष्ठ की लोडिंग को धीमा नहीं करती है। यह मेरे लिए होता है कि आप शायद कुछ पृष्ठों को अद्यतन करने के लिए AJAX का उपयोग करने के बजाय iframes का उपयोग कर सकते हैं। यह संभोग इस बात पर निर्भर करता है कि आपका डिज़ाइन इसका समर्थन कर सकता है और निश्चित रूप से आपके ब्राउज़र का समर्थन आईफ्रेम का मुद्दा है। – Ali

उत्तर

0

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

+0

"आपके जावास्क्रिप्ट में त्रुटि प्रबंधन 'अजाक्स ठीक से काम नहीं करता' परिदृश्य का ख्याल रख सकता है" - यह कैसे है, बिल्कुल? वैसे भी, सामग्री के बिना इसे सेवा * कभी * निश्चित रूप से * एक उपयुक्त विकल्प नहीं है। – Aaronaught

+0

एक उदाहरण jquery AJAX "त्रुटि" घटना होगी। हम किस प्रकार की बाहरी सामग्री के बारे में बात कर रहे हैं? क्या आप इसे सर्वर-साइड खींच सकते हैं और प्रत्येक अनुरोध के लिए इसे लाने के बजाय इसे कैश कर सकते हैं? – centralscru

+0

यह पहले से ही कैश किया जा रहा है; मुद्दा प्रारंभिक भार है। और AJAX "त्रुटि" घटना का मानना ​​है कि स्क्रिप्ट वास्तव में अब तक हो जाती है। पागल चीजों के सभी प्रकार हो सकते हैं, एक बाधित डाउनलोड की तरह, उपयोगकर्ता स्टॉप बटन को मार रहा है, या दूषित/पुराना ब्राउज़र कैश। यह वास्तव में कोई फर्क नहीं पड़ता - प्रगतिशील वृद्धि का बिंदु ऐसी साइट है जो सादे पुराने एचटीएमएल में * काम करता है * और फिर * जेएस के साथ * बढ़ाएं। आप यहां जो सुझाव दे रहे हैं वह बहुत ही सुन्दर गिरावट नहीं है। – Aaronaught

1

जैसा कि अली अपनी टिप्पणी में बताता है, धीमी लोडिंग सामग्री के लिए iframes का उपयोग करने का तरीका लगता है।

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

तो जावास्क्रिप्ट वाले उपयोगकर्ताओं को अभी भी सामग्री दिखाई दे रही है लेकिन आपकी स्थानीय सामग्री जल्दी से लोड हो जाती है, जबकि जावास्क्रिप्ट सक्षम उपयोगकर्ताओं के पास एक अच्छा AJAX अनुभव होगा।

<html> 
    <head> 
    <script src="http://code.jquery.com/jquery-latest.js"></script> 
    <head> 
    <body> 
    <div>Fast Loading Content...</div> 

    <iframe id="slowContent" src="http://example.com/slowLoadingContent.htm"></iframe> 

    <script type="text/javascript"> 
     $('#slowContent').remove(); // removes both the iframe and any bound events 

     // execute your ajax routines to pull in the slowLoadingContent and modify as appropriate 
    </script> 
    </body> 
</html> 
2

मैं दृष्टिकोण की एक जोड़ी के साथ अतीत में इस हल किया है::

jQuery का उपयोग कर आप कुछ इस तरह कर सकते हैं आइफ्रेम को निकालने के लिए एक है धीमी गति से सामग्री के लिए अलग पेज बनाने के लिए है, तो कि जिन उपयोगकर्ताओं को किसी कारण से जेएस नहीं मिला है या नहीं, वे सामग्री प्राप्त करने के लिए एक लिंक पर क्लिक कर सकते हैं। अनुभव अलग है, लेकिन काम करता है।

ऐसा करने का एक और तरीका है कि स्थगित क्षेत्रों में "शो" लिंक होना है। जेएस लिंक हटा देता है और सामग्री को सम्मिलित करता है। यदि उपयोगकर्ता सामग्री देखना चाहता है तो वे लिंक पर क्लिक करते हैं, एक रीफ्रेश ट्रिगर करते हैं जो सामग्री को स्थगित नहीं करेगा।

0

यदि आप बिल्कुल पृष्ठ को प्रस्तुत करने के लिए सभी या कुछ भी प्रस्तुत नहीं करना चाहते हैं, तो आपके पास "शेष सामग्री को देखने के लिए एक मिनट में इस पृष्ठ को पुनः लोड करें" संदेश/लिंक हो सकता है।

अन्यथा "फ्रेम" (उपयोग) या अलग पृष्ठ एक बहुत अच्छी योजना है।

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

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