Question

Pour les loisirs, j’ai un espace partagé sur un serveur d’hébergement qui fournit, comme beaucoup d’entre eux, PHP et Perl CGI. J'ai lu à plusieurs endroits que les scripts CGI sont obsolètes, principalement pour des problèmes de performances (comme PHP ou vanilla Perl CGI sont-ils plus rapides? ).

Mais comme je viens juste de commencer à étudier Perl, je ne voudrais pas perdre de temps à mettre en œuvre des solutions en PHP qui sont bien plus faciles (ou seulement possibles) en Perl.

Il y a aussi les problèmes standard, je connais CPAN (c’est l’existence, pas encore le contenu), mais je ne connais pas bien les bibliothèques PHP (bien que je ne doute pas qu’elles existent). Je ne suis pas prêt à écrire une procédure de connexion ou une administration utilisateur de base à partir de rien pour la dixième fois.

Je n'ai pas le luxe à ce stade de perdre beaucoup de temps dans la recherche de projets de loisir non plus, alors j'ai pensé: demandons aux experts un coup de pouce.

Était-ce utile?

La solution

Le caractère "obsolète" de CGI n’est en réalité un facteur que si vous créez des sites vastes et complexes avec de nombreuses pages vues.

Beaucoup de gens insistent sur le fait que CGI est obsolète et ne comprennent pas vraiment ce que c'est. Il existe une idée fausse répandue selon laquelle CGI est une technologie intrinsèquement basée sur Perl. De nombreuses personnes s’attaquent à CGI afin de contrer les attaques sectaires dirigées contre Perl, quelle que soit leur langue. Si vous voulez être un vrai technologue, vous devez comprendre les problèmes fondamentaux et choisir en fonction des faits.

CGI est une interface avec un serveur Web qui vous permet d’écrire des pages interactives dans n’importe quelle langue: même befunge . Lorsqu'un serveur reçoit une requête pour une page contrôlée par un script CGI, il l'exécute et renvoie les résultats au demandeur.

Si votre langage de programmation nécessite le chargement d'une machine virtuelle, d'un interpréteur ou d'un compilateur à chaque exécution, ce temps de démarrage sera nécessaire à chaque accès à votre page.

Les accélérateurs CGI tels que FastCGI, mod_php, mod_perl et ainsi de suite, conservent un interpréteur / une machine virtuelle en mémoire à tout moment, peuvent garder des bibliothèques chargées et même mettre en cache des codes bytecode dans des scripts afin de réduire les frais de démarrage du script.

Si vous créez un site simple, personnel ou de loisir, CGI ira bien. Ainsi va PHP.

Si votre site nécessite une technologie plus rapide, vous pouvez passer à mod_perl, FastCGI ou à d'autres technologies d'accélération CGI.

La langue que vous utilisez devrait être déterminée par les outils fournis et leur adaptation à vos besoins.

  1. Faites une liste des fonctionnalités dont vous avez besoin.
  2. Faites une liste des briseurs de marché.
  3. Maintenant, vérifiez chacun de vos outils possibles par rapport à ces deux listes.
  4. Lequel est le meilleur? Testez-le.
  5. Est-ce que ça craint? Rayez-la de votre liste et revenez à l’étape 4.

De même, je déconseille d'utiliser befunge . Ce n'est pas parce que c'est possible que vous devriez l'utiliser.

Mise à jour: Comme le souligne mpeters, mod_perl, mod_php, mod_ruby et autres sont bien plus que de simples accélérateurs CGI; ils fournissent un accès à l'API Apache. Ils agissent comme des accélérateurs CGI, mais peuvent faire beaucoup, beaucoup plus.

FastCGI est un pur accélérateur CGI.

Mise à jour 2: PHP et CGI ne s'excluent pas mutuellement. PHP peut être installé en tant que CGI . PHP est souvent utilisé avec FastCGI.

Autres conseils

C’est une question assez subjective pour décider quoi utiliser pour un passe-temps. J'ai décidé d'apprendre le Perl en tant que passe-temps après m'être penché sur PHP et ne pas aimer le fait que je ne pouvais pas lire l'essentiel de PHP et que je sois découragé par la liste des fonctions intégrées.

