Frage

Derzeit kenne ich nur zwei Möglichkeiten, um Daten im cache (ich benutze PHP, aber ich gehe davon aus, dass das gleiche gilt für die meisten Sprachen).

  1. Speichern Sie die cache in einer Datei
  2. Speichern des cache zu einem großen DB-Feld

Gibt es andere (vielleicht bessere) Möglichkeiten der Zwischenspeicherung oder ist es wirklich nur so einfach?

War es hilfreich?

Lösung

Vielleicht möchten Sie explizite mehr genau, was Sie wollen-cache.Sie haben alle diese Möglichkeiten cache:

  • Zugriff auf die Datenbank wo Sie speichern die Daten zunächst richtig einstellen Ihres RDBMS, dann mit einer Schicht delegieren die Entscheidung zu erkennen, mehrere Abfragen für die gleichen Daten (mit AdoDB zum Beispiel.)
  • Extrahieren Berechnungen von Schleifen im code damit Sie nicht berechnen Sie den gleichen Wert mehrmals. Hier Ihre Dritte Weg:die Speicherung der Ergebnisse in der Sitzung für den Benutzer.
  • Vorkompilieren von PHP mit einer Erweiterung wie APC-Cache.Auf diese Weise Sie nicht haben zu kompilieren die gleichen PHP-code für jede Anforderung.
  • Die Seite an den Benutzer gesendet machen Sie sicher, dass Sie die richtigen META-tags (tun Sie eine gute Sache für die Welt und nicht verwenden, ETL zumindest absolut notwendig);oder vielleicht macht dynamische Seiten vollständig statisch (mit einer batch-Prozess generiert .html-Seiten);oder mit einem proxy-cache-wie Squid.
  • Prefetching und damit beziehe ich alle diese Möglichkeiten haben Sie, um die Benutzererfahrung zu verbessern, nur durch die Dinge zu tun, während der Benutzer Sie nicht so Aussehen, Ihre Art und Weise.Für Beispiel, Vorladen des IMG-tags in der HTML-Datei, tunning das RDBMS für prefectching, precomputing Ergebnisse speichern komplexer Berechnungen in der Datenbank, etc.

Aus meiner Erfahrung, würde ich Wetten, dass Sie, dass Ihr code verbessert werden kann eine Menge, bevor wir beginnen zu reden caching Dinge.Betrachten Sie zum Beispiel, wie gut strukturiert, die navigation Ihrer Seite und wie gut Sie Steuern die Benutzeroberfläche.Dann überprüfen Sie den code mit einem tool wie XDebug.

Überprüfen Sie auch wie gut Sie Ihre SQL-Abfragen und wie gut sind Sie auf der Indexierung Ihrer Tabellen.Dann überprüfen Sie den code erneut, um nach Möglichkeiten suchen, um die Regel anwenden "gelesen, viele Male, aber die schreiben nur einmal"

Ein einfaches Werkzeug verwenden, wie YSlow Hinweis andere einfache Dinge, um zu verbessern.Überprüfen Sie Ihren code wieder auf der Suche nach Möglichkeiten, um mit Logik im browser (mit JavaScript)

Andere Tipps

Sie können auch cache-Speicher, die ist viel mehr effizient.Versuchen Sie es memcached.

Die Abstellung von memcached, tut das einfach gut Stopfen und gehen können, Verteilungs-und all that jazz, wenn Sie es brauchen, auch

Wenn Sie Apache verwenden, können Sie mod_rewrite verwenden, um statisch cache Ihres web-Seiten.Können sagen, Sie sind mit PHP, und Sie haben eine Anforderung für "/somepage.php".In Ihrem .htaccess-Datei setzen Sie die folgenden:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^$ # let's not cache urls with queries
RewriteCond %{REQUEST_METHOD} ^GET$ # or POST/PUT/DELETE requests
RewriteCond static_cache/%{REQUEST_URI} -s # Check that this file exists and is > 0 bytes
RewriteRule (^.*$) static_cache$1 [L] # If all the conditions are met, we rewrite this request to hit the static cache instead

Wenn Ihr cache dreht leer, wird die Anforderung verarbeitet, die von Ihrem php-Skript wie gewohnt, so, jetzt ist es einfach eine Sache, um Ihre php-Skript, speichern Sie die resultierende html-Code in den cache.Der einfachste Weg, dies zu tun ist mit einem anderen htaccess-Regel voranstellen Ende fügen Sie ein paar php-Dateien für alle Ihre php-Anfragen (dies könnte oder könnte nicht eine gute Idee sein, je nach Anwendung):

php_value auto_prepend_file "pre_cache.php"
php_value auto_append_file "post_cache.php"

Dann würden Sie so etwas tun:

pre_cache.php:

ob_start();

post_cache.php:

$result = ob_get_flush();
if(!$_SERVER['QUERY_STRING']) { # Again, we're not caching query string requests
  file_put_contents("static_cache/" + __FILE__, $result);
}

Mit einigen zusätzlichen reguläre Ausdrücke in der .htaccess-Datei könnten wir wohl starten Sie caching-Abfragezeichenfolge Anfragen so gut, aber ich überlasse das als übung für den Leser :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top