2009-10-27 8 views
19

मैं उम्मीद कर रहा था कि कोई भी वेब पेज के रीफ्रेशिंग के संबंध में मेरे पास एक मौलिक प्रश्न का उत्तर दे सकता है।जब हम एक वेब पेज रीफ्रेश करते हैं तो क्या होता है?

मेरे पास एक डॉटनेट वेबफॉर्म है जहां कोई उपयोगकर्ता कुछ विवरण और क्लिक सबमिट करता है। वेबपृष्ठ के पीछे कोड करने के लिए लगभग 20 कार्य हैं।

अब मानते हुए, जब उपयोगकर्ता सबमिट बटन पर क्लिक करता है तो वेब पेज 5 वें कार्य निष्पादित कर रहा है और इस बीच उपयोगकर्ता अपने ब्राउज़र को रीफ्रेश करता है;

पहले से प्रसंस्करण पृष्ठ का क्या होगा? क्या पृष्ठ तुरंत समाप्त हो जाएगा? या इसे 20 वें कार्य निष्पादित होने तक चलाने की अनुमति दी जाएगी? या क्या पेज चल रहा है और एक नया पृष्ठ बनाया गया है और क्लाइंट को भेजा गया है?

आपके उत्तरों के लिए धन्यवाद।

उत्तर

15

एक बार अनुरोध किया जाता है ब्राउज़र से सर्वर पर पृष्ठ संसाधित किया जाता है। भले ही उपयोगकर्ता अनुरोध को रद्द या बंद कर देता है, सर्वर अनुरोध को संसाधित करता रहता है। यदि उपयोगकर्ता पृष्ठ को पुनः लोड/रीफ्रेश करता है, तो यह एक और अनुरोध है जिसे पहले अनुरोध के साथ समानांतर में निष्पादित किया जाएगा।

यहां तक ​​कि PHP के मामले में, सर्वर सक्रिय रूप से जांच नहीं कर रहा है कि user has aborted कनेक्शन है या नहीं। सर्वर केवल जानता है कि यह अनुरोध के परिणामों को वापस करने का प्रयास करते समय निरस्त कर दिया गया है।

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

0

बस, उपयोगकर्ता जो पृष्ठ देख रहा है वह खो गया है जब तक सत्र में, वे इसे फिर से नहीं उठा सकते हैं। लेकिन सर्वर को पता नहीं है कि उपयोगकर्ता डिस्कनेक्ट हो गया है, इसलिए एप्लिकेशन चालू रहेगा, जब तक एप्लिकेशन पर सत्र/टाइमआउट न हो, तब भी सत्र समाप्त नहीं होने पर यह अजीब होगा।

उम्मीद है कि इससे मदद मिलती है।

आरई

0

कोड निष्पादन अंत तक जारी रहेगा।

+0

हमम ... इस दावे का संदर्भ प्रदान करने की देखभाल? – jldupont

+0

@Dani - सच नहीं है। कम से कम PHP के लिए मुझे पता है। – mauris

+1

एएसपीनेट के लिए यह करता है, कम से कम जब मैं गलती से पृष्ठ पर रीफ्रेश मारा जाता है, जबकि सर्वर लंबे ऑपरेशन पर फंस गया था, तो मुझे लगता है कि यह सभी कोड को पूरा करता है और केवल तब पृष्ठ को फिर से लोड करता है। – Dani

0

मेरा मानना ​​है कि एक वेब पेज (निश्चित रूप से ग्राहक पक्ष पर) एकल थ्रेड में निष्पादित किया गया है। यदि आपका "ऑनसममिट" फ़ंक्शंस का निशान कहता है, तो यह आपके ऊपर है लेकिन किसी बिंदु पर आप (शायद) सबमिट करना चाहते हैं() फॉर्म।

दूसरे शब्दों में (आपके विशिष्ट मामले में), सभी फ़ंक्शन ट्रेल तब तक जारी रहेगा जब तक फ़ॉर्म भेजा नहीं जाता है।

दूसरी ओर, यदि आप "को फिर से लोड" बटन दबाते हैं, निष्पादन समाप्त है।

2

जब कोई पृष्ठ ब्राउज़र पर रीफ्रेश किया जाता है, तो ब्राउज़र पृष्ठ की ताजा प्रति और उसके घटकों (सीएसएस, जेएस, और इसी तरह ... पर कैश नहीं किया जाता है) के लिए सर्वर पर कॉल करता है।

यदि पृष्ठ एक पोस्ट कॉल था, तो ब्राउज़र फिर से डेटा पोस्ट करेगा।

पृष्ठ लोड किया पूरा कर लिया है:

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

पृष्ठ के माध्यम से आधे रास्ते लोड कर रहा है:

वर्तमान पृष्ठ के लिए कनेक्शन तुरंत डिस्कनेक्ट कर दिया जाएगा - अगर पृष्ठ अभी भी लोड कर रहा है। यह सर्वर पर निर्भर करता है कि पृष्ठ को जारी रखने या समाप्त करने के लिए। उदाहरण के लिए PHP में हम स्क्रिप्ट को चालू रखने के लिए ignore_user_abort() को अनदेखा कर सकते हैं भले ही पृष्ठ लोड होने के माध्यम से आधे रास्ते को समाप्त कर दिया गया हो।

यदि आपका सर्वर एएसपी है, और आप एएसपी बटन पर क्लिक करते हैं, तो बटन की क्रिया (विधि) पूरी तरह से सर्वर की तरफ पूरी की जाएगी, भले ही उपयोगकर्ता आधा रास्ते रीफ्रेश हो। इस तरह एएसपी.नेट ढांचा किया जाता है।

+1

क्लाइंट ब्राउज़र पर एक पृष्ठ भेजा जाने के बाद, सर्वर के पास ** के साथ कुछ भी नहीं है जब तक कि ग्राहक कुछ और करना चाहता है। – jldupont

+0

बेशक सर्वर डेटा स्ट्रीम के अंत भेजने में देरी करके ग्राहक पक्ष को पकड़ सकता है ... लेकिन यह एक और कहानी है। – jldupont

+0

@jldupont - जबकि पृष्ठ लोड हो रहा है (पृष्ठ की सामग्री - बाहरी घटक नहीं), सर्वर के पास अभी भी ग्राहक के साथ कनेक्शन है। – mauris

0

सभी funcs निष्पादित किया जाएगा, यहां तक ​​कि आप ताज़ा कर सकते हैं, आप एक परीक्षण कर सकते हैं। लेकिन .NET में यह जांचने के लिए एक फ़ंक्शन प्रदान करता है कि क्लाइंट अभी भी सर्वर से कनेक्ट है (आपके पहले सबमिट के लिए, इसका मतलब है कि सर्वर यह जांच सकता है कि क्या ग्राहक सबमिट करने के बाद किसी भी समय प्रतिक्रिया के लिए प्रतीक्षा कर रहा है)