2009-05-05 7 views
12

शौक प्रयोजनों के लिए, मेरे पास एक होस्टिंग सर्वर पर एक साझा स्थान है जो प्रदान कर रहा है, उनमें से कई PHP और पर्ल CGI दोनों हैं। मैंने कई स्थानों पर पढ़ा है कि सीजीआई स्क्रिप्ट अब अप्रचलित हैं, मुझे लगता है कि मुख्य रूप से प्रदर्शन के मुद्दों (जैसे Is PHP or vanilla Perl CGI faster?) के लिए।मुझे PHP (या इसके विपरीत) के बजाय पर्ल सीजीआई का उपयोग कब करना चाहिए?

लेकिन चूंकि मैंने अभी पर्ल का अध्ययन करना शुरू किया है, इसलिए मैं PHP में समाधान लागू करने पर समय बर्बाद नहीं करना चाहता हूं जो पर्ल में आसान (या केवल संभव) है।

इसके अलावा बॉयलरप्लेट मुद्दे भी हैं, मुझे सीपीएएन (यह अस्तित्व है, अभी तक सामग्री नहीं है) से अवगत है, लेकिन PHP पुस्तकालयों से परिचित नहीं है (हालांकि मुझे कोई संदेह नहीं है कि वे मौजूद हैं)। मैं 10^10 वें समय के लिए स्क्रैच से लॉगिन प्रक्रिया या मूल उपयोगकर्ता प्रशासन लिखने के लिए तैयार नहीं हूं।

मैं इस बिंदु पर विलासिता नहीं करता हूं ताकि शौक परियोजनाओं के लिए अनुसंधान में काफी समय बर्बाद हो सके, इसलिए मैंने सोचा, चलो हेडस्टार्ट के लिए विशेषज्ञों से पूछें।

+2

सादा सीजीआई के बजाय, उत्प्रेरक पर एक नज़र डालें। http://catalystframework.org –

+1

@ ब्रैड गिल्बर्ट - आप CGI.pm और CGI इंटरफ़ेस को भंग कर रहे हैं। उत्प्रेरक को सीजीआई के रूप में चलाया जा सकता है (स्टार्टअप ओवरहेड थोड़ा खड़ा है, लेकिन यह स्वीकार्य हो सकता है)। – daotoad

+0

सवाल यह है कि क्या वे आपको वेबसेवर, CGI.pm या दोनों में एक CGI इंटरफ़ेस प्रदान करते हैं। नामकरण के संयोग का अर्थ है कि हम नहीं बता सकते - क्या आप जानते हैं? – ijw

उत्तर

28

सीजीआई की "अप्रचलित" -नेस वास्तव में केवल एक कारक है यदि आप बड़ी संख्या में पृष्ठ दृश्यों के साथ बड़ी, जटिल साइटें कर रहे हैं।

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

सीजीआई एक वेबसर्वर वाला एक इंटरफेस है जो आपको किसी भी भाषा में इंटरैक्टिव पेज लिखने की अनुमति देता है - even befunge। जब कोई सर्वर किसी CGI स्क्रिप्ट द्वारा नियंत्रित पृष्ठ के लिए अनुरोध प्राप्त करता है, तो सर्वर स्क्रिप्ट चलाता है और परिणाम को अनुरोधकर्ता को देता है।

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

फास्टसीजीआई, mod_php, mod_perl जैसे सीजीआई त्वरक और आगे, स्मृति में एक दुभाषिया/वीएम रखें, लाइब्रेरी लोड हो सकते हैं, और स्क्रिप्ट स्टार्ट-अप ओवरहेड को कम करने के लिए स्क्रिप्ट से बाइटकोड भी कैश कर सकते हैं।

यदि आप एक साधारण, व्यक्तिगत या शौक साइट बना रहे हैं, तो CGI ठीक रहेगा। तो PHP होगा।

यदि आपकी साइट को एक तेज तकनीक की आवश्यकता होनी चाहिए, तो आप mod_perl, FastCGI, या अन्य CGI त्वरण तकनीकों में जा सकते हैं।

