प्रत्येक पुनरारंभ के बाद, मेरी स्थानीय .NET साइटें पहली बार लोड करने के लिए समय क्यों लेती हैं? [बन्द है]


27

मैं .NET प्लेटफ़ॉर्म पर आधारित साइटें विकसित कर रहा हूं। मैं आमतौर पर अपने स्थानीय IIS पर इन साइटों को तैनात करता हूं, ताकि मैं उन्हें लाइव देखने से पहले उनकी जांच कर सकूं और उनकी कार्यक्षमता देख सकूं। हालांकि, हर बार जब मैं विंडोज़ को पुनरारंभ करता हूं, तो ऐसा लगता है कि साइटों को पहली बार चलने में लंबा समय लगता है।

मुझे जेआईटी के बारे में पता है और मुझे इस सवाल की जानकारी भी है , लेकिन यह मेरे सवाल का जवाब नहीं देता है।

क्या जेआईटी हर बार जब आप खिड़कियों को पुनरारंभ करते हैं तो क्या होता है? क्या यह w3wp.exe प्रक्रिया के निर्माण से संबंधित है? प्रत्येक पुनः आरंभ के बाद साइटें पहले अनुरोध के लिए इतनी धीमी क्यों हैं?


3
इसे "कोल्ड स्टार्ट" या कुछ और के रूप में जाना जाता है। सिस्टम को w3wp को मेमोरी में लोड करना होता है, जिसे सभी संबंधित डीएल की भी आवश्यकता होती है, शायद जेआईटी सामान, प्रोसेस इंपोर्ट टेबल, डिस्क से डेटा पढ़ें, क्योंकि यह रैम कैश में नहीं है, आदि
कोडर

आपकी टिप्पणी के लिए @ कोडर, +1। लेकिन क्या आप एक उत्तर में अधिक व्याख्या कर सकते हैं, ताकि मैं और अन्य डेवलपर लाभ का उपयोग कर सकें। :)
सईद नेमाटी

IIS मेरी विशेषता नहीं है, इसलिए मुझे आशा है कि कोई बेहतर उत्तर देगा। यहाँ एक ऐसा ही विषय है जिसे मैंने कुछ समय पहले शुरू किया था stackoverflow.com/questions/3807791/cold-startup-optimization शायद यह कुछ और मदद करेगा।
कोडर

4
यह प्रश्न ऑफ़-टॉपिक प्रतीत होता है क्योंकि यह कार्यान्वयन समस्या के बारे में है, न कि वैचारिक प्रोग्रामिंग समस्या के बारे में।

जवाबों:


32

यह समस्या JIT संकलन है। यह शुरू करने से पहले पुस्तकालयों के निर्माण के लिए एप्लिकेशन पूल को समय चाहिए होता है। यह एक वार्मअप स्क्रिप्ट का उपयोग करके किया जा सकता है, लेकिन यह कुछ ऐसा होना चाहिए जो होना चाहिए। यह इस बात पर भी निर्भर करता है कि आप किसी वेबसाइट या वेब एप्लिकेशन प्रोजेक्ट का उपयोग कर रहे हैं। एक वेबसाइट हर पेज के लिए JIT है, इसलिए पहली हिट बहुत धीमी है और प्रत्येक नए पेज हिट के लिए एक अतिरिक्त संकलन समय भी है। वेब एप्लिकेशन प्रोजेक्ट पहले से तैयार हैं इसलिए इस हिट को बुरी तरह से नहीं सहना चाहिए, लेकिन पुस्तकालयों को अभी भी लोड करने की आवश्यकता है। जितने अधिक लाइब्रेरियाँ / उपकरण आपके पास इस हिट को उतना ही ख़राब करते हैं। यहां कुछ लिंक दिए गए हैं जो वार्म अप पर चर्चा करते हैं:

http://weblogs.asp.net/gunnarpeipman/archive/2010/01/22/iis-application-warm-up-module.aspx http://blogs.iis.net/steveschofield/archive/2009/05/30 /application-pool-warm-up.aspx /programming/2063461/iis-web-applications-warmup http://sharepoint.smayes.com/2011/06/application-pool-specific-warm -अप-लिपियों /


