web-dev-qa-db-fra.com

Désactiver les recharges fréquentes du visiteur

Sur mon site Web, j'ai quelques pages qui établissent des connexions avec 3 ou 4 sites, vérifient les résultats avec ma base de données et rassemblent un tableau complet. Ce tableau comprend toutes les données dont le visiteur aurait besoin.

Vous pouvez le penser comme un tableau des scores des 100 derniers matchs de basket, football et match de vallée. Les utilisateurs voient qui a gagné, le dernier score, l'emplacement du jeu, les données de paris, etc.

Les sources de données changent toutes les 15 minutes environ. Par conséquent, si l'utilisateur recharge la page au cours de cette période, il verra presque la même table après avoir consommé beaucoup de temps processeur et interrogé la base de données. (Il existe de petites différences)

Je ne sauvegarde pas les données de la table dans mon stockage Web, car les données ne sont plus valides au bout d'une heure.

Mon souci est, si le visiteur recharge la page, ce processus sera répété. Comment puis-je faire résoudre ce problème?

Premières idées qui me viennent à l'esprit:

  • Enregistrement des données de la page dans le stockage local du navigateur. Stocker la date du dernier accès de la page dans un cookie. Et lorsque la page est rechargée, vérifiez le décalage horaire. S'il est inférieur à 15 minutes, récupérez les données du stockage local et affichez la même page. Mais dans ce scénario. Je serai limité à une limite de stockage de 5 Mo et à la compatibilité du navigateur.
  • Enregistrement des données de page dans ma base de données et affichage à partir de là. Le problème, c’est que les données représentent près de 200 entrées par page. Quand j'utilise ce modèle en 50 pages, j'aurai trop de tableaux et de données, où les données seront invalides dans une heure.
  • Enregistrement des données de la page dans mon stockage Web. C’est une meilleure option au début. Mais n'est pas évolutif. Lorsque le nombre de visiteurs devient important, cela ne sera pas maintenable.

Je serais heureux si vous pouviez partager des idées ou de meilleures pratiques. Je vous remercie

3
trante

La première chose à laquelle je pensais, c’est que si quelques rechargements posent un problème, vous faites certainement quelque chose qui ne va pas quelque part. Vous ne devriez jamais établir de connexions avec d'autres sites à chaque chargement de page, car cela nuit à l'expérience utilisateur, indépendamment des rechargements. De plus, vous êtes à la merci d’autres sites toujours opérationnels et qui renvoient des données valides.

Votre meilleur pari est presque certainement de mettre en cache les données, à plusieurs niveaux. Si les données des sites externes changent toutes les 15 minutes, exécutez un travail cron distinct pour extraire ces données et les stocker sur vos serveurs (par exemple, si vous extrayez un fichier XML, stockez-le). Cela accélérera énormément le traitement des données à chaque chargement des pages.

Deuxièmement, vérifiez si vous pouvez mettre en cache les résultats du traitement des données, c'est-à-dire le tableau que vous avez généré. Si la sortie est la même pour tous les utilisateurs, c'est simple. Si chaque utilisateur a un paramètre différent, etc., cela prendra beaucoup plus de place, mais vous pouvez au moins faire quelque chose.

En ce qui concerne vos idées:

  1. Le stockage local pas a effectivement une limite, mais le navigateur Invitera les utilisateurs si vous essayez de stocker plus de 5 Mo. Mais je doute fort que vous soyez près de ce montant de toute façon.
  2. 200 entrées fois 50 pages ne sont rien en matière de bases de données: elles sont conçues pour stocker des millions d’entrées par table. Cela signifie cependant qu'il faut exécuter beaucoup de requêtes de mise à jour toutes les 15 minutes.
  3. Oui, cela pourrait prendre beaucoup de place, mais le stockage est bon marché. Si vous avez besoin d'une solution rapide, faites-le maintenant et continuez à chercher des options. Il est souvent inutile d’être totalement évolutif jusqu’à ce que vous ayez réellement besoin de l’échelle.
1
DisgruntledGoat