Ich habe kürzlich mit DotNetNuke für Webanwendungen gearbeitet und es gibt eine Reihe von Dingen, die ich bei jeder Implementierung von Caching-Lösungen in Betracht ziehe.
Ich würde jedes Feature Ihrer Website / Anwendung für jedes Feature entscheiden:
Ich würde persönlich gegen das Zwischenspeichern ganzer Seiten zugunsten der Zwischenspeicherung von Abschnitten der Website / Anwendung gehen.
Zunächst einmal, wenn Ihr Code wie gesagt optimiert wird, werden Sie nur bemerkenswerte Leistungsvorteile sehen, wenn die Site mit vielen Anfragen gehämmert wird.
Es ist jedoch schneller, Ressourcen aus dem Arbeitsspeicher abzurufen als von der Festplatte, sodass Ihr Webserver mehr Anforderungen verarbeiten kann, wenn Sie über eine Cache-Strategie verfügen.
Wenn Sie wissen wollen, wann Sie Caching durchführen müssen, sollten Sie bedenken, dass selbst moderne moderne Webserver Hunderte von Anfragen pro Sekunde verarbeiten können. Wenn Sie also keine anständige Menge an Datenverkehr erwarten, ist das Caching wahrscheinlich etwas, das Sie einfach überspringen können.
Wenn Sie Inhalte aus Ihrer Datenbank abrufen (z. B. StackOverflow tut dies wahrscheinlich), kann das Caching sehr hilfreich sein, da Datenbankoperationen relativ teuer sind und in Situationen mit hohem Datenaufkommen zu einem großen Engpass führen können.
Wie für ein Szenario, wenn es nicht angemessen ist zu cachen oder wenn Caching schwierig wird ... Wenn Sie versuchen, eine dynamische Seite zwischenspeichern, die das aktuelle Datum und die aktuelle Uhrzeit anzeigt, werden Sie ständig Sehen Sie ein altes Datum / eine alte Uhrzeit, es sei denn, Sie werden ein wenig mehr in Ihre Caching-Strategie einbezogen. Das ist etwas, worüber man nachdenken sollte.
Welche Sprache benutzen Sie? Mit ASP haben Sie einige sehr einfache Zwischenspeicherung mit nur einige Eigenschaft Tag über die Methode hinzufügen und der Wert wird abhängig von der Zeit zwischengespeichert.
Wenn Sie mehr Kontrolle über den Cache haben möchten, können Sie ein beliebiges populäres System wie MemCached verwenden und ein Steuerelement mit der Zeit oder dem Ereignis haben.
Yahoo zum Beispiel "Versionen" ihr JavaScript, so dass Ihr Browser code-1.2.3.js herunterlädt und wenn eine neue Version erscheint, verweisen sie auf diese Version. Dadurch können sie ihren Javascript-Code sehr lange zwischenspeichern.
Wie für die allgemeine Antwort denke ich, hängt es von Ihren Daten ab, wie oft es sich ändert. Zum Beispiel ändern sich Bilder nicht sehr oft, aber HTML-Seiten tun es. Die Seite "Über uns" ändert sich nicht allzu oft, aber der Nachrichtenbereich.
Sie können nach Zeit zwischenspeichern. Dies ist nützlich für Daten, die sich schnell ändern. Sie können die Zeit für 30 Sekunden oder 1 Minute einstellen. Natürlich erfordert dies etwas Verkehr. Mehr Verkehr, den Sie haben, mehr können Sie mit der Zeit spielen, denn wenn Sie 1 Besuch jede Stunde haben, wird dieser Besuch den Cache füllen und nicht benutzen ...
Sie können nach Ereignis zwischenspeichern ... wenn sich Ihre Daten ändern, aktualisieren Sie den Cache ... das ist sehr nützlich, wenn die Daten sehr schnell für den Benutzer stimmen müssen.
Sie können statische Inhalte zwischenspeichern, von denen Sie wissen, dass sie sich nicht ändern. Wenn Sie eine Top 10 des Tages haben, die jeden Tag aktualisiert wird, dann können Sie alle im Cache speichern und jeden Tag aktualisieren.
Wenn verfügbar, achten Sie auf die Zwischenspeicherung des gesamten Objektspeichers. In ASPNET ist dies eine integrierte Funktion, mit der Sie Ihre Geschäftslogikobjekte einfach in die IIS-Anwendung einfügen und von dort aus darauf zugreifen können.
Dies bedeutet, dass Sie alles speichern können, was Sie zum Generieren einer Seite im Speicher benötigen (persistente Schreibvorgänge in der Datenbank) und eine Seite ohne ANY Datenbank-IO generieren.
Sie müssen immer noch die Seitenaufbau-Logik verwenden, um die Seite zu generieren, aber Sie speichern eine Menge Zeit beim Abrufen der Daten.
Andere Techniken beinhalten lokalisierte Ausgabezwischenspeicherung, bei der Sie die Ausgabe vor dem Senden erfassen und in einer Datei speichern. Dies ist ideal für statische Abschnitte (z. B. Navigation auf bestimmten Seiten oder Textkörper) und schließt sie bei Bedarf ein. Die meisten Implementierungen löschen zwischengespeicherte Objekte wie diese, wenn ein Schreibvorgang stattfindet oder nach einer bestimmten Zeitspanne.
Dann gibt es das am wenigsten "genaue": Ganzseitige Zwischenspeicherung. Es ist die höchste Leistung, aber es ist ziemlich nutzlos, wenn Sie sehr einfache Seiten haben.
Welche Art von Caching? Serverseitiges Caching? Clientseitige Zwischenspeicherung?
Client-seitiges Caching ist ein Kinderspiel mit bestimmten Dingen, wie statischem HTML, SWFs und Bildern. Stellen Sie fest, wie oft sich die Assets ändern können, und richten Sie die Header "Expires" entsprechend ein. (2 Tage? 2 Wochen? 2 Monate?)
Dynamische Seiten sind per Definition etwas schwieriger zu cachen. Es gab einige Untersuchungen im Caching bestimmter Chunks mit Javascript (und zu IFrames degradieren, wenn JS nicht verfügbar ist.) Dies könnte jedoch ein wenig schwieriger in eine bestehende Website nachrüsten.
Die Zwischenspeicherung von DB- und Anwendungsebenen kann je nach Ihrer Situation funktionieren oder nicht. Das hängt wirklich davon ab, wo Ihre Engpässe sind. Wenn Sie herausfinden, wo Ihre Anwendung am meisten Zeit beim Seiten-Rendering verbringt, haben Sie wahrscheinlich die Priorität 1, dann können Sie sich überlegen, wo und wie Sie cachen.