Hallo,
Hat jemand eine gute Netzseite, auf der beschrieben wird, wie man Perl-Skripte geschwindigkeitsoptimieren kann? Ich habs mit Google versucht, aber keine brauchbaren Ergebnisse erzielen können.
Ich kenne da zwar keine, aber prinzipiell gelten für Perl die gleichen Grundregeln, wie sie für andere Sprachen gelten. Da müßte sich doch was finden lassen. Auch in der Dokumentation von Perl sind an vielen Stellen Hinweise zu finden, die einem helfen, die Geschwindigkeit zu erhöhen.
Hier meine (bruchstückhafte) Hitliste an üblichen Kanditaten, die man vermeiden sollte:
1.) Das vollständige Einlesen einer Datei, obwohl man nur einen Teil davon wirklich zur verarbeitung benötigt. Das verursacht neben unnötigen Lesezugriffen auf die Datei auch erhöhten Speicherbedarf.
Das gilt auch für andere externe Ressourcen wie z.B. Datenbanken.
2.) Generell das verwalten von großen Datenmengen in Arrays und Hashes (oder komplexere Strukturen daraus). Perl hat imho eine ineffiziente Speicherverwaltung, wenn es um größere Datenstrukturen geht.
3.) Oft ist es besser ein nur in bestimmten Fällen benötigtes Modul nicht mit use sondern mit require erst zur Laufzeit einzubinden, vor allem wenn es sich um Webscripts handelt, die nicht unter mod_perl laufen.
4.) fehlende oder ungünstige Abbruchbedingungen bei Schleifen.
5.) Schlecht strukturierter/formatierter Code. Neben der Laufzeit-Performance gibt es auch die (ich sag mal) Entwicklungs-Performance. Wirr zusammengestoppelter Code, dem jegliche Formatierung fehlt, und dessen Struktur die Aufgaben der einzelnen Code-Blöcke nicht wiederspiegeln, verhindern eine gute Lesbarkeit, was dazu führt, dass man sich beim Entwickeln schwerer tut. Und wenn man die Arbeitsweise eines Scripts nicht mehr wirklich erkennen kann, kann man auch potentielle Laufzeit-Performance-Schwächen schlechter erkennen.[1]
Bisher hab ich nur herausgefunden, dass es klüger ist, bei der zeichenweisen Verarbeitung eines Strings die Zeichen Stück für Stück mit substr auszulesen und zu verarbeiten, anstatt den String in ein Array zu konvertieren *lol*
Perl bietet für viele Aufgaben betreffend der Stringverarbeitung wesentlich elegantere Konzepte (die meist mit regulären Ausdrücken zu tun haben), so dass substr() eigentlich eine Aussenseiterrolle in dieser Sprache spielt. Meist verwenden Perl-Neulinge, die von einer anderen Sprache kommen, substr() mangels besserem Wissen um die Möglichkeiten von Perl.
Grüße
Klaus
[1] Das gilt imho auch z.B. für das Formulieren von SQL-Statements. Ich habe u.a. hier im Forum schon eine Vielzahl an Statements gesehen, die in einer Wurst hingeschrieben sind, so dass deren Lesbarkeit (und Begreifbarkeit) gegen null geht.