आपके द्वारा उपयोग की जाने वाली भाषा को आपके द्वारा प्रदान किए जाने वाले टूल और उनकी आवश्यकताओं के अनुरूप कैसे निर्धारित किया जाना चाहिए।

  1. आपकी क्षमताओं की एक सूची बनाएं।
  2. सौदा ब्रेकर की एक सूची बनाएं।
  3. अब इन दो सूचियों के खिलाफ अपने प्रत्येक संभावित टूलसेट की जांच करें।
  4. कौन सा सबसे अच्छा आता है? झसे आज़माओ।
  5. क्या यह चूसता है? इसे अपनी सूची से क्रॉस करें, और चरण 4 पर वापस जाएं।

इसके अलावा, मैं befunge का उपयोग करने के खिलाफ अनुशंसा करता हूं। सिर्फ इसलिए कि यह संभव है, इसका मतलब यह नहीं है कि आपको इसका उपयोग करना चाहिए।


अद्यतन: mpeters के रूप में बताते हैं, मोड-पर्ल, mod_php, mod_ruby, एट बातों के साथ मात्र सीजीआई त्वरक की तुलना में अधिक कर रहे हैं; वे अपाचे एपीआई तक पहुंच प्रदान करते हैं। वे सीजीआई त्वरक के रूप में कार्य करते हैं, लेकिन अधिक, बहुत कुछ कर सकते हैं।

फास्टसीजीआई एक शुद्ध सीजीआई त्वरक है।

अपडेट 2: PHP और CGI पारस्परिक रूप से अनन्य नहीं हैं। PHP can be installed as a CGI। PHP अक्सर फास्टसीजीआई के साथ प्रयोग किया जाता है।

+3

हालांकि इनमें से अधिकतर सही है, mod_perl केवल एक CGI त्वरक नहीं है। असल में, यह आपको पर्ल में अपाचे अनुरोध चक्र के हर बिट को नियंत्रित करने की क्षमता देने का एक दुष्प्रभाव है। – mpeters

+2

आमेन। विशेष रूप से "सीजीआई भाषा-अज्ञेयवादी" बिट है - मैंने कभी लिखा है कि पहली सीजीआई लाइब्रेरी वास्तव में सी में एक परामर्श गग के रूप में थी (जो कि कॉलेज के दिनों में वापस था जब मैं सी के साथ बहुत अच्छा था लेकिन किसी भी तरह से कभी नहीं सुना पर्ल :) – DVK

2

मैं ऐतिहासिक कारणों से मुख्य रूप से पर्ल और घर पर PHP पर वेबसाइटों के लिए पर्ल और PHP दोनों का उपयोग करता हूं; मुझे नहीं लगता कि उनके बीच चयन करने के लिए बहुत कुछ है।

यदि आपके पृष्ठ अधिकतर गणना की थोड़ी मात्रा के साथ HTML को निश्चित करते हैं, तो PHP थोड़ा आसान है, क्योंकि यह HTML में एम्बेड किया गया है।

मुझे PHP को अधिक अनुशासित, और इसलिए कभी-कभी अधिक सीमित, पर्ल की तुलना में भाषा मिलती है। पीईआर सीपीएएन के समान ही है - मुझे लगता है कि बड़ा नहीं है, लेकिन फिर सीपीएएन इतना बड़ा है कि इसमें बहुत सारे ड्रॉ हैं।

HTH

कॉलिन

+4

अपने कोड में एचटीएमएल एम्बेड करना एक बहुत ही खराब शैली है। –

+1

आप मेसन या टेम्पलेट-टूलकिट के साथ एचटीएमएल में पर्ल कोड एम्बेड कर सकते हैं, न कि मैं उसे सलाह दूंगा। –

8

यह वही है एक शौक के लिए उपयोग करने के लिए तय करने के लिए एक काफी व्यक्तिपरक मुद्दा है। मैंने PHP में देखने के बाद पर्ल को एक शौक के रूप में सीखने का फैसला किया और इस तथ्य को पसंद नहीं किया कि मैं वहां से अधिकांश PHP को पढ़ नहीं पाया और बिल्टिन कार्यों की सूची से परेशान था।

मैंने पहले कुछ चीजें संपर्क फ़ॉर्म और एक फोटो एलबम जेनरेटर के लिए सीजीआई स्क्रिप्ट थीं। मैं एक सस्ता साझा होस्टिंग योजना पर था और मुझे कोई प्रदर्शन समस्या नहीं मिली थी इसलिए प्रदर्शन समस्या कभी खेल नहीं आई थी।

