Michael Schröpl: Regexp prozessor/RAM Lastiger als $cgi->param ??

Beitrag lesen

Hi,

Ich hörte REGEXP ist angeblich RAM und CPU belastender,
als die variables vom $ENV{'QUERY_STRING'} mit

  1. split
  2. $cgi->param
    zu bekommen.
    Stimmt das?

Vermutlich ja - plausibel wäre es.

Wenn ja (haben einige gesagt) wieso ist das so?

Weil es viel mehr tut.

Warum belastet eine REGEXP den CPU / RAM mehr als "split"
oder $cgi->param?

Weil der Interpreter für regular expressions im allgemeinen Fall (!) mit sehr viel mehr Möglichkeiten rechnen muß (selbst wenn Du einen "einfachen" regulären Ausdruck anwenden willst) als der Interpreter für split() - daraus folgt, daß es sehr wahrscheinlich ist, daß der Code für letzteren einfacher und besser optimierbar ist. (Alleine schon die Abfragen, ob einer dieser potentiellen Sonderfälle vorliegt, kostet halt etwas - im Vergleich zur "Spar-Variante", die das gar nicht erst kann.)

Funktionieren tut das was ich will auf alle 3 Möglichkeiten,
nun hab ich die Qual der wahl ass ich nicht wieß welche ich
nehmen soll.

Diejenige, welche Dir unter Berückichtigung aller (!) Randbedingungen die größten Vorteile bietet.

Bitte wirklich nur von CPU und RAM ausgehen

Genau wie Cheatah halte ich das für ein äußerst ungeeignetes Kriterium.
Denn der Ressourcenverbraucht bei der Interpretation der paar dutzend Bytes Deines QUERY_STRING ist, verglichen mit anderen Schritten der Verarbeitung (beispielsweise dem Laden des Perl-Interpreters!) so was von irrelevant, daß der Unterschied selbst dann kaum meßbar wäre, falls eine der drei Möglichkeiten zehnmal so performant wäre wie eine andere (was ich nicht glaube).
So hoch getuned kann Dein System einfach nicht sein (auch nicht mit mod_perl und ähnlichen "Nachbrennern"), daß es Dir auf die paar Maschinenbefehle ankommen könnte.

Verglichen damit sind die Argumente der Software-Wartbarkeit, Zuverlässigkeit und Portabilität, die Cheatah bereits genannt hat. überwältigend.

Kurz gesagt. Wenn Du Dir über solche Aspekte Gedanken machen mußt, dann ist Perl grundsätzlich die falsche Sprache für Dich - möglicherweise sogar auch C, und es bleibt nur Assembler übrig.
Solche Maßstäbe würde ich allerdings heutzutage nur noch bei plattform- und graphikkartenabhängigen Programmierungen (Spiele, Kernroutinen der Betriebssystem-Schicht für Fensterverwaltung etc. - beispielsweise das, womit sich die Mozilla-Programmierer im Moment herum schlagen müssen) und ähnlichen Exoten anlegen - aber bestimmt nicht bei CGI-Skripten, wo die langsamen Leitungen ohnehin alles ausbremsen.

Viele Grüße
      Michael