Die Benutzung der Funktion „register_tick_functions()“ ermöglicht es, die Scriptlaufzeit oder Funktionsausführungen zu messen, das heisst die CPU Rechenzeit, die für ein Script oder Teile eines Scripts verwendet wird, messbar zu machen und darzustellen.
Dadurch können nicht nur Fehler und unnötige Programmierschleifen erkannt werden, sondern auch die Perfomance und Schnelligkeit der eingesetzten Scripte verbessert werden, wenn dadurch die insgesamt Scriptlaufzeit minimiert werden kann. Dadurch eignet sich die Funktion: register_tick_functions() zur Fehlersuche sowie auch zur Perfomancesteigerung hauptsächlich dann, wenn Funktionen oder Scripte von vielen Clients gleichzeitig aufgerufen werden.
Der Syntax:
register_tick_function('funktionsname');
Grundsätzlich können als Parameter Funktionsnamen, Objekte und Arrays übergeben werden, die mit dieser Methode gemessen werden sollen.
Beispiel:
<?php
function laufzeit_messen() {
list($sec, $timestamp) = explode(" ",
microtime());
$debug = debug_backtrace();
echo ' --->Zeile:
'.$debug[0]['line'].'->'.$sec.' msec<br>';
}
register_tick_function('laufzeit_messen');
declare(ticks = 1) {
for ($index = 0; $index < 5; $index++) {
echo 'Test: '.$index;
}
}
?>
Ausgabe:
Test: 0 ---> Zeile: 10 -> 0.82346200 msec
---> Zeile: 11 -> 0.82348300 msec
Test: 1 ---> Zeile: 10 -> 0.82349000 msec
---> Zeile: 11 -> 0.82349600 msec
Test: 2 ---> Zeile: 10 -> 0.82350200 msec
---> Zeile: 11 -> 0.82351500 msec
Test: 3 ---> Zeile: 10 -> 0.82352200 msec
---> Zeile: 11 -> 0.82352700 msec
Test: 4 ---> Zeile: 10 -> 0.82353300 msec
---> Zeile: 11 -> 0.20571500 msec
---> Zeile: 11 -> 0.20572900 msec
---> Zeile: 12 -> 0.20574300 msec
Erklärung:
In diesem PHP-Code wird eine Funktion namens laufzeit_messen() definiert, die dazu dient, die Laufzeit von Codeabschnitten zu messen und anzuzeigen.
Die Funktion verwendet die list()-Funktion, um aus dem Ergebnis von explode() in Verbindung mit microtime()-Funktion zwei Variablen – $sec und $timestamp – zu extrahieren. Dabei gibt $sec den Sekundenanteil und $timestamp den Bruchteil einer Sekunde in Mikrosekunden an.
Außerdem greift die Funktion auf das Debugging-Array von PHP zurück (durch Aufruf der Funktion debug_backtrace()), um Informationen über den aktuellen Zustand des Codes abzurufen. In diesem Fall wird lediglich der Wert für 'line' ausgelesen und zur Anzeige gebracht.
Weiterhin registriert der Code diese Funktion als „Tick-Funktion“, mithilfe von register_tick_function('laufzeit_messen'). Eine Tick-Funktion ist ein Mechanismus in PHP, bei dem eine bestimmte Aktion oder Routine nach jedem N-Tick (Ausführungsschritt) des Interpreters aufgerufen wird. Der Wert für N-Ticks kann durch das Schlüsselwort declare(ticks = X) festgelegt werden.
In diesem Beispiel wurde declare(ticks = 1) gewählt; dies bedeutet, dass unsere Tick-Funktion (laufzeit_messen())) nach jedem einzelnen Ausführungsschritt aufgerufen wird. Dadurch erhalten wir eine genaue Messung der Laufzeit für jeden Schritt im Code.
Im Hauptteil des Codes, innerhalb des declare-Blocks, findet sich eine for-Schleife, die fünfmal durchlaufen wird. Bei jedem Durchlauf gibt sie den aktuellen Wert von $index mittels der echo-Anweisung aus.
Da unsere Tick-Funktion nach jedem Ausführungsschritt aufgerufen wird, erhalten wir während der gesamten for-Schleife mehrere Aufrufe von laufzeit_messen(), welche die aktuelle Laufzeit in Millisekunden und Zeilennummer anzeigen.
Insgesamt ist dieser PHP-Code ein anschauliches Beispiel dafür, wie man mithilfe einer tick-basierten Funktion Laufzeiten einzelner Codeabschnitte messen und darstellen kann.
Ablaufdiagramm:
Erläuterung:
Dieses Diagramm zeigt die Flusssteuerung des gegebenen PHP-Codes in einem Graphen:
- Starte das PHP-Script.
- Erstelle die „laufzeit_messen“ Funktion, welche:
- Die aktuelle Zeit und Zeilennummer zurückgibt.
- Registriere „laufzeit_messen“ als tick function, um es bei jedem Prozessschritt auszuführen.
- Führe eine For-Schleife mit fünf Durchläufen aus, die jeweils Testnachrichten mit Index (Test: 0 - Test: 4) anzeigen.
Die Tick-Funktion überwacht jeden Schritt im Skript und misst dabei die Laufzeit der einzelnen Prozesse (in Verbindung mit der `declare(ticks = X)` Anweisung).