इसके बजाय, comp.lang.perl.misc और CPAN के अस्तित्व ने सुनिश्चित किया कि मैंने कभी भी अपने निर्णय पर पुनर्विचार नहीं किया है कि वह PHP में नहीं पहुंचे।

इस बीच, मुझे एहसास हुआ कि मेरी वेबसाइटों की अधिकांश सामग्री एक बार उत्पन्न हो गई है, इसलिए अब मैं ऑफ़लाइन सामग्री उत्पन्न करने के लिए पर्ल स्क्रिप्ट लिखता हूं।

तो, मेरा जवाब है, एक छोटी परियोजना चुनें, कुछ भी करेगा, और इसे पर्ल और उपयुक्त सीपीएएन मॉड्यूल का उपयोग करके कार्यान्वित करें और देखें कि आपको यह पसंद है या नहीं।

1

PHP और पर्ल दोनों में उनके क्षण हैं, लेकिन यह वास्तव में व्यक्तिपरक है। पर्ल में सीपीएएन पर भारी ढांचे उपलब्ध हैं जो इसे पूरी तरह से सीजीआई पर्यावरण में भी PHP की तुलना में बेहतर या बेहतर बना सकते हैं। साथ ही, पीएचपी का एक बड़ा अनुसरण है, और वेबसाइट प्रोग्रामिंग को सरल बनाने के लिए बॉक्स सुविधाओं में से एक टन है। मेरे लिए पसंद, व्यक्तिगत वरीयता के लिए उबाल जाता है। मैं व्यक्तिगत रूप से PHP में चीजों को करने के सभी कार्यात्मक तरीकों को खोजने की कोशिश करने के साथ मर्क करने के बजाय पर्ल का उपयोग करना पसंद करता हूं। शुभकामनाएँ!

+4

PHP की तुलना में पर्ल में बहुत बड़ा हो सकता है। PHP केवल वेबसाइट लिखने के लिए उपयोगी है, पर्ल प्रोग्रामिंग के लगभग सभी क्षेत्रों में उपयोगी हो सकता है। –

1

CatalystTemplate Toolkit के साथ प्रयास करें।

sub hello :Path('/hello') :Args(0) { 
    my ($self, $c) = @_; 

    # Hello World 
    $c->response->body($c->welcome_message); 
} 
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN"> 
<html> 
    <head> 
    <title>[% title %]</title> 
    </head> 
    <body> 
    <div id="header"> 
     <a href="/index.html" class="logo" alt="Home Page"></a> 
     <h1 class="headline">[% title %]</h1> 
    </div> 

    [% content %] 

    <div id="footer"> 
     <div id="copyright"> 
     &copy; [% copyright %] 
     </div> 
    </div> 
    </body> 
</html> 
+2

मैं विशेष रूप से वेबसेवर को एक CGI इंटरफ़ेस के साथ उत्प्रेरक की अनुशंसा नहीं करता, लेकिन यह एक अच्छा विचार है यदि आप mod_perl या FastCGI का उपयोग कर सकते हैं। – ijw

+1

गलती, यह कोड वह नहीं करता है जो यह करता है। शायद आप खोल से मतलब है: स्क्रिप्ट/myapp_create देखें वेब टीटी; फिर नियंत्रक में जोड़ें :: रूट: उप हैलो: पथ ('/ हैलो'): Args (0) { मेरा ($ self, $ c) = @_; } और रूट डीआईआर में hello.tt को बचाएं। इसके अलावा यह सीजीआई में काम करता है, उत्प्रेरक का प्रदर्शन हिट संकलन समय पर है, इसलिए सभी व्यावहारिक उद्देश्यों के लिए आप उत्प्रेरक साइट चलाने के लिए कभी भी CGI का उपयोग नहीं करेंगे। – singingfish

+0

यह उत्प्रेरक कार्यक्रम की शैली का एक प्रतिनिधित्व है, वास्तविक कार्य उदाहरण नहीं। –

2

