techfrees PHP-Benchmark
<techfree@webchat> Gerade einige Speed-Tests für PHP-Code gemacht :D
<techfree@webchat> Bei 100.000 if-Abfragen fällt es schon fast auf, ob man bei einzelnen Ausführungen mit oder ohne geschweifte Klammern macht :D
<techfree@webchat> Nämlich etwa 1 Sekunde :D
<root> und das soll uns was sagen? Dass PHP scheiße ist?
<root> das war auch so bereits bekannt :P
<techfree@webchat> Nein :(
<techfree@webchat> Dass ich auf die Performance meiner TE achte.
<root> falsch
<Lulu> Und, was ist fixer? :D
<root> wenn es einen Performance-Unterschied zur Laufzeit macht, ob man if(x) { y(); } oder if(x) y(); macht, dann ist der Interpreter einfach scheiße :D
<techfree@webchat> Mh, mag sein, aber ich achte darauf!
<techfree@webchat> if(x) y();
<techfree@webchat> Ist bei 100.000 Ausführungen um 1 Sekunde schneller.
<root> irgendwie würds mich allerdings wundern, wenn das tatsächlich einen Unterschied macht … so blöd kann ein Interpreter-Bastler doch gar nicht sein
<techfree@webchat> if(x) y(); ist also doppelt so schnell.
<techfree@webchat> ;)
<techfree@webchat> Denn if(x) { y(); } braucht 2 Sekunden.
<root> wie wärs, wenn du mal richtig misst?
<techfree@webchat> Hab ich :D
<root> wie denn?
<techfree@webchat> Microtime vor Ausführung, nach Ausführung und dann eine Differenz errechnet.
<root> au!
<techfree@webchat> Nichts au.
<root> doch
<techfree@webchat> Nein.
<root> das ist nicht richtiges Messen
<techfree@webchat> Doch ist es :)
<root> nö
<techfree@webchat> Du hast wohl keine Ahnung von PHP :D
<techfree@webchat> Deswegen bist du auch so pessimistisch.
<root> nein
<techfree@webchat> Doch.
<root> wenn du das richtig messen willst: ~1M startup, wo du die Werte verwirfst. Dann 1M das mit if(x) y(); und dann 1M das mit {}. Und dann schauen was rauskommt.
<root> und das ist auch nur ein Bruchteil der Wahrheit … aber schon mal besser, als was du da »gemessen« hast
<techfree@webchat> Das macht absolut null Unterschied du N00b.
<root> :D
<root> du wirst es ja wissen :D
<techfree@webchat> :D
<techfree@webchat> Ja :D
<root> also wenn du das so z.B. in Java machst (spätestens ab Graal) fliegst du übrigens immer noch auf die Schnauze, und ohne warmup sowieso :D
<techfree@webchat> Java ist aber nicht PHP :p
<root> und bei PHP und überall sonst ists ähnlich
<techfree@webchat> PHP ist zu nix ähnlich.
<root> abgesehen davon müsstest du den gesamten Benchmark noch öfter laufen lassen, mitteln usw. Aber ja, du weißt ja natürlich alles zum Thema :)
<techfree@webchat> Habe ich doch oô
<techfree@webchat> Ich habe bei 1000 mal den Durchschnittswert errechnet.
<techfree@webchat> Also ja, ich weiß alles :)
<root> wart mal … was hast du getan? »$avg = 0; for($i = 0; $i < 1000; $i++) { $t = microtime(); if(x) y(); $time = microtime() - $t; $avg += $time; } $avg /= 1000;«?
<techfree@webchat> Lol, nein.
<root> sondern?
<techfree@webchat> Ich habe 1000 mal die 100.000 Durchläufe laufen lassen :p
<root> achso
<root> immerhin schon mal besser
<root> (als erwartet)
<root> ist zwar immer noch weit von »richtig« entfernt, aber egal :P
<techfree@webchat> Nö.
<root> hm … magst du das Benchmark-Skript mal rausrücken?
<techfree@webchat> Wieviel zahlst du?
<root> nix, warum auch? Ich würd nur gern wenn schon was zu deinem Ding vergleichbares testen können :P
<root> rein aus Interesse
<techfree@webchat> Wenn Interesse besteht, dann kann man dafür Geld verlangen :)
<techfree@webchat> Nennt man Handelswesen :p
<techfree@webchat> Also, was zahlste?
<root> ernsthaft? du willst für einen Benchmark, den man in 2min hinbekommt Geld verlangen?
<techfree@webchat> Ja :p
<root> es ging um »vergleichbar«, darum fragte ich übrigens :P
<techfree@webchat> Es ist immerhin mein Benchmark :p
<techfree@webchat> Und er ist weder Open Source noch Freeware :p
<root> ok, frag ich halt anders: tut »y()« irgendwas spezielles, und ist »x« irgend eine spezielle Bedingung? Ist die konstant true oder false? Oder wird die bei jedem Durchlauf neu berechnet?
<techfree@webchat> Ja, ja, nein
<root> 2. Runde: y() tut immer das selbe, langweilige, und einzig die Klammern beim if(x) y(); sind jeweils anders? Und es steht dort if(true) y();?
<techfree@webchat> Mehr sage ich dir nicht :)
<root> hast du etwa Angst, dass man dir ein gegenteiliges Benchmark-Ergebnis bringt? :D
<techfree@webchat> Nein, ich möchte Geld :D
<root> vergiss es, für sowas würden dir nur Entmündigte Geld geben
<root> und die dürfen nicht :D
<techfree@webchat> :p
<root> techfree@webchat: du hast übrigens scheiße gelabbert:
avg without {}: 1.769930
avg with {}: 1.759439
<techfree@webchat> Nope.
<seederscloud@webchat> Haben hilfe seitens 200 anwälten, 60codern, 100saatgutproduzenten und ca 400.000 kontakte
<Omnomnomnivor> Hmmm, eine hochcervicale Ischämie infolge eines MIs würde viel erklären bei techfree
<root> techfree@webchat: dann beweise mir das Gegenteil :P
<root> ich kann übrigens im Gegensatz zu dir den Code rauslassen :P
<techfree@webchat> Lass ihn doch raus :)
<techfree@webchat> Ah, kommt der Code wohl doch nicht :p
<seederscloud@webchat> Codevis in entwicklung is nu ned viel... Geht jz flott sobald ich wieder zeit finde bin noch am pakete senden und buckle zzt 70h woche... Auch um hilfe zu organisieren weil viele zu fauls sind das alles zu lesen... Gut ich kanns ned ändern aber ich versuchs
<root> techfree@webchat: http://hackyourlife.lima-city.de/techfree/microbenchmark.phps :P
<root> bzw ein minimaler Fehler is drin, mal schaun ob du den siehst :P
<techfree@webchat> Damn :o
<techfree@webchat> Stimmt.
<techfree@webchat> microtime hat den Para get_as_float :o
<techfree@webchat> XD
<techfree@webchat> Ich dachte schon wieder es kein float ist XD
<techfree@webchat> Was soll $r sein?
<Lulu> Der root bastelt heimlich PHP!!111einself
<seederscloud@webchat> Es ich würde nen min setup api+db bei euch ablegen... Als versteckten ausweichserver gerne auch öffentlich aber arbeiten mit cloudns usw um alle hintertürchen wie mans abdrehen kann zu beseitigen... Alter stand auf gratissamen.top... Spiel euch ggf den neuen hoch noch is es nicht sicher, nicht optimiert noch sinst was nur konzept, db, und helfer habi
<techfree@webchat> $j, $k, $,i sind für Zählungen Standard.
<techfree@webchat> $i*
<root> is doch eh?
<seederscloud@webchat> Php is ned meins bin nur js crack, die ganze sache wird als vollajax mit caching auf allen laufen was n netz hat wurscz wie dachte nur ich frag alle ;) euch inkl die kostenlos was anbieten vorher obs auch recht is werde 20 server selbst anmieten...
<techfree@webchat> for($n = 0; $n < $warmup; $n++) {
<techfree@webchat> for($n = 0; $n <= $warmup; $n++) {
<techfree@webchat> 8)
<techfree@webchat> Sonst läuft es einmal zu wenig durch.
<seederscloud@webchat> Die php api is 100% unsicher aber man kann zzt nur die entwicklungsdb löschen das kratz mich ned ;) langsam is auch wurscht kommt auf lighthttp, nginx und apache server gemischt wird auf sllen geprüfet
<techfree@webchat> Ach seeders, bitte halt dein MAul.
<seederscloud@webchat> Ok
<techfree@webchat> Oh, so einfach?
<techfree@webchat> Nice.
<root> what?!
<root> for($n = 0; $n < $N; $n++) → läuft exakt $N mal …
<root> mute seederscloud@webchat
<Orakel> muted "seederscloud@webchat"
<techfree@webchat> Ah, stimmt.
<techfree@webchat> Ich machs immer mit $i = 1
<root> du bist ja auch kein Informatiker
<techfree@webchat> Doch :p
<techfree@webchat> Bin zu faul zu schauen.
<techfree@webchat> Wo ist er dennß
<techfree@webchat> ?
<root> ein Informatiker zählt NIE von 1 weg! :P
<techfree@webchat> Doch :c
<Lulu> root: Und wenn er von 1 runter zählen will? *duck*
<techfree@webchat> Also wo der Fehler?
<root> der Fehler ist, dass du mir nicht erklären kannst, warum das rauskommt:
avg without {}: 1.690956
avg with {}: 1.684167
<techfree@webchat> printf("avg without {}: %f\n", $avg);
<techfree@webchat> printf("avg with {}: %f\n", $avg);
<techfree@webchat> :p
<techfree@webchat> $avg = 0.0;
<techfree@webchat> $avg += $now - $t;
<techfree@webchat> $avg /= $passes;
<techfree@webchat> Deshalb.
<root> und weiter? Wieso is das mit if(x) { y() } genauso schnell wie if(x) y(); (bzw in wenigen Fällen sogar schneller)?
<root> laut dir müsste da ja ganz deutlich 1s Unterschied sein
<techfree@webchat> Weiß nicht c:
<root> na also
<root> aber du benchmarkst ja richtig und so … war eh klar :D
<techfree@webchat> Tue ich!
<techfree@webchat> Aber ich nutze jetzt einfach deins, weil da tolle Variablen sind.
<Lulu> root: Seine Mailadressen sind ja auch immer richtig. :)
<root> stimmt
<techfree@webchat> :p
Info
https://hackyourlife.lima-city.de/techfree/microbenchmark.phps
#!/bin/phpp
<?php
function f() {
$r = 0;
for($i = 0; $i < 10000; $i++) {
$r += $i;
}
}
$warmup = 5;
$passes = 10;
$iterations = 10000;
$avg = 0.0;
for($n = 0; $n < $warmup; $n++) {
$t = microtime(true);
for($i = 0; $i < $iterations; $i++) {
if(true)
f();
}
$now = microtime(true);
$avg += $now - $t;
}
$avg = 0.0;
for($n = 0; $n < $passes; $n++) {
$t = microtime(true);
for($i = 0; $i < $iterations; $i++) {
if(true)
f();
}
$now = microtime(true);
$avg += $now - $t;
}
$avg /= $passes;
printf("avg without {}: %f\n", $avg);
for($n = 0; $n < $warmup; $n++) {
$t = microtime(true);
for($i = 0; $i < $iterations; $i++) {
if(true) {
f();
}
}
$now = microtime(true);
$avg += $now - $t;
}
$avg = 0.0;
for($n = 0; $n < $passes; $n++) {
$t = microtime(true);
for($i = 0; $i < $iterations; $i++) {
if(true) {
f();
}
}
$now = microtime(true);
$avg += $now - $t;
}
$avg /= $passes;
printf("avg with {}: %f\n", $avg);