2010-11-05 8 views
0

Je réécris un script CGI pour utiliser le module fastcgi. Mon programme initial consiste en deux scripts. L'un "nécessite" l'autre. En termes d'efficacité, ai-je besoin de repenser tout le script "require" et de les combiner en un seul fichier? Les scripts peuvent être résumés comme suit:Dois-je combiner ma bibliothèque Perl et mon programme CGI dans un seul fichier pour FastCGI?

Script A:

use FCGI; 
# Do a lot of stuff and slurping (memory intensive) 
sub use_my_slurped { 
# Do sub here 
} 

sub use_my_slurped2 { 
# Do sub here 
} 

############### 
# EOF A# 
############### 


Script B: 
require A; 

while (FCGI::accept >= 0) { 
# main program functions 
$blah = use_my_slurped (X,Y,Z) 
print "Some HTML stuff $blah"; 
} 

Répondre

1

Tout d'abord, A est pas un script, mais une bibliothèque Perl. Deuxièmement, FastCGI pourrait gérer cela gracieusement sans modification. Cela dépend si A est un nom de fichier complet ou non. Troisièmement, très peu de travail A pourrait devenir un module, et tout devrait fonctionner correctement.

# A.pm 
sub func1 {} 
sub func2 {} 

1; 

Et puis

# B.cgi 
use lib qw(/path/to/dir/containing/above); 
use A; 
# ... 
my $blah = func1(); 
+0

Cela ne me dit toujours pas lequel ou les deux devrais-je utiliser la boucle de cgi rapide. C'est ma principale préoccupation. Si je finis par "utiliser" A.pm, alors chargerait-il une fois et une seule fois au démarrage du serveur web? – Face

+0

Visage: oui, ce serait –

+0

Vous voulez dire parfois que A.pl saute dans B.pl et parfois l'inverse? C'est dingue. Mais compte tenu de cela, peut-être vous devriez avoir un C.pl, qui charge à la fois A.pm et B.pm, puis gère FCGI pour vous. C pour Controler. Ensuite, travaillez à transformer votre spagetti en lazanga. – Leolo

1

Il ne devrait pas être un problème en les laissant sous forme de fichiers séparés. FastCGI n'a pas besoin de charger et de compiler la bibliothèque pour chaque requête, le temps de démarrage n'est donc pas si important que dans une CGI normale. À moins que vous ne cherchiez des choses sur lesquelles travailler, je le laisserais probablement tranquille.

Cependant, si la bibliothèque a été écrite d'une manière étrange où vous devez la charger une fois par requête, c'est une histoire différente.

Pour votre exemple, je pense que vous devez déplacer tous les éléments FastCGI dans le même fichier. Vous chargez des modules, tels que FCGI, dans le fichier que vous voulez utiliser à partir de ce module.