Jörg Reinholz: Kosten der eigenen Fehlerbehandlung

Beitrag lesen

Du widersprichst mir also, nur um dann das vorzuschlagen, was ich nachfolgend schon als – indirekte – Möglichkeit genannt habe …

Naja. Wie soll ich es sagen ... ich wollte keineswegs unhöflich oder verletzend formulieren, habe Dich aber zitiert und musste mich ergo eng an Deine Formulierung gehalten. Da stand zunächst es gehe nicht und erst weiter unten hast Du dann den, dem dieser Deiner vorherigen Behauptung widersprechenden Lösungsansatz selbst genannt.

Du hast jetzt von einer Webseite zitiert:

“if you have an error and a custom error handler which gets executed, that yields for a ~10X performance loss”

Das sehe ich als Aussage kritisch. Zu erst einmal muss man dedlfix folgen, der richtig aussagt, dass es egal sei dass man einen höheren Aufwand habe, wenn man so zum korrekten Ergebnis kommt. Der Bagger fährt ja auch erst zur Baustelle statt das Loch gleich im Hof des Bauunternehmens auszuheben...

Ich habe das mal gemessen.

Versuchsreihe A - PHP (als CGI) auf der Linux-Konsole:

Datei fehler0.php:

<html><style type="text/css"><script type="text/javascript>"  
<?php  
require_once '[link:http://www.fastix.org/r/use_strict.txt@title=use_strict.php]';  
$str.=$var;  
#R4  
#R5  
#R6  
#R7  
$foo='foo';  
#include 'not.existent.file';  
$bar=4/0;  
?>  
<p>(Not) Fine!</p>  
</html>

Aufruf_ time php fehler0.php

real    0m0.042s  
user    0m0.020s  
sys     0m0.023s

fehler0_ohne_use_strict.php:

<html><style type="text/css"><script type="text/javascript>"
<?php
#DEFINE('DEBUG', 0); require_once 'use_strict.php';
#R4
#R5
#R6
#R7
$foo=foo;
include 'not.existent.file';
$bar=0;
if (0==$bar) { trigger_error('$baz ist 0! Durch 0 kann nicht dividiert werden.', E_USER_ERROR); }
$bar=4/$bar;
?>
<p>(Not) Fine! The Script was NOT breaked.</p>
</html>

Aufruf: php fehler0_ohne_use_strict.php:

real    0m0.038s  
user    0m0.025s  
sys     0m0.016s

Ich habe das mehrfach getestet. Die Werte haben sich nicht signifikant unterschieden. Insbesondere waren in einigen - aber definitiv der Minderheit - der Versuche die Aufrufe mit der Fehlerbehandlung sogar schneller, was hier der Unvollkommenheit der Testumgebung zuzuschreiben ist. Fakt ist aber, dass meine Messung dennoch der Aussage eines 10-fachen Performance-Verlustes widerspricht, denn dann hätte das Skript mit "use-strict" deutlich mehr Zeit verbrauchen müssen.

Jörg Reinholz