2010-05-28 6 views
0

Je suis actuellement en train de développer un grand site qui gère les inscriptions d'utilisateurs. Un site de réseautage social pour l'amour de l'argument. Cependant, j'ai remarqué un retard dans le chargement des pages et j'ai décrypté que c'est la création d'objets sur les pages qui ralentit les choses. Par exemple, j'ai un objet membre qui, lorsqu'il est instancié avec un ID transmis en tant que paramètre de construction, interroge la base de données pour la ligne de ces membres dans la table de base de données des membres. Pas mal, mais cela est créé chaque fois qu'une page est chargée; et appelé plus d'une fois, par exemple, en appelant un tableau des amis de ces membres, lorsqu'un nouvel objet Membre est créé pour chaque ami.Meilleure méthode pour mettre en cache des objets dans PHP?

Donc, sur une seule page, je peux avoir plus de sept du même objet, mais avec des propriétés différentes.

Ce que je veux faire est de trouver un moyen de réduire la charge de la base de données, et d'autoriser la persistance des objets entre les chargements de pages. Par exemple, l'objet de l'utilisateur connecté doit être créé lors de la connexion (ce que je peux faire), mais stocké quelque part pour la récupération, donc je n'ai pas besoin de continuer à recréer l'objet entre les chargements de pages.

Quelle est la meilleure solution pour cela? J'ai regardé Memcache, mais comme il s'agit d'un module tiers, je ne peux pas faire installer l'hôte Web à cette occasion. Quelles sont mes alternatives et/ou les meilleures pratiques dans mon cas?

Merci d'avance.

+1

duplication possible de [mise en cache des objets PHP] (http://stackoverflow.com/questions/126917/php-object-caching) –

Répondre

1

Je crois qu'il est généralement préférable de mettre en cache les données reçues de la base de données, pas l'objet PHP lui-même. De toute façon, APC, Memcache ou XCache serait le moyen de le stocker.

+1

Pourquoi pas l'objet lui-même? Vous devrez à nouveau convertir le tableau de base de données en objet à chaque requête, et il devra quand même être sérialisé/non sérialisé. –

+0

En utilisant APC ou MemCache, l'objet est automatiquement sérialisé lorsqu'il est ajouté au cache et désérialisé lorsqu'il est récupéré –

0

Si votre exigence de mise en cache concerne tout l'objet utilisateur/membre, le mieux est de le mettre en cache dans la session de l'utilisateur. Puisque vous n'avez pas besoin de l'objet lorsque l'utilisateur est hors ligne; la déconnexion ou le délai d'expiration de la session effectuera toutes les tâches de collecte des ordures. Si vous avez besoin d'encore plus de vitesse, vous pouvez utiliser une solution de mise en cache (APC, Memcache, etc.) pour votre backend de stockage de session.

Si vous utilisez un ORM, vous pouvez mettre en cache directement l'objet ORM, de cette manière vous n'avez même pas besoin de le relancer à des fins de mise à jour du profil.

+0

Merci pour votre réponse. Cependant, étant donné que cette question a trois ans maintenant, j'ai depuis déménagé et ne travaille plus sur le projet;) –

+0

De rien Martin! J'ai deviné que vous aviez évolué, mais je voulais écrire ma réponse pour les autres personnes venant des moteurs de recherche ;-) – Lashae

Questions connexes