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:

    Ich würde das einfach im Template in der index.php ganz nach oben setzen....

  • admin Says:

    Das stimmt natürlich, man muss schon wissen was man tut. Aber manchmal geht es halt leider nicht and...

  • admin Says:

    Bestanden ;-)...

  • السوق المالي اليوم Says:

    hey super danke ich habe das problem mit typo3 auch gehabt dank deinem tip jetzt gelöst, thnx ;D ...

  • Dana Says:

    Geht das auch über samsung gt-s5230?? ...

  • Aaa Says:

    facebook Kommentar Test...

  • Andreas Says:

    Hm. Da man kein Override für einzelne Klassen in Joomla erstellen kann, rate ich von der letzten Var...

  • Stang_andre Says:

    test...

  • Robbz Says:

    Dann läuft aber das Script immer noch nicht als PHP5. Kann sein, dass 1&1 ihre Server inzwischen...

  • Nospam Says:

    das ist alles recht üppig, was du in deiner .htaccess gebastelt hast. Viel einfacher geht's mit "#Re...