PHP’s Referenzen bremsen Web-Anwendungen aus

PHP’s Referenzen bremsen Web-Anwendungen aus

Was sich für viele erstmal total falsch anhört scheint aber doch wahr zu sein. Ich selbst habe bis heute auch Variablen, in denen ewig große Arrays gespeichert sind als Variaben übergeben, wenn ich wusste, dass der Inhalt nicht verändert wird. Einfach aus dem Gedanken, dass man dadurch Arbeitsspeicher einspart und so die Web-Anwendungen optimieren kann. Offenbar scheint das genau falsch zu sein…

PHP’s Referenzen werden nämlich nicht so behandelt wie zum Beispiel die Pointer aus anderen Programmiersprachen. Besonders wer objektorientiert programmiert kann unter Umständen auf diese Tücke reinfallen.

Variablen müssen in PHP auch garnicht als neue Refernz deklariert werden, solange kein Schreibzugriff erfolgt. Dafür sorgt der copy-on-write Mechanismus von PHP 5.  Dieser sorgt dafür, dass beim Kopieren einer Variable mittels:

$a = (int) 5;
$b = $a;

Zunächst $b auf denselben Wertebereich im Speicher zeigt, wie $a. Erst, wenn eine Schreibfunktion auf $b oder $a angewandt wird (zum Beispiel $b++ oder $a=”foo”), wird eine Kopie der Variable erzeugt. Das funktioniert deshalb, weil PHP wie bei Objekten einen Container im Speicher definiert und die Variablennamen auf die Werte in diesen Containern zeigen.

Johannes Schlüter zeit in seinem Blog auf, dass es in den allermeisten Fällen eher schlecht für die Performance von Web-Anwendungen unter PHP ist, Variablen zu referenzieren: do not use PHP Refernces .

Nach einem schnellen Selbsttest mit einem kleinen PHP-Skript kann ich sagen: Es scheint zu stimmen. PHP’s Referenzen auf Variablen verlangsamen den Code an einigen Stellen schon merklich. Ich werde mal einen Benchmark meiner größeren Anwendungen machen und gucken, wieviel Optimierungspotential es dort noch gibt.

blog comments powered by Disqus


 

   

  • Robbz Says:

    Kannst du die index.php deindes Templates mal in .txt umbenennen und zum Download verlinken, damit i...

  • Graveto Says:

    Auch bei mir werden alle Skrips nach wie vor geladen. Die Anführungszeichen habe ich korrogiert?!...

  • Robbz Says:

    Wenn der Text beim Speichern oder Laden aus der DB abgeschnitten wird kann das ein UTF-8 Problem sei...

  • Willi da SIlva Borges Says:

    Danke für den Tip :-).Hatte das selbe Problem.Nun hab ich aber ein anderes :-(Wenn ich U...

  • Robbz Says:

    Hi DirtyWorldKann es vielleicht daran liegen, dass du die ganzen Anführungszeichen im Code n...

  • Jan Says:

    Hallo ich bekomme die Fehlermeldung:Fatal error: Cannot redeclare JHTMLBehavior::jquery() in /Ap...

  • Robbz Says:

    Im Grunde in jeder PHP-Datei. Eine Komponente oder ein Modul kann ja im Frontend auch jQuery verwend...

  • Waldo Says:

    danach hab ich schon lange gesucht,... aber"Um nun jQuery automatisch im Joomla-Code zu verwende...