Autor | Nachricht |
---|---|
Administrator ![]() ![]() Name: Marc Geschlecht: ![]() Anmeldedatum: 28.08.2004 Beiträge: 52423 Wohnort: Lohmar | zitieren Hi, wegen einem Blogartikel, habe ich mich dran gemacht und mal getestet, welche Art der Speicherung Prüfung von Filecaches am schnellsten ist (z.B. wenn man Datenbankabfragen zwischenspeichert, statt sie erneut auszuführen). Bisher nutzte ich include() und wollte auf filemtime() / file_get_contents() wechseln, da es bei sehr häufigen include() und Dateiänderungen dazu führt, dass die Datei unfertig eingebunden wird. Und was passiert, wenn man eine unfertige php-Datei einbindet? Richtig es erscheint die allseits bekannt $end-Fehlermeldung. Das Benchmark bestätigt mich jetzt noch mal in meiner Entscheidung auf reine Textdateien zu wechseln. Hier die getesteten Codes:
Verfasst am: 14.10.2009, 00:45 zitieren Mir sind noch drei Varianten eingefallen:
1x bearbeitet Verfasst am: 14.10.2009, 01:04 zitieren 15% konnte ich damit rausholen, dass ich auf file_exists() verzichtet habe und file_get_contents() und serialize() getrennt habe. Auf file_exists() können wir getrost verzichten, wenn wir unseren Cache immer nutzen. In dem Fall übernimmt file_get_contents() den Job. Eigentlich ist file_get_contents() langsamer als file_exists(), aber das kommt nicht zum Tragen, da in 99,9% der Fälle ja eine Cache-Datei vorhanden sein wird und die Prüfung mit file_exists() damit überflüssig wird. Danach habe ich eine weitere Idee ausprobiert, in der ich mir die Seitenaufrufe einer Website zu nutze mache. Da jede Cache-Datei durch den Besucher selbst ausgelöst wir, führt auch jeder Seitenaufruf zur entsprechenden Prüfung der Dateien mit filemtime(). Da diese Funktion aber bekanntlich zu viel Performance kostet und die Cache-Dateien nicht bei jedem Seitenaufruf erneuert werden müssen, machen wir uns einen Zufallsfaktor zu Nutze. Dieser hat die letzte Abfrage dann noch mal um 50% beschleunigt! Geht man beispielsweise von 100.000 Seitenaufrufen pro Tag aus, so resultieren diese 100.000 Aufrufe von filemtime(). Das wollen wir nicht, weshalb wir einfach den Faktor 1:100 ins Spiel bringen. Schon reduzieren wir die Häufigkeit, mit der filemtime() aufgerufen wird auf 1.000. Damit haben wir noch ca. 42 Aufrufe pro Stunde. Haben wir nun einen Cache, der nur alle 24 Std. aktualisiert werden soll, wie z.B. die Geburtstagsliste aller Mitglieder, reicht das vollkommen für eine akzeptable Aktualität des Datensatzes. Es kann zwar gut sein, dass die Geburtstage erst um 00:10 Uhr aktualisiert werden, aber im Regelfall sollte das reichen. Falls nicht, müsste man hier mit einem Zeitrahmen arbeiten, wo die Impressionen zwischen 00:00 und 00:10 Uhr z.B. alle zur Aktualisierung des Caches führen. Bei 100.000 Seitenaufrufen pro Tag fallen damit ca. 167 Aufrufe auf diese besagten 10 Minuten. Das wäre also sogar noch besser, da nur 167x, statt 1.000x die Funktion filemtime() aufgerufen wird. Wie man sieht, kann man in diesem Punkt so einiges optimieren. Zumindest sollte man von dem flock-Konstrukt abkommen, dass weder performant, noch Sicherheit bietet, da man flock wiederrum beim Einlesen der Daten benötigt. Und ich glaube nicht, dass es so gut sein kann, wenn man bei mehreren Cache-Dateien in einem Seitenaufruf ständig sperrt und entsperrt. Allerdings weiß ich noch nicht, ob der Wegfall von flock() Probleme machen könnte beim parallen Schreiben von identischen Cache-Datensätzen, was ja durchaus bei parallel laufenden Prozessen zum Tragen kommen könnte. Da werde ich es aber einfach auf einen Test ankommen lassen und das Ergebnis hier noch mal in ein paar Monaten bereitstellen. |
▲ | pn email |
Gast | zitieren Mach mit!Wenn Dir die Beiträge zum Thread "Benchmark: $gentime vs. filemtime (Filecache)" gefallen haben oder Du noch Fragen hast oder Ergänzungen machen möchtest, solltest Du Dich gleich bei uns anmelden:Registrierte Mitglieder genießen die folgenden Vorteile: ✔ kostenlose Mitgliedschaft ✔ keine Werbung ✔ direkter Austausch mit Gleichgesinnten ✔ neue Fragen stellen oder Diskussionen starten ✔ schnelle Hilfe bei Problemen ✔ Bilder und Videos hochladen ✔ und vieles mehr... |
▲ | |
Ähnliche Beiträge | Re: √ | Letzter Beitrag | |
---|---|---|---|
![]() Einfaches Skript um MySQl zu benchmarken:
<?php
$link = mysqli_connect("localhost", "root", "");
/* check connection */
if (mysqli_connect_errno())... [Allgemein]von mgutt | 0 278 | 19.01.2017, 12:19 ![]() mgutt | |
3D Benchmark Wollte mal gucken was eure PC´s so hergeben
mein pc system:
Asus Crosshair
ATI 2900 GT
Kingstone HyperX DDR1066 2GB standart SPD mit CL 5 xD
und kleiner rein
hier mal nen 3Dmark03 run mit meiner neuen CPU davor AMD X2 BE 2300 ca 21000... von R3DEX | 79 3.534 | 28.04.2011, 05:26 nfs_freak | |
Intel X25-M G2 160 GB Benchmark (SSDSA2M160G2GC) Hi,
von meiner neuen Platte hab ich mal ein Benchmark gemacht:
HD Tune Pro: INTEL SSDSA2M160G2GC Benchmark
Test capacity: full
Read transfer rate
Transfer Rate Minimum : 128.2 MB/s
Transfer Rate Maximum : 198.2 MB/s
Transfer Rate... von mgutt | 4 645 | 21.03.2011, 18:23 mgutt | |
JetFlash Transcend 16 GB Benchmark Vielleicht kann ja jemand die Info gebrauchen. Hab den Stick... von mgutt | 0 156 | 09.05.2014, 07:22 mgutt | |
SanDisk Extreme 16 GB Benchmark Vielleicht kann ja jemand die Info gebrauchen. Hab den Stick... von mgutt | 0 120 | 09.05.2014, 07:23 mgutt | |
SSD Benchmark: 4K Schreiben ist langsam? Ich habe eine 850 Pro und nach einem Test mit AS SSD erscheint mir der 4K Schreibwert zu gering zu sein.
Erst mal hier der Wert meiner alten 840... von mgutt | 5 1.478 | 08.12.2015, 17:52 Headshot91 | |
preg_replace / preg_match Benchmark Danach hatte ich eigentlich gesucht und bin auf etwas vergleichbares gestoßen:
http://benchmark.nophia.de/benchmarks-textverarbeitung-k-2-texte-mit-mindestens-zwei-vokalen-b-21.html
Dazu hätte ich direkt einen Verbesserungsvorschlag:
<?PHP
... [PHP]von mgutt | 0 474 | 26.02.2009, 13:25 ![]() mgutt | |
Benchmark: Prepared Statements in Array Hi,
hier die Resultate:
/*
// version 1
// 1. run 0.14501937151
// 2. run 0.145541801453
// 3. run 0.141622686386
// fastest run 0.0934751033783
while ($field = $meta->fetch_field()) {
$row[] =... [PHP]von mgutt | 0 527 | 09.10.2009, 18:39 ![]() mgutt | |
![]() Bitte... [Allgemein]von Indianerjunge | 0 0 | 19.01.2017, 11:27 ![]() Indianerjunge | |
strpos vs. in_array vs. isset - Performance-Benchmark Ich wollte mal wissen was am schnellsten ist:
<pre>
<?php
echo phpversion() . PHP_EOL . PHP_EOL;
$array = array_fill(0, 10000, 16);
$array = array_map('openssl_random_pseudo_bytes',... [PHP]von mgutt | 0 523 | 15.10.2017, 18:02 ![]() mgutt |