Ne zaman yerine PHP CGI Perl (ya da tersi) kullanmalıyım?

7 Cevap php

Bunların pek çoğu gibi hobi amaçlı, ben, sağlayan bir sunucu barındırma PHP ve Perl CGI hem de paylaşılan bir boşluk var. Ben CGI betikleri I ({[) (0]} gibi) performans sorunları için ağırlıklı düşünüyorum, artık eskimiş olduğu birkaç yerde okudum.

Ben sadece Perl eğitim başladığından beri ama, Perl yolu daha kolay (ya da mümkün) olan PHP çözümleri uygulama üzerinde zaman harcamak istemem.

Ayrıca PHP kitaplıkları aşina Demirbaş CPAN farkındayım sorunları, (ki, henüz içeriği varlığı), ama (ben onlar var hiç şüphem olsa) vardır. Ben 10 ^ 10. kez sıfırdan bir giriş-yordam veya temel kullanıcı yönetimini yazmak için hazır değilim.

Ben de hobi projeleri için araştırma çok zaman harcamak bu noktada lüks yok, bu yüzden en headstart için uzmanlar soralım düşündüm.

7 Cevap

CGI "eski"-lik gerçekten sayfa görünümleri birçok büyük, karmaşık siteleri yapıyoruz sadece bir faktördür.

Birçok kişi CGI CGI gerçekten ne olduğunu anlamıyorum eski olduğu fikrini itin. CGI bir doğal Perl-tabanlı teknoloji olduğu yaygın bir yanlış kanı vardır. Birçok kişi destek olursa olsun dil desteği Perl ped dışarı kült saldırıları için bir yol olarak CGI saldırı. Eğer gerçek bir teknoloji olmak istiyorsanız, temel sorunları anlamak ve durumun gerçeklere dayalı bir seçim yapmak gerekir.

CGI herhangi bir dilde interaktif sayfalarını yazmak için izin veren bir web sunucusu olan bir arabirim - even befunge. Bir sunucu bir CGI komut dosyası tarafından kontrol edilen bir sayfa için bir istek aldığında, sunucu komut dosyasını çalıştırır ve istekte sonuçları döndürür.

Programlama dili, çalışan her zaman yüklemek için bir VM, yorumlayıcı veya derleyici gerektiriyorsa, o zaman bu başlangıç ​​süresi, sayfa erişilen her zaman gerekli olacaktır.

FastCGI, vb mod_php, mod_perl ve benzeri CGI hızlandırıcılar her zaman bellekte bir tercüman / VM tutmak, script start-up yükünü azaltmak için komut yüklenen kütüphaneleri tutmak, ve hatta önbellek baytkodu olabilir.

Eğer basit, kişisel veya hobi site yapıyorsanız, CGI iyi olacak. Yani PHP olacaktır.

Siteniz daha hızlı bir teknolojiye ihtiyaç büyümek gerekir ise, Mod_perl, FastCGI veya diğer CGI hızlandırma teknolojileri için taşıyabilirsiniz.

Eğer kullandığınız dil ne sağladığı araçları tarafından tespit edilmeli ve onlar sizin ihtiyaçlarınız ile uyum nasıl.

  1. İhtiyacınız yetenekleri bir listesini yapın.
  2. Anlaşma kesiciler bir listesini yapın.
  3. Şimdi bu iki listelere karşı olası toolsets her kontrol.
  4. Hangisi en iyi çıkıyor? Test edin.
  5. Emmek mu? Listenizde off onu geçmeye, ve 4. adıma geri dönün.

Ayrıca, befunge kullanarak karşı öneririz. Mümkün olduğu için, bunu kullanmak gerektiği anlamına gelmez.


Update: mpeters işaret ettiği gibi, mod_perl, mod_php, mod_ruby, et alia sadece CGI hızlandırıcıları çok daha fazladır; onlar Apache API erişim sağlar. Bunlar CGI hızlandırıcılar olarak hareket, ama çok, çok daha fazlasını da yapabilir.

FastCGI saf CGI hızlandırıcı.

