2009-10-19 9 views
2

Notre chargement initial de page est une bête dans notre application Rails. La grande chose à ce sujet est le manque d'actualisations de pages nécessaires. Le tout est très Ajax-y (et nos designers l'ont rendu super!) Il n'y a qu'un seul problème: le chargement initial de la page est un monstre."Préchauffage" du cache avec une page complète et computationnelle de mon application Rails

J'ai peaufiné et poussé et j'ai obtenu des améliorations de vitesse incroyables en optimisant, en mettant en cache, en mémorisant, etc. Pour les utilisateurs typiques de mon application, le tout est très utilisable. Cependant, il y a des cas limites où la quantité de données en cours d'analyse est significativement plus importante que d'autres et le chargement initial de la page peut prendre jusqu'à 15-25 secondes en raison de la quantité de données à traiter.

Notre plus gros problème est que nous ne pouvons pas mettre en cache quoi que ce soit. L'application en question est très CREATE/UPDATE lourde et les utilisateurs n'y viennent que lorsqu'ils ont besoin de faire des changements, une analyse rapide de nos logs montrent que PUTs et POST sont plus nombreux que le GET de 50 à 1. Toute tentative de cache, action ou fragment de page Le cache des parties de la page expirera presque immédiatement, ce qui a rendu les performances un peu difficiles à améliorer maintenant que toutes les autres couches sont optimisées. Ce que je me demande est:

Y a-t-il un moyen pour moi de générer la page et de "préchauffer" le cache de sorte que lorsque la page est demandée je la sers du cache au lieu de l'application? Ce que j'ai en tête est que pendant que l'utilisateur PUT et POST en utilisant la page existante (tout cela se passe avec les requêtes xhr), mon serveur peut expirer et régénérer le côté serveur de page pour que l'utilisateur demande la pleine page encore ... BAM c'est déjà généré et je le sers. Évidemment, cela va prendre quelques ressources système importantes, mais j'ai de la chance dans mon matériel fantastique et j'ai un nombre limité d'utilisateurs. D'un point de vue logique, il semble que ce que je suis doit avoir été fait auparavant, mais je ne peux pas trouver d'exemple sur le net. . . pourrait juste être en train de taper les mauvais mots cependant. Des idées? Exemples? Tutoriels, plugins ou liens que je peux suivre?

Merci d'avance! J'apprécie beaucoup!

Répondre

0

Je ne connais aucun plugin ou gemme existant pour gérer cela pour vous. Mais vous pouvez trouver beaucoup de contenu caché expirant lorsque vous enregistrez des modèles, et au pire, vous pourriez avoir un hook supplémentaire dans votre after_save qui (une fois le contenu mis en cache expiré) frappe l'URL qui génèrerait ce cache en interne.

pseudo-code:

clear_cache 
# get the page (in which the page is cached) 
open("http://localhost/controller_name/#{id}").read 

Je ne dis pas que ce la façon de le faire, mais il serait au moins travailler sur le plan technique.

Questions connexes