2009-07-14 5 views
2

Was sind die ‚Kosten‘ beteiligt in eine leere PHP-Funktion aufrufen? Der Hauptzweck besteht darin, dass ein CMS an verschiedenen Punkten seiner Lebensdauer enthaltene Modul-Ereignisse auslöst, um Dinge wie Sicherheit, Zugriffsberechtigungen, Nachbearbeitung, Timing, http (s) und dergleichen zu behandeln. Da es mehr als ein Dutzend Module geben kann, die Dutzende Male aufgerufen werden, erreichen die Gesamtaufrufe die Hunderter und möglicherweise sogar die Tausenden an jedem Punkt für jede Seitenladung.Leistung von leeren Funktionen in PHP

Der anfängliche Modul wird grundsätzlich wie folgt aussehen Code, der durch das Objekt ersetzt wird, was Triggerereignis Griff wurde gefeuert und den übergebenen Daten verarbeiten:

function trigger ($trigger_name, $data=false) 
{ 
    return false; 
} 

Wird dies ein Problem schließlich sein und sollte Ich arbeite stattdessen in einem System der Module vorregistriert einen Trigger, um die Anzahl der sinnlosen Funktionsaufrufe zu reduzieren?

Antwort

2

i in diesem Link:

http://phplens.com/lens/php-book/optimizing-debugging-php.php

Ein Funktionsaufruf mit einem Parameter und einer leeren Funktionskörper dauert etwa zur gleichen Zeit wie 7-8 ++ Operationen $ localvar tun. Ein ähnlicher Methodenaufruf ist natürlich ungefähr 15 $ localvar ++ Operationen.

Update: 11. Juli 2004: Der obige Test wurde auf PHP 4.0.4, vor etwa 3 Jahren. Getestet habe ich diese wieder in PHP4.3.3 und fordern nun eine Funktion etwa 20 $ localvar ++ Operationen nimmt, und den Aufruf einer Methode dauert etwa 30 $ localvar ++ Operationen. Dies könnte daran liegen, dass $ localvar ++ jetzt schneller läuft oder Funktionen langsamer sind.

2

würde ich mit etwas mehr ereignis gutmütig wie this work around für PHP fehlende Ereignis Unterstützung gehen. Es sieht ähnlich aus wie bei der Vorregistrierung.

Wenn Sie nicht tun können, oder es vorziehen, nicht ein Haufen von leeren Funktionsaufrufen, die Leistung nicht weh tun (obwohl Tausende von ihnen, vielleicht). Ich würde einige grundlegende Profile erstellen, um zu sehen, wo die Zeit für die Bereitstellung einer Seite verbracht wird. Wenn gezeigt wird, dass leere Funktionen viel Zeit benötigen, würde ich mich darum kümmern.

Ich kann keinen Fall vorstellen, wo die Seite so komplex ist wie zu verlangen, dass viele Auslöser, aber, und nicht andere imposante Engpässe haben. Das heißt, wenn die Seite so viel passiert, werden die hinzugefügten Trigger noch weniger signifikant.