Update 2: PHP ve CGI birbirini dışlayan değil. PHP can be installed as a CGI. PHP FastCGI sık kullanılır.

Bu bir hobi için kullanmak ne karar vermek için oldukça öznel bir konudur. Ben PHP içine bakarak ve ben orada PHP'nin en okuyamadı ve yerleşik işlevleri listesi yılgın olan gerçeğini sevme sonra değil bir hobi olarak Perl öğrenmeye karar verdi.

Ben yaptım ilk birkaç şey iletişim formları ve bir fotoğraf albümü jeneratör CGI betikleri vardı. Ben hosting planı paylaşılan bir büfelerin oldu ve performans sorunu oyuna gelmedi bu yüzden herhangi bir performans sorunları elde değildi.

Bunun yerine, comp.lang.perl.misc ve CPAN varlığı PHP dalmak için değil benim karar yeniden gözden asla sağlanmalıdır.

Arada, benim web sitelerindeki içeriğin çoğunu gerçekleştirdi şimdi ben içeriği çevrimdışı oluşturmak için Perl script yazmak, bir kez oluşturulan statik olduğunu.

Yani, benim cevap, bir şey yapacak, küçük bir proje almak ve Perl ve uygun CPAN modülleri kullanarak uygulamak ve bunu isterseniz görürsünüz.

İşte Squatting web microframework'umuzda kullanarak CGI altında çalışan basit bir "hello world" örnek:

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);

Cgi-bin "myapp.cgi" ve yer olarak kaydedin.

/ I3az /

Eğer hosting kullanıyorsanız, birçok durumda PHP de CGI olarak çalıştırmak olacaktır. Eğer FastCGI veya mod_perl çalıştırmak istemiyorsanız, size CGI::Application framework kullanabilirsiniz. CGI :: Uygulama çok FastCGI veya Mod_perl ile çalışır, ancak Catalyst aksine çok CGI olarak çalışacaktır. Katalizör ve CGI :: Application Hem de kendi web sunucuları ile çalıştırılabilir.

PHP kullanıyorsanız veya Perl PHP ve C ile yazılmış bir webapp arasındaki fark tartışmalı olduğu şekilde çok ölçeklendirme açısından tartışmalı olsun. Fark gerçekten önemli olsaydı, hepimiz C yazarken, ya da montaj olurdum.

PHP yavaş, ama bu yoğun kullanmayın Vikipedi, Facebook ve Yahoo durdurma değildir.

Seçtiğiniz dil bir ölçeklendirme açısından farketmez iki önemli nedeni, vardır:

  1. Kalamar gibi bir önbelleğe alma ters proxy kullanın. Apache iş yükünün en boşaltma, önemli ölçüde CGI çağırma yük kesebilir.
  2. Scaling your web tier is easy. It's scaling your database tier that's hard. You can always add another webserver to the farm. If you can serve 1000 requests per second with mod_php, and 500 requests per second with a CGI, if it's cheaper and faster for you to develop the CGI, do it. You'll need twice as many web heads, but either:
    1. Sen web alt% 90, ve sadece gerçekten zaten bir webserver gerekir.
    2. Sen web üst% 10, ve çoklu webservers gerekir - ancak ek maliyet haklı çıkarmak için yeterli trafik var.

Sizin ve ekibinizin en verimli şekilde gelişebilir dili seçin.

Ben web siteleri için Perl ve PHP de kullanıyoruz - tarihsel nedenlerle, evde özellikle iş yerinde Perl ve PHP için; Ben aralarında seçim için bir çok şey olduğunu sanmıyorum.

Sayfalarınız çoğunlukla hesaplama sadece küçük bir miktar ile sabit HTML ise yine HTML gömülü olduğu, PHP, biraz daha kolay.

Ben PHP Perl daha, daha disiplinli, ve bu nedenle bazen daha sınırlayıcı dil bulabilirsiniz. ARMUT CPAN çok benzer - gibi büyük değil, sanırım, ama sonra CPAN bunun cüruf bir sürü var o kadar büyük.

HTH

Colin

Catalyst Template Toolkit ile deneyiniz.

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>