आप की मेजबानी का उपयोग करते हैं, कई मामलों में पीएचपी भी सीजीआई के रूप में चलाने की जाएगी। यदि आप FastCGI या mod_perl को नहीं चलाना चाहते हैं, तो आप CGI::Application framework का उपयोग कर सकते हैं। सीजीआई :: आवेदन फास्टसीजीआई या mod_perl के साथ भी चलाएगा, लेकिन उत्प्रेरक के विपरीत सीजीआई भी चलाएगा।उत्प्रेरक और सीजीआई दोनों :: आवेदन भी अपने स्वयं के वेब सर्वर के साथ चलाया जा सकता है।

+0

उत्प्रेरक को सीजीआई के रूप में भी चलाया जा सकता है, यह बहुत धीमा है। –

3

चाहे आप PHP या पर्ल का उपयोग करते हैं, स्केलिंग परिप्रेक्ष्य से बहुत अधिक है कि PHP और C में लिखे गए वेबपैप के बीच का अंतर मज़बूत है। यदि अंतर वास्तव में महत्वपूर्ण है, तो हम सभी सी, या असेंबली लिख रहे होंगे।

PHP धीमा है, लेकिन यह विकिपीडिया, फेसबुक और याहू को व्यापक रूप से उपयोग करने से रोक नहीं रहा है।

वहाँ दो प्रमुख कारण यह कोई बात नहीं, एक स्केलिंग परिप्रेक्ष्य है, जो अपनी चुनी गई भाषा से कर रहे हैं:

  1. विद्रूप की तरह एक कैशिंग रिवर्स प्रॉक्सी का प्रयोग करें। अधिकांश अपाचे के वर्कलोड को ऑफ़लोड करके, आप नाटकीय रूप से अपने सीजीआई आमंत्रण भार को काट सकते हैं।
  2. अपने वेब स्तर को स्केल करना आसान है। यह आपके डेटाबेस स्तर को स्केल कर रहा है जो कठिन है। आप खेत में हमेशा एक और वेबसर्वर जोड़ सकते हैं। यदि आप प्रति सेकंड 1000 अनुरोधों को mod_php के साथ सेवा कर सकते हैं, और सीजीआई के साथ प्रति सेकेंड 500 अनुरोध, यदि यह आपके लिए सीजीआई विकसित करने के लिए सस्ता और तेज़ है, तो इसे करें। आपको दो बार वेब हेड की आवश्यकता होगी, लेकिन या तो:
    1. आप वेब के नीचे 90% में हैं, और केवल वैसे ही वास्तव में एक वेबसर्वर की आवश्यकता है।
    2. आप वेब के शीर्ष 10% में हैं, और एकाधिक वेबसर्वर की आवश्यकता है - लेकिन आपके पास अतिरिक्त लागत को उचित ठहराने के लिए पर्याप्त ट्रैफ़िक है।

भाषा है कि आप और आपकी टीम में सबसे अधिक कुशलता से विकसित कर सकते हैं उठाओ।

3

यहाँ एक सरल "हैलो दुनिया" उदाहरण है कि सीजीआई के अधीन ही कार्य Squatting वेब microframework उपयोग कर रहा है:

use strict; 
use warnings; 

{ 
    package MyApp; 
    use base 'Squatting'; 
    use base 'Squatting::On::CGI'; 
} 

{ 
    package MyApp::Controllers; 
    use Squatting ':controllers'; 

    our @C = (
     C(
      Index => [ '/' ], 
      get => sub { 
       my ($self) = @_; 
       my $v = $self->v; 
       $v->{say} = 'hello world!'; 
       $self->render('hello'); 
      }, 
     ), 
    ); 
} 

{ 
    package MyApp::Views; 
    use Squatting ':views'; 
    use HTML::AsSubs; 

    our @V = (
     V( 'html', 

      layout => sub { 
       my ($self, $v, @yield) = @_; 
       html (
        head (title('My CGI App')), 
        body (@yield), 
       )->as_HTML; 
      }, 

      hello => sub { 
       my ($self, $v) = @_; 
       p ($v->{say}); 
      }, 
     ), 
    ); 
} 

use CGI; 
my $q = CGI->new; 
MyApp->init; 
MyApp->relocate('/cgi-bin/myapp.cgi'); 
MyApp->cgi($q); 

"myapp.cgi" और अपने cgi-bin में जगह के रूप में सहेजें।

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

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