Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]3182[/thread]

mod_perl Skript auch als CGI? (Seite 2)



<< |< 1 2 3 >| >> 25 Einträge, 3 Seiten
Heromaster
 2006-02-11 17:34
#29846 #29846
User since
2003-08-05
220 Artikel
BenutzerIn
[default_avatar]
[quote=cbxk1xg,10.02.2006, 18:48]Hallo, Freunde der Sonne!

ich habe mich ein wenig in die Doku von mod_perl eingelesen und auch ansatzweise verstanden, warum man seine Skripte dafür überarbeiten muß. Mich würde nun noch interessieren ob das dann alles auch noch "rückwärtskompatibel" ist. Mit anderen Worten, kann ich ein auf mod_perl umgearbeitetes Skript auch als ganz normales CGI benutzen, oder muß ich zwingend zwei Versionen eines Skripts erstellen?[/quote]
Deine Frage muss ganz eindeutig mit Jein beantwortet werden. Kommt darauf an, was Du vorhast, was Du bisher für Module benutzt hast und inwie weit Du die Laufzeit Deiner Scripte senken willst.

Wenn Du diesselbe Version Deines Scripts für mod_perl und CGI lauffähig haben willst, brauchst Du nur wenig ändern. Deine Scripte sollten allerdings use strict;-fest sein, damit es unter mod_perl keine bösen Überraschungen gibt. Auch beim Einbinden von selbstgeschriebenen Modulen gibt es ein paar Stolpersteine.perldoc modperl_traps hält da einige Tipps parat.
Es gibt zwar einen Performanceunterschied bei dieser Variante, allerdings ist dieser deutlich geringer als wenn Du Dein Script rein für mod_perl schreiben willst.
Derjenige, der zwei Hasen jagt, lässt einen zurück und verliert den anderen.
cbxk1xg
 2006-02-11 19:14
#29847 #29847
User since
2003-10-20
496 Artikel
BenutzerIn
[default_avatar]
Aha. Das beantwortet meine Frage. Fazit: Bringt also nix, weil Aufwand zu groß und Performancegewinn zu klein. Verstehe.
Heromaster
 2006-02-11 19:43
#29848 #29848
User since
2003-08-05
220 Artikel
BenutzerIn
[default_avatar]
Ich glaube, Du hast mich da etwas missverstanden. Wenn Du nur kleine Änderungen machen musst, um Deine Scripte unter mod_perl mithilfe von Apache::Registry oder Apache::PerlRun zum Laufen bekommst lohnt sich der Aufwand, da der Unterschied zwischen Apache::Registry und CGI ungefähr bei Faktor 2 - 4 liegt. Denselben Faktor hast Du beim Vergleich zwischen Apache::PerlRun und Apache::Registry. Allerdings erzielt Du die höchste Performance beim Schreiben von reinen mod_perl Scripts, die dann allerdings nicht mehr unter CGI laufen würden. Reine mod-perl Scripts sind im Durchschnitt 10-25x schneller als vergleichbare unter CGI.
Der Aufwand beim Ändern der CGI-Scripte hängt in erster Linie davon ab, wie sauber Du bereits das Script für CGI-Umgebung geschrieben hast.
Derjenige, der zwei Hasen jagt, lässt einen zurück und verliert den anderen.
ptk
 2006-02-12 17:29
#29849 #29849
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Ist der Unterschied zwischen Apache::Registry und einem echten mod_perl-Handler wirklich so groß? Letzendlich erzeugt man mit Apache::Registry intern auch nur einen mod_perl-Handler.
cbxk1xg
 2006-02-12 18:47
#29850 #29850
User since
2003-10-20
496 Artikel
BenutzerIn
[default_avatar]
[quote=Heromaster,11.02.2006, 18:43]Der Aufwand beim Ändern der CGI-Scripte hängt in erster Linie davon ab, wie sauber Du bereits das Script für CGI-Umgebung geschrieben hast.[/quote]
Wenn damit so selbstverständliche Dinge wie use strict, use warnings und die Deklaration von Variablen, Hashes und Arrays mit MY gemeint ist, sollte das also nicht so problematisch sein. Außerdem versuche ich ohnehin vieles gleich Objekt orientiert zu schreiben. Soweit ich mich bisher eingelesen habe müßte man dann z.B. die globalen MY Geschichten auf OUR umstellen. Plus ein paar anderer "Kleinigkeiten" natürlich.

Gibt es bei mod_perl eigentlich Probleme mit dem Taint mode, oder verhält sich dieser genauso wie bei CGIs? Der Hintergrund ist, daß ich gerne so viel wie möglich verbiete wenn Skripte wie Foren oder Content Management Systeme der breiten Öffentlichkeit zur Verfügung gestellt werden. Da hat mir der Paranoia Modus "Taint" schon oft viel geholfen.
renee
 2006-02-13 05:29
#29851 #29851
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zum Thema hybride Module habe ich mal einen Wiki:Artikel angefangen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Heromaster
 2006-02-18 13:41