6
यह ज्यादातर सही है लेकिन संकलन और जटिंग के बीच एक अंतर है जो इस उत्तर में स्पष्ट नहीं है। Jitting .NET कोड कोड को मशीन कोड से संकलित कर रहा है। ASP.NET वास्तव में उन वेब पेजों को संकलित कर रहा है, यहां तक ​​कि एक वेब एप्लीकेशन प्रोजेक्ट में (जब तक कि आप aspnet_compiler का उपयोग नहीं करते हैं)। यह सब संकलन / निर्माण समय, प्लस जटिंग और लाइब्रेरी लोड समय, यही कारण है कि यह इतना धीमा है।
हारून

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

9

आपके पहले अनुरोध पर धीमी प्रतिक्रिया है क्योंकि IIS केवल एक साइट या एप्लिकेशन पूल को पहले आवक अनुरोध पर शुरू / लोड करता है। और एक निश्चित समय के बाद कोई नया आने वाला अनुरोध सर्वर पर नहीं आता है IIS साइट को फिर से रोकता है (ऐप पूल रीसाइक्लिंग)।

ASP.NET 4.0 में एक नई सुविधा है जिसे ऑटो-स्टार्ट कहा जाता है। इस सुविधा के साथ आप किसी भी अनुरोध से पहले खुद को शुरू करने के लिए एक एप्लिकेशन पूल या व्यक्तिगत साइट सेट कर सकते हैं। यह बूट समय पर शुरू होता है (जब IIS शुरू होता है) या जब आप ASP.NET साइट को अपडेट करते हैं (जो साइट को रोकता है)।

<applicationPools>
    <add name="MyAppPool" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" />
</applicationPools>

<sites>
    <site name="MySite" id="1">
        <application path="/" serviceAutoStartEnabled="true" />
    </site>
</sites>

इसका उपयोग करने के लिए आपको IIS 7.5 की आवश्यकता है।

जब ऑटो-स्टार्ट किक करता है, तो कुछ अतिरिक्त कार्य करने का विकल्प भी होता है। डेटा को कैश में प्रीलोड करने के लिए।


आम तौर पर वेब सर्वर पर डालने से पहले आप अपनी पूरी साइट को संकलित करते हैं, इसलिए पहले अनुरोध पर कोड को किसी भी अधिक संकलित करने की आवश्यकता नहीं है। JIT का उपयोग केवल उन साइटों के लिए किया जाता है जो App_code फ़ोल्डर का उपयोग करते हैं, जहाँ आप वेबसाइट के साथ अपना स्रोत कोड प्रकाशित करते हैं।
अस्त

2

समस्या का एक हिस्सा जीएसी भी है। पुस्तकालयों के स्थानों को हर बार लोड किए जाने के बाद सुरक्षा की जांच करने की आवश्यकता होगी - इसका मतलब है कि एन्क्रिप्शन प्रकार का एक पूरा लोड काम किया जा रहा है, और यह चीजों को बहुत धीमा कर देता है। MS से थोड़ी देर पहले WPF के प्रदर्शन के बारे में एक बात हुई जिसने इस समस्या का वर्णन किया - उनका जवाब था "GAC में सामान न रखें यदि आप इसकी मदद नहीं कर सकते हैं"


1
यह "नकारात्मक मदद कर सकता है" होना चाहिए
रिचर्ड स्ज़ले

1

निम्न ट्रैफ़िक वेबसाइटों के लिए IIS में कष्टप्रद (कभी-कभी) सुविधा होती है। यह अप्रयुक्त कार्यकर्ता प्रक्रियाओं को याद करता है - जो साइट के पहले उपयोगकर्ता का कारण बनता है; कभी-कभी बहुत लंबा विलंब (30+ सेकंड)। http://dotnettimes.wordpress.com/2014/03/24/fixing-slow-initial-load-for-iis-web-site/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.