¿Fue útil?

Solución

La "obsolescencia" de CGI es realmente solo un factor si está haciendo sitios grandes y complejos con muchas visitas a la página.

Muchas personas apoyan la idea de que el CGI es obsoleto, en realidad no entienden qué es el CGI. Existe una idea errónea generalizada de que CGI es una tecnología inherentemente basada en Perl. Muchas personas atacan CGI como una forma de evitar los ataques de culto en Perl en apoyo de cualquier idioma que admitan. Si desea ser un verdadero tecnólogo, debe comprender los problemas fundamentales y tomar una decisión basada en los hechos de la situación.

CGI es una interfaz con un servidor web que te permite escribir páginas interactivas en cualquier idioma, incluso befunge . Cuando un servidor recibe una solicitud de una página controlada por un script CGI, el servidor ejecuta el script y devuelve los resultados al solicitante.

Si su lenguaje de programación requiere que se cargue una VM, un intérprete o un compilador cada vez que se ejecuta, entonces este tiempo de inicio será necesario cada vez que acceda a su página.

Los aceleradores CGI como FastCGI, mod_php, mod_perl, etc., mantienen un intérprete / VM en la memoria en todo momento, pueden mantener las bibliotecas cargadas e incluso almacenar el código de bytes de los scripts para reducir la sobrecarga de inicio del script.

Si está creando un sitio simple, personal o de hobby, CGI estará bien. También lo hará PHP.

Si su sitio necesita una tecnología más rápida, puede pasar a mod_perl, FastCGI u otras tecnologías de aceleración CGI.

El idioma que use debe estar determinado por las herramientas que proporciona y cómo se ajustan a sus necesidades.

  1. Haga una lista de las capacidades que necesita.
  2. Haz una lista de los que rompen el trato.
  3. Ahora, compruebe cada uno de sus conjuntos de herramientas posibles en estas dos listas.
  4. ¿Cuál sale mejor? Pruébalo.
  5. ¿Apesta? Táchelo de la lista y vuelva al paso 4.

Además, recomiendo no usar befunge . Solo porque es posible, no significa que debas usarlo.


Actualización: Como señala mpeters, mod_perl, mod_php, mod_ruby, y otros son mucho más que simples aceleradores CGI; proporcionan acceso a la API de Apache. Actúan como aceleradores CGI, pero pueden hacer mucho, mucho, más.

FastCGI es un acelerador CGI puro.

Actualización 2: PHP y CGI no se excluyen mutuamente. PHP se puede instalar como CGI . PHP se usa a menudo con FastCGI.

Otros consejos

Este es un tema bastante subjetivo para decidir qué usar para un pasatiempo. Decidí aprender Perl como pasatiempo después de buscar en PHP y no me gustaba el hecho de que no podía leer la mayoría del PHP y me desanimaba la lista de funciones integradas.

Las primeras cosas que hice fueron guiones CGI para formularios de contacto y un generador de álbumes de fotos. Estaba en un plan de hosting compartido de cheapo y no tenía ningún problema de rendimiento, por lo que el problema de rendimiento nunca entró en juego.

En cambio, la existencia de comp.lang.perl.misc y CPAN aseguró que nunca reconsiderara mi decisión de no profundizar en PHP.

Mientras tanto, me di cuenta de que la mayoría del contenido de mis sitios web es estático una vez generado, por lo que ahora escribo los scripts de Perl para generar el contenido sin conexión.

Por lo tanto, mi respuesta es: elija un pequeño proyecto, cualquier cosa servirá, e impleméntelo utilizando Perl y los módulos apropiados de CPAN y vea si le gusta.

Ya sea que utilices PHP o Perl es discutible desde una perspectiva de escalamiento, de la misma manera que la diferencia entre una aplicación web escrita en PHP y C es discutible. Si la diferencia realmente importara, todos estaríamos escribiendo C o ensamblaje.

PHP es lento, pero eso no impide que Wikipedia, Facebook y Yahoo lo usen ampliamente.

Hay dos razones principales por las que no importa, desde una perspectiva de escala, el idioma que elija:

  1. Use un proxy inverso de almacenamiento en caché como Squid. Al descargar la mayor parte de la carga de trabajo de apache, puede reducir drásticamente su carga de invocación CGI.
  2. Escalar su nivel web es fácil. Es difícil escalar el nivel de su base de datos. Siempre puede agregar otro servidor web a la granja. Si puede atender 1000 solicitudes por segundo con mod_php, y 500 solicitudes por segundo con un CGI, si le resulta más barato y más rápido desarrollar el CGI, hágalo. Necesitará el doble de cabezas web, pero:
    1. Estás en el 90% inferior de la web y de todas formas solo necesitas un servidor web.
    2. Usted está en el 10% superior de la web y necesita varios servidores web, pero tiene suficiente tráfico para justificar el costo adicional.

Elija el idioma que usted y su equipo puedan desarrollar de la manera más eficiente.

Aquí hay un simple "hello world" ejemplo que se ejecuta bajo CGI utilizando la Enfrentamiento de la tela :

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

Guardar como " myapp.cgi " y colóquelo en su cgi-bin.

Utilizo Perl y PHP para sitios web, por razones históricas, principalmente Perl en el trabajo y PHP en casa; No creo que haya mucho para elegir entre ellos.

Si las páginas son en su mayoría HTML fijo con solo una pequeña cantidad de cómputo, PHP es un poco más fácil, porque de todos modos está incrustado en HTML.

Encuentro PHP un lenguaje más disciplinado y, por lo tanto, a veces más limitante que Perl. PEAR es muy similar a CPAN, no tan grande, creo, pero CPAN es tan grande que tiene mucha escoria.

HTH

Colin

Si usa hosting, en muchos casos PHP también se ejecutará como CGI. Si no desea ejecutar FastCGI o mod_perl, puede usar CGI :: Application framework . CGI :: La aplicación también se ejecutará con FastCGI o mod_perl, pero a diferencia de Catalyst también se ejecutará como CGI. Tanto Catalyst como CGI :: Application también se pueden ejecutar con sus propios servidores web.

Tanto PHP como Perl tienen sus momentos, pero esto es realmente subjetivo. Perl tiene marcos masivos disponibles en CPAN que pueden hacer que funcione tan bien o mejor que PHP, incluso en un entorno puramente CGI. Al mismo tiempo, PHP tiene muchos seguidores y un montón de funciones listas para usar para simplificar la programación del sitio web. La elección, para mí, se reduce a las preferencias personales. Personalmente, prefiero usar Perl que perder el tiempo tratando de encontrar todas las formas funcionales de hacer cosas en PHP. ¡Buena suerte!

Pruebe Catalyst con Kit de herramientas de plantillas .

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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top