PHP Caching mit APC
Let ' s sagen, ich cache-Daten in einer PHP-Datei in PHP-array wie dieses:
/cache.php
<?php return (object) array(
'key' => 'value',
);
Und ich auch die cache-Datei wie folgt:
<?php
$cache = include 'cache.php';
Nun, die Frage ist, wird die cache-Datei automatisch zwischengespeichert werden, die von APC in den Hauptspeicher? Ich meine wie ein typischer opcode-cache wie alle .php-Dateien.
Wenn ich speichern die Daten anders zum Beispiel im JSON-format (cache.json), die Daten werden nicht automatisch zwischengespeichert werden, die von APC?
Würde apc_store
schneller/bevorzugt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht mischen APC caching-Fähigkeiten mit der Fähigkeit zu optimieren, intermediate-code und cache von kompilierten code. APC bietet 2 verschiedene Dinge:
arrays etc), so dass Sie können speichern/Holen Sie mit apc_store und
apc_fetch
das nächste mal Sie laufen, Sie laufen schneller
Lassen Sie uns sehen, ein Beispiel für (1): Angenommen, Sie haben eine Daten-Struktur, die dauert 1 Sekunde zu berechnen:
Können Sie die Speicherung der Ausgabe, so dass Sie nicht haben, zu nennen, der langsam calculate_array() wieder:
welches deutlich schneller ist, viel weniger, als die ursprünglichen 1 Sekunde.
Nun, für (2) oben: mit APC wird nicht machen Sie Ihr Programm schneller als 1 Sekunde, das ist die Zeit, die calculate_array() benötigt. Allerdings, wenn Sie Ihre Datei zusätzlich benötigt (sagen wir) 100 Millisekunden zu initialisieren und ausführen, einfach mit aktiviertem APC machen müssen (ca) 20 Millisekunden. So haben Sie eine 80% Zunahme der Initialisierung/Vorbereitung Zeit. Dies kann durchaus einen Unterschied in der Produktion-Systeme, die so einfach die Installation von APC kann eine spürbare positive Auswirkungen auf Ihr Skript von der Leistung, auch wenn Sie nie explizit aufrufen, eine seiner Funktionen
apc_store
), aber ich fürchte, dass für eine einzelne Datei im Vergleich zu einer einzigenapc_fetch()
es nicht messbar ist... Wäre trotzdem interessantWenn Sie nur die Speicherung von statischen Daten (wie in deinem Beispiel), es wäre besser, verwenden
apc_store
.Die Argumentation hinter diesem ist nicht so sehr, ob der opcode-cache ist schneller oder langsamer, aber die Tatsache, dass Sie mit
include
zu Holen, statische Daten in den Bereich.Sogar mit einem opcode-cache, die Datei wird immer noch auf Konsistenz geprüft, auf jede Ausführung. PHP wird nicht analysieren die Inhalte, sondern es ist zu prüfen, ob die Datei vorhanden ist, und dass es nicht geändert hat, seit der opcode-cache erstellt wurde. Dateisystem-überprüfungen sind die Ressource teuer, auch wenn es sich nur um
stat
eine Datei.Daher die beiden Ansätze, die ich benutzen würde
apc_store
entfernen Sie die Dateisystem-überprüfungen vollständig.stat
-Aufruf mit php.net/apc.configuration.php#ini.apc.statstat=0
verpasst dem script "deploy" und b) selbst wenn nicht, jemand wird es bemerken und ändern Sie das Skript. Danach wird es löschen Sie den cache für die nächsten 150 Jahre. Das eine mal, wo jemand es vergessen, wird auch nicht dazu führen, dass ein Schwarzes Loch unter Ihren Servern. Ich würde reinigen Sie den cache sowieso (als wesentlicher Bestandteil von jedem deployment), unabhängig davon, obstat
ausgeschaltet ist, oder nicht 😉 Und nicht nur APCinclude
mitstat=0
müssen Sie Spülen Sie den gesamten cache und / oder den server neu starten. Das scheint eine ziemlich schwere anti-pattern Recht.apc_delete_file()
Sie müssen klar, alle die opcode-caches auf dem server; nicht nur die Datei, die Sie aktualisiert haben. Die alternative ist die Verwendungapc_clear_cache()
(das verhält sich anders, mit verschiedenen CGI-Implementierungen) oder zu hoffen, den server neu starten, spült es (wieder Neustart nicht vollständig garantieren ein cache-flush prüfen der Dokumentation). Mein argument ist, dass, wenn Sie verwenden müssen, eineapc_()
Funktion zum löschen der opcode-cache sowieso, warum nicht eliminieren Sie mögliche Fehlerquellen und verwendenapc_store()
zu beginnen?apc_*()
-Funktion, die Sie brauchen spezielle Behandlung für die Entwicklung von setups, weil die Entwicklung mitapc
ist das nicht sinnvoll. Dieser sagte: Es gibt keine vernünftige Nachteil bei der Verwendung der Datei-cache zu cache die Konfiguration-Datei. Oh, und btw: Auch mitstat=1
es betrifft nur eine Datei 😉 (der "normale" php-Dateien betroffen wären, sowieso).stat=0
ist nicht ein Problem für kleinere Installationen, bei denen ein Neustart ist schnell und die Auswirkungen minimal. Leider, bei größeren Installationen, wo viele Anwendungen ausgeführt werden, löschen des gesamten cache per Neustart ist nicht eine sehr attraktive option. Ich benutze meistens abstrahiert Treiber, die den Einsatz von APC, memcache, etc. austauschbar in verschiedenen Umgebungen. Dies schränkt den nutzen für die Entwicklung der Verwendung voninclude
zum abrufen von Informationen aus dem Cache, aber ich kann sehen, dass ein use-case für die es beim schreiben nackt PHP.Im Gegensatz zu der anderen Antwort, die ich hätte verwenden Sie die array-Datei-Lösung (das erste)
Der Grund dafür ist, dass mit beiden Lösungen sind Sie auf der richtigen Seite, aber wenn Sie lassen Sie die Zwischenspeicherung von bis zu APC selbst, die Sie nicht haben, um zu jonglieren, um mit den
apc_*()
-Funktionen. Sie schließen Sie einfach und verwenden Sie es. Wenn Sievermeiden Sie die
stat
-Anrufe auf alle zu. Dies ist nützlich für die Produktion, aber denken Sie daran, deaktivieren Sie das system-cache auf jedem deployment.http://php.net/apc.configuration.php#ini.apc.stat
Achja, nicht zu vergessen: Mit dem Datei-Ansatz, es funktioniert auch ohne APC. Nützlich für die Entwicklung von setup, wo man in der Regel sollten keine Zwischenspeicherung.