#29852 #29852
User since
2003-08-05
220 Artikel
BenutzerIn
[default_avatar]
[quote=ptk,12.02.2006, 16:29]Ist der Unterschied zwischen Apache::Registry und einem echten mod_perl-Handler wirklich so groß? Letzendlich erzeugt man mit Apache::Registry intern auch nur einen mod_perl-Handler.[/quote]
Ja, der Unterschied ist extrem. Apache::Registry ist im Prinzip nur eine Schicht, damit Deine CGI-Scripte einen Performance-Vorteil von mod_perl erhalten.
Ich meine, sicherlich kannst Du den Unterschied bis auf ein subtilen Performanceunterschied verkleinern, indem Du mod_perl typische Sachen in das Script schreibst, zum Beispiel anfängst, die ganzen Apache::* Module einzubinden( statt CGI Apache::Request, statt den E/A-Layer von perl Apache::File usw.). Dies ist aber nicht Sinn und Zweck von Apache::Registry, da dann dieses Script nicht mehr unter CGI läuft und Du gleich einen echten mod_perl-Handler schreiben kannst :)

@cbx: Ja genau solche Sachen. Wichtig zu erwähnen ist auch, dass Deine Scripte kein _ _END_ _ enthalten, da dies nur beim Entladen des perl-Interpreters ausgewertet wird, was unter mod_perl aber niemals passiert, da dieser persistent im Speicher gehalten wird.

Ja, es gibt den Taint-Modus unter mod_perl. Warnings und Taint schaltest Du aber in der Apache config ein anstatt im Script selbst. Die Direktiven heißen PerlWarn On und PerlTaint On\n\n

<!--EDIT|Heromaster|1140263011-->
Derjenige, der zwei Hasen jagt, lässt einen zurück und verliert den anderen.
ptk
 2006-02-18 21:50
#29853 #29853
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=Heromaster,18.02.2006, 12:41][quote=ptk,12.02.2006, 16:29]Ist der Unterschied zwischen Apache::Registry und einem echten mod_perl-Handler wirklich so groß? Letzendlich erzeugt man mit Apache::Registry intern auch nur einen mod_perl-Handler.[/quote]
Ja, der Unterschied ist extrem. Apache::Registry ist im Prinzip nur eine Schicht, damit Deine CGI-Scripte einen Performance-Vorteil von mod_perl erhalten.
Ich meine, sicherlich kannst Du den Unterschied bis auf ein subtilen Performanceunterschied verkleinern, indem Du mod_perl typische Sachen in das Script schreibst, zum Beispiel anfängst, die ganzen Apache::* Module einzubinden( statt CGI Apache::Request, statt den E/A-Layer von perl Apache::File usw.). Dies ist aber nicht Sinn und Zweck von Apache::Registry, da dann dieses Script nicht mehr unter CGI läuft und Du gleich einen echten mod_perl-Handler schreiben kannst :)[/quote]
Letztendlich liegt der massive Performancevorteil von mod_perl-Handlern gegenüber CGI-Skripten darin begründet, dass nicht bei jedem Request ein fork() gemacht werden muss, der Perl-Interpreter sofort zur Verfügung steht und insbesondere alle Module nur einmal kompiliert werden müssen und danach diesem Apache-Child bis zu dessen Tod zur Verfügung stehen.

Apache::Registry-Skripte verhalten sich in dieser Hinsicht genau wie mod_perl-Handler. Sicher, es gibt etwas Overhead, da bei jedem Request geprüft wird, ob das Skript up-to-date ist und ggfs. neu geladen wird, und weitere Kleinigkeiten. Sicher, es muss auch CGI.pm verwendet werden, aber das alles scheint mir nicht so auf die Performance zu drücken.

Aber es ist von Vorteil, wenn der Autor von Apache::Registry zufällig ein Arbeitskollege ist, da kann man ihn direkt fragen :-) Ich weiß jedenfalls, dass er nur noch reine mod_perl-Handler schreibt.
Heromaster
 2006-02-19 05:09
#29854 #29854
User since
2003-08-05
220 Artikel
BenutzerIn
[default_avatar]
Ich muss mich korrigieren, nicht Apache::PerlRun ist schneller als Apache::Registry, sondern umgekehrt.

CGI hängt in der Performance Apache::Request ziemlich hinterher, da letzteres sowie die meisten Standardmodule, die mit mod_perl ausgeliefert werden, in C geschrieben sind. Dann kommt noch meist die DB-Verbindung dazu, die ziemlich ausbremst. Dann kommen noch ein paar Kleinigkeiten hinzu, wie das Auslagern von Perlcode in andere Handler als den Content-Handler.

Eine Mail sende ich zum Beispiel nicht während der Inhaltsgenerierung, sondern während der Logging-Phase.

Quote
Aber es ist von Vorteil, wenn der Autor von Apache::Registry zufällig ein Arbeitskollege ist, da kann man ihn direkt fragen :-) Ich weiß jedenfalls, dass er nur noch reine mod_perl-Handler schreibt

Hehe, kann ich verstehen, seitdem ich mod_perl kennengelernt habe, schreibe ich eigentlich große Projekte nur noch für mod_perl und HTML::Mason :) Kein Stress mehr mit CGI und die volle Kontrolle über den Webserver.
Derjenige, der zwei Hasen jagt, lässt einen zurück und verliert den anderen.
renee
 2006-02-19 08:41
#29855 #29855
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Kannst Du dann vielleicht mal im Wiki so eine Art Einfuehrung in mod_perl machen??
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 3 >| >> 25 Einträge, 3 Seiten



View all threads created 2006-02-10 19:48.