Marc: steuerung.pl in mehrere Skripte aufteilen? Performance?

Hallo!

Ich bin noch relativ neu im CGI-Bereich... Ich hab gesehen, daß man verschiedene Perl-Skripte in das Main-Skript einbinden kann...

Jetzt die Frage: Ich brauche ja nicht bei jeder Ausführung des Steuerskriptes alle Funktionen. Geht das von der Performance dann schneller, wenn ich nur die benötigte Funktion einbinde, als wenn ich die einzelnen Funktionen direkt im Main-Skript habe? Kann ich denn überhaupt - je nach Parametern an das Main-Skript - nur die benötigten Funktionen einbinden?

Oder ist die Performance größer, wenn das Skript immer gleich bleibt - zumindest der Apache-Server scheint ja ein kompilierte oder vor-kompilierte Version im Speicher zu behalten... und wenn er das tut - werden Variablen bei jedem Durchgang neu initialisiert, wenn mein Skript das eigentlich nicht tut?

Fragen über Fragen... :)

Marc

  1. Hi,

    Ich bin noch relativ neu im CGI-Bereich... Ich hab gesehen, daß man verschiedene Perl-Skripte in das Main-Skript einbinden kann...

    soweit richtig :-) und zwar mit "require" oder "use".

    Jetzt die Frage: Ich brauche ja nicht bei jeder Ausführung des Steuerskriptes alle Funktionen. Geht das von der Performance dann schneller, wenn ich nur die benötigte Funktion einbinde, als wenn ich die einzelnen Funktionen direkt im Main-Skript habe? Kann ich denn überhaupt - je nach Parametern an das Main-Skript - nur die benötigten Funktionen einbinden?

    Oder ist die Performance größer, wenn das Skript immer gleich bleibt - zumindest der Apache-Server scheint ja ein kompilierte oder vor-kompilierte Version im Speicher zu behalten... und wenn er das tut - werden Variablen bei jedem Durchgang neu initialisiert, wenn mein Skript das eigentlich nicht tut?

    Letzteres, vorausgesetzt das Script wird oft genug angefordet. Dann bleibt es nämlich im Speicher, wobei die Variablen bei jedem Aufruf neu initialisiert werden. Wenn Du das Script nur selten brauchst (oder von z.B. einem Dutzend Funktionen mal hier zwei, mal dort drei) ist es wohl besser, wenn Du die entsprechenden Funktionen im Hauptscript definierst. Ein gewisses minimales Optimum zu finden ist hier die Kunst.

    Wenn Du Funktionen hast, die regelmäßig von verschiedenen Scripts benutzt werden, ist es i.d.R. sinnvoll, diese in externen Dateien zu definieren. Auch der Übersicht wegen :-)

    Cheatah

    1. Ich bin noch relativ neu im CGI-Bereich... Ich hab gesehen, daß man verschiedene Perl-Skripte in das Main-Skript einbinden kann...
      soweit richtig :-) und zwar mit "require" oder "use".

      ... und das solltest Du unbedingt nutzen, sofern Du nicht gerade eine Anwendung für die Dauerbenutzung durch 100000 Anwender schreiben willst. Die Übersicht ist in fast allen Fällen wichtiger als das letzte bißchen Performance - für diese sorgen schon die Leute, die Webserver und Perl-Interpreter optimieren ...

      Die Webserver-Rechner sind schnell, der Perl-Interpreter wird von ihnen häufig im shared code gehalten, weil das Laden dieses Interpreters natürlich wesentlich schrecklicher ist als die Interpretation eines kleinen Skripts.

      Jetzt die Frage: Ich brauche ja nicht bei jeder Ausführung des Steuerskriptes alle Funktionen. Geht das von der Performance dann schneller, wenn ich nur die benötigte Funktion einbinde, als wenn ich die einzelnen Funktionen direkt im Main-Skript habe? Kann ich denn überhaupt - je nach Parametern an das Main-Skript - nur die benötigten Funktionen einbinden?

      Ja, Du kannst das Laden von Modulen sogar von Daten zur Laufzeit abhängig machen. Ich habe das selbst noch nicht probiert, aber such mal in der Perl-Dokumentation nach "AutoLoader".

      1. Hi,

        Jetzt die Frage: Ich brauche ja nicht bei jeder Ausführung des Steuerskriptes alle Funktionen. Geht das von der Performance dann schneller, wenn ich nur die benötigte Funktion einbinde, als wenn ich die einzelnen Funktionen direkt im Main-Skript habe? Kann ich denn überhaupt - je nach Parametern an das Main-Skript - nur die benötigten Funktionen einbinden?

        Ja, Du kannst das Laden von Modulen sogar von Daten zur Laufzeit abhängig machen. Ich habe das selbst noch nicht probiert, aber such mal in der Perl-Dokumentation nach "AutoLoader".

        mit Modulen geht das glaube ich mit irgendwelchen "BEGIN { ... } END"-Konstrukten (oder so ähnlich), die ich aber selbst noch nie benutzt habe. Bei Scripteinbindung mit require reicht schon eine einfache if-Abfrage:

        if ($usescript == 1) { require "script1.pl"; }
        elsif ($usescript == 2) { require "script2.pl"; }
        usw.

        Ob das allerdings die Übersicht fördert vermag ich nicht zu beurteilen... :-) Bei mir kommen use's und require's immer ganz an den Anfang, direkt nach "#!/usr/bin/perl", noch vor dem Copyright-Hinweis. Wenn man später noch etwas einbindet, sollte man dies ganz oben schreiben und die Stelle ausreichend markieren.

        Cheatah