2009-03-27 17 views
5

मैं कुछ सीजीआई स्क्रिप्ट विकसित कर रहा हूं और जब मैं "उपयोग" के साथ बहुत सारे मॉड्यूल आयात करता हूं तो "उत्पादन समय" को कम करने के लिए एक समाधान खोजने का प्रयास कर रहा हूं।मैं पर्ल सीजीआई स्क्रिप्ट स्टार्ट-अप समय को कैसे कम कर सकता हूं?

अद्यतन:

प्रदान की समाधान अच्छे हैं, लेकिन स्क्रिप्ट मैं दोनों कंसोल और सीजीआई मोड पता चल सके कि कुछ विशिष्ट HTTP वातावरण चर मौजूद हैं में रन काम कर रहा हूँ।

"कंसोल मोड" में वे डंप डेटा "सामान्य रूप से", और "एचटीएमएल मोड" में वे कुछ वास्तविक समय प्रतिस्थापन बनाने के लिए और ग्राहक के लिए अन्य HTTP हेडर भेजें।

मैं दोनों मामलों में स्टार्टअप समय में सुधार करना चाहता हूं।

+0

क्या आप प्रत्येक अनुरोध के लिए एक नई प्रक्रिया बना रहे हैं? –

+0

हाँ, लेकिन नहीं है कि वास्तव में मेरी मुख्य समस्या यह है, के बाद से कुछ स्क्रिप्ट दोनों कंसोल और सीजीआई मोड ^^ भी – mndg

उत्तर

9
  • यकीन है कि यह वास्तव में अपने टोंटी
  • केवल आयात मॉड्यूल आप
  • जरूरत है सुनिश्चित करें कि आप एक असंख्य स्थानों की खोज करने में
  • पर विचार करें गर्म चलाने महंगा स्टार्टअप के साथ होने की प्रक्रिया को खोजने के लिए नहीं कर रहे हैं सुनिश्चित है (एक डेमॉन के रूप में उदाहरण के लिए) और हल्के वजन सीजीआई स्क्रिप्ट का उपयोग उन्हें नहीं बल्कि एक खोल से पूर्ण सीजीआई कर की तुलना में विभिन्न त्वरक में
  • देखो शुरू करने के लिए (क्या आप पृष्ठों की सेवा करने के लिए प्रयोग कर रहे हैं पर निर्भर करता है)।
10

कैसे mod_perl का उपयोग कर अपने शेयरों को चलाने के लिए के बारे में?

12

क्रम में CGI::Fast का उपयोग कर एक पर्ल की प्रक्रिया शुरू करने के लिए कई अनुरोधों को हैंडल करने पर विचार करें। सीजीआई :: फास्ट पर मेरी कुछ बड़ी सीजीआई स्क्रिप्ट को बदलने के लिए मुझे बहुत कम प्रयास आया। Mod_perl के विपरीत, CGI :: होस्टिंग साइटों पर तेज़ चलाने के लिए बहुत आसान है क्योंकि आप अपाचे को पुनरारंभ किए बिना अपनी स्क्रिप्ट को पुनरारंभ कर सकते हैं (कम से कम यही है कि मेरे होस्टर ने मुझे mod_perl के लिए कहा था)।

+2

+1 # नोट करने के लिए अच्छा है, FCGI सर्वर कार्यान्वयन के लिए बाध्य है, यह बड़े पैमाने पर अधिक पोर्टेबल बनाने नहीं है में चलाता है। –

+0

अच्छा लगता है, और यदि स्क्रिप्ट कंसोल मोड में भी चलती है? अधिक टिप? thx :) – mndg

+0

mod_perl को पुनरारंभ किए बिना अपने प्रोग्राम को पुनरारंभ करना संभव है। लेकिन फास्टसीजीआई सरल है। –

4

तुम हमेशा less pragma की कोशिश कर सकते:

use less 'starttime'; 
बेशक

, कि इस प्रणाली निर्भर * है। आपकी सबसे अच्छी शर्त mod_perl या फास्टसीजीआई मॉड्यूल में से एक का उपयोग करना है: CGI::Fast, FCGI, etc

आप एक क्लाइंट/सर्वर वास्तुकला के लिए स्थानांतरित करने के लिए (जो सभी FastCGI जाता है) चाहते हो सकता है यह कमांडलाइन से तेजी से होने की जरूरत है, तो।

* कोई सिस्टम चेतावनी वर्तमान में कम pragma के लिए एक StartTime विकल्प को लागू।

+0

wops, ऐसा लगता है कि यह बहुत पोर्टेबल ^^ नहीं है – mndg

2

ठीक है, दूसरों को पहले से ही सुझाव दिया है कि सीजीआई यहाँ समस्या हो सकती है, तो मैं विचार करेंगे कि आप तस्वीर से सीजीआई नहीं निकाल सकते।

आप this old article विचार करना चाह सकते। स्पष्ट रूप से धीमी स्टार्टअप समय का एक स्रोत एक विशाल @INC है, इसलिए एक छोटी PERL5LIB में सबकुछ समेकित करने में काफी मदद मिलती है (यह एक उचित धारणा प्रतीत होती है, लेकिन मैंने कभी कोशिश नहीं की)।

वैकल्पिक रूप से (या अतिरिक्त), यदि आप रन टाइम पर कुछ मूल्य का भुगतान कोई आपत्ति नहीं है आप का उपयोग Class::Autouse

का आनंद लें कर सकते हैं!

1

SpeedyCGI या लगातार पर्ल का उपयोग करें।

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

यह जो/मामला है जब सीजीआई :: फास्ट या मोड-पर्ल का उपयोग नहीं हो सकता हैं दोहरे वातावरण सेटअप आप वर्णित के साथ ठीक काम करना चाहिए।

संपादित इस मदद करता है, तो ठीक। यदि ऐसा नहीं होता है, तो आपको यह मापना होगा कि आपकी स्क्रिप्ट अपना रन-टाइम कहां खर्च करती है।

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

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