Les premières choses que j'ai faites ont été des scripts CGI pour les formulaires de contact et un générateur d'album photo. J'étais sur un plan d'hébergement mutualisé cheapo et je ne rencontrais aucun problème de performance, donc le problème de performance n'est jamais entré en jeu.

Au lieu de cela, l’existence de comp.lang.perl.misc et de CPAN a permis de ne jamais revenir sur ma décision de ne pas plonger dans PHP.

En même temps, j'ai réalisé que la plupart du contenu de mes sites Web était statique une fois généré, c'est pourquoi j'écris maintenant des scripts Perl pour générer le contenu hors ligne.

Donc, ma réponse est: choisissez un petit projet, tout ira bien, et implémentez-le à l'aide de Perl et des modules CPAN appropriés et voyez si vous l'aimez.

Que vous utilisiez PHP ou Perl est sans intérêt du point de vue de la mise à l'échelle, tout comme la différence entre une application Web écrite en PHP et C est sans intérêt. Si la différence importait vraiment, nous écririons tous C ou assemblage.

PHP est lent, mais cela n'empêche pas Wikipedia, Facebook et Yahoo de l'utiliser de manière intensive.

Il y a deux raisons principales pour lesquelles cela n'a pas d'importance, du point de vue de la mise à l'échelle, la langue que vous choisissez:

  1. Utilisez un proxy inverse de mise en cache, tel que Squid. En déchargeant la majeure partie de la charge de travail d’apache, vous pouvez réduire considérablement la charge d’invocation de vos CGI.
  2. Il est facile de faire évoluer votre niveau Web. Il est difficile de faire évoluer votre base de données. Vous pouvez toujours ajouter un autre serveur Web à la batterie. Si vous pouvez traiter 1 000 requêtes par seconde avec mod_php et 500 requêtes par seconde avec un CGI, faites-le s'il est moins cher et plus rapide de développer le CGI. Vous aurez besoin de deux fois plus de têtes Web, mais soit:
    1. Vous êtes dans les 90% inférieurs du Web et vous n'avez de toute façon qu'un seul serveur Web.
    2. Vous êtes dans le top 10% des sites Web et vous avez besoin de plusieurs serveurs Web - mais vous avez suffisamment de trafic pour justifier les coûts supplémentaires.

Choisissez la langue dans laquelle vous et votre équipe pouvez développer plus efficacement.

Voici un simple " hello world " Exemple exécuté sous CGI à l'aide du Accrochage du microframework Web:

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

Enregistrer sous "myapp.cgi". et placez-le dans votre cgi-bin.

J'utilise à la fois Perl et PHP pour les sites Web - pour des raisons historiques, principalement Perl au travail et PHP à la maison; Je ne pense pas qu'il y ait beaucoup de choix entre eux.

Si vos pages sont généralement du code HTML fixe avec seulement une petite quantité de calcul, PHP est un peu plus facile, car il est de toute façon intégré au HTML.

Je trouve que PHP est un langage plus discipliné et donc parfois plus contraignant que Perl. PEAR est très similaire au CPAN - pas aussi gros, je pense, mais le CPAN est tellement gros qu’il contient beaucoup de scories.

HTH

Colin

Si vous utilisez l'hébergement, PHP sera aussi souvent exécuté en tant que CGI. Si vous ne souhaitez pas exécuter FastCGI ou mod_perl, vous pouvez utiliser CGI :: Framework d'application . CGI :: Application fonctionnera également avec FastCGI ou mod_perl, mais contrairement à Catalyst fonctionnera également en tant que CGI. Catalyst et CGI :: Application peuvent également être exécutés avec leurs propres serveurs Web.

PHP et Perl ont tous les deux leur moment, mais c’est vraiment subjectif. Sur CPAN, Perl dispose d’immenses frameworks qui peuvent le faire fonctionner aussi bien, ou mieux, que PHP, même dans un environnement purement CGI. En même temps, PHP a un public nombreux et une tonne de fonctionnalités prêtes à l'emploi pour simplifier la programmation de sites Web. Le choix, pour moi, se résume à la préférence personnelle. Personnellement, je préfère utiliser Perl que d'essayer de trouver tous les moyens fonctionnels de faire des choses en PHP. Bonne chance!

Essayez Catalyst avec Boîte à outils des modèles .

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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top