2009-07-14 12 views
0

zu tun, wenn die Leistung von Operationen zu vergleichen ist dies, wie ich würde typicaly die Tests durchführt:bessere Art und Weise einfachen Performance-Tests

<?php 
$w = 'world'; 
$start1 = microtime(true); 
for($i=0;$i<10000;$i++) 
    echo 'Hello ' . $w . '!'; 
$end1 = microtime(true); 

$start2 = microtime(true); 
for($i=0;$i<10000;$i++) 
    echo "Hello $w!"; 
$end2 = microtime(true); 

$start3 = microtime(true); 
for($i=0;$i<10000;$i++) 
    echo 'Hello ' + $w + '!'; 
$end3 = microtime(true); 

echo "\n\n\n"; 
echo 'Concatination: ' . ($end1 - $start1) . "\nInline Var: " . ($end2 - $start2) . "\nAddition Operator: " . ($end3 - $start3); 

Gibt es einen besseren Weg, um diese Tests möglicherweise eine zuverlässigere Art und Weise zu tun? Es scheint, dass, wenn ich die gleichen Tests mehrere Male mache, dass ich sehr unterschiedliche Ergebnisse bekommen kann, zum Beispiel habe ich das oben genannte mehrere Male ausgeführt, und das ist, was ich bekommen habe.

Concatination: 0.057300090789795 
Inline Var: 0.092978954315186 
Addition Operator: 0.090532064437866 

Concatination: 0.10458517074585 
Inline Var: 0.075299978256226 
Addition Operator: 0.039528131484985 

Concatination: 0.063031911849976 
Inline Var: 0.07781195640564 
Addition Operator: 0.022316932678223 

Concatination: 0.079019069671631 
Inline Var: 0.030484914779663 
Addition Operator: 0.096056938171387 

Concatination: 0.077842950820923 
Inline Var: 0.052779912948608 
Addition Operator: 0.037421941757202 

Concatination: 0.084203004837036 
Inline Var: 0.013757944107056 
Addition Operator: 0.074331045150757 

Concatination: 0.027930021286011 
Inline Var: 0.05648398399353 
Addition Operator: 0.049610137939453 

Concatination: 0.041821956634521 
Inline Var: 0.047034978866577 
Addition Operator: 0.062538862228394 

Concatination: 0.0071420669555664 
Inline Var: 0.066315889358521 
Addition Operator: 0.004756927490234 

Concatination: 0.088988065719604 
Inline Var: 0.022722959518433 
Addition Operator: 0.06276798248291 

Wie Sie bei jedem Lauf sehen können, kann es sehr unterschiedliche Ergebnisse geben.

+1

Die Wahl der String-Verkettungsmethode ist für die Leistung Ihrer Anwendung völlig irrelevant. Während Sie versuchen, ein paar Nanosekunden Ausführungszeit aus der String-Verkettung herauszuholen, haben Sie wahrscheinlich eine O (n^3) verschachtelte Schleife oder eine nicht indizierte Abfrage irgendwo, die für 8 Sekunden ausgeführt wird. Außerdem haben Sie eine vierte Form vergessen: echo 'Hallo', $ w, '!'; –

Antwort

3

Probieren Sie xdebug, es kann Ihren Code während der Ausführung profilieren und eine Trace-Datei erstellen. Dies kann dann durch wincachegrind/kcachegrind o.ä. ausgeführt werden, um Ihnen Details darüber zu geben, wie Ihre Ausführung durchgeführt wurde, was die Zeit gekostet hat etc.

Zend Platform enthält auch einen Profiler, falls Sie diesen haben. Ich kann mich nicht erinnern, ob der kostenlose Zend Debugger und/oder die Zend Server Community Edition auch den Profiler enthält, aber eine andere Option, um deinen Code zu profilieren, wenn du dazu kommst.

Persönlich bevorzuge ich xdebug.

Verwandte Themen