10
votes

Rails Page Caching et Messages Flash

Je suis à peu près sûr que je peux mettre en cache la page de la grande majorité de mon site, mais la seule chose m'empêche de le faire, c'est que mes messages flash ne montrent pas, ou ils vont au mauvais moment.

Une chose que je considère, c'est écrire le message Flash à un cookie, le lire et l'afficher via JavaScript et effacer le cookie une fois que le message a été affiché. Quelqu'un a-t-il eu un succès de le faire ou existe-t-il de meilleures méthodes?

merci.


0 commentaires

7 Réponses :


0
votes

Vous n'avez pas à cacher la page entière. Essayez Fragment Caching API


2 commentaires

Peut-être qu'il veut cacher la page entière? La mise en cache de page donne le plus grand nombre de performances.


Oui correct. Je suis déjà en train de mettre en cache au moment de contourner le problème du flash.



2
votes

Une solution serait de mettre en cache la page, mais d'inclure un extrait JavaScript qui créera une autre petite demande uniquement pour la section que vous souhaitez être dynamique. Donc, l'utilisateur téléchargera complètement la page, puis lorsque JavaScript exécute, elle réduira l'élément de page dynamique.

J'ai écrit un bref poteau de blog à ce moment-là. http://chase.ratchetsoftware.com/2008/12/Rails -Caching-dynamique-fragments /

En outre, Greg Pollack of Railsenvy a fait une critique où il se concentre sur la dynamique des données dans des pages en cache. http://raillab.newrelic.com/2009/ 02/05 / Episode-5-Advanced-Page-Caching

J'espère que cela aide,

Chase gris


3 commentaires

J'aime cette idée. On dirait que cela pourrait être le billet.


Je pense qu'il convient de noter que cela ne réalisera pas le plein bénéfice de la mise en cache de page, car le processus des rails sera toujours touché à chaque fois au lieu de ne pas le tout. Je ne peux pas penser à une meilleure solution cependant.


La mise en cache de fragments est meilleure que de servir une deuxième demande HTTP qui ne demande que des données pouvant être incluses dans la première. Cette stratégie doublerait le nombre de demandes HTTP que vous servez.



4
votes

Je traite avec le même problème et j'ai trouvé plug-in Cacheable-Flash qui fait exactement ce que KJF décrit dans la question.

Je pense que c'est une solution plus simple et plus agréable que de faire des appels Ajax excessifs.


1 commentaires

Je pense que c'est la meilleure approche pour les rails. La plupart des autres réponses à cette question suggèrent de construire votre propre, mais la gemme claquable-flash résout déjà cela et la résout bien. Merci Anton et Pivotal Labs.



-1
votes

Je n'utilise pas de rails, mais c'est comme ça que je l'ai fait en python à l'aide d'Uuids: xxx

puis dans le modèle de base que j'ai ceci: xxx < / Pré>

Je vais le briser pour la pythonie-déformée:

  1. Lorsque vous ajoutez un message Flash, vous créez un identifiant unique et stockez-le avec ce message.
  2. Avant d'afficher le message, vous vérifiez si un cookie nommé avec l'identifiant unique du message a été défini.
  3. Si ce cookie n'a pas été défini, cliquez sur le message et définissez le cookie. Expire le cookie dans une journée ou aussi bref que vous le pensez est sage.

    Maintenant, si cette page est tirée du cache, tout ira bien. À l'étape 2, le test du cookie passera parce qu'il a déjà été défini et que le message ne sera pas affiché.


0 commentaires

8
votes

Cacheable Flash Faites ceci:

dans votre contrôleur d'application: xxx

puis lisez "Flash" Cookie via JavaScript et insérez le message à l'intérieur du HTML


0 commentaires

0
votes

Une ancienne question ... mais j'ai eu autour de cela en incluant le message Flash dans ma clé de cache.

caches_action :show, cache_path: proc { |c|
  most_recent_update_time = MyClass.order('updated_at DESC').limit(1).first.try(:updated_at).to_i
  { tag: most_recent_update_time.to_s + c.flash.collect{|x| x}.join }
}


0 commentaires

0
votes

flash non obstrué met le message Flash dans la cookie et l'affiche via JavaScript. Il fournit des logiques d'affichage JS aromatisés à vanille et de bootstrap. Cela fonctionne dans les demandes normales et ajax. Il est également facile de connecter dans des cadres tels que Angularjs.


0 commentaires