2010-02-01 4 views
1

Avec PHP et MySQL, je travaille sur un site de type login utilisateur. Voici mon plan jusqu'à présent. L'utilisateur se connecte avec un e-mail/mot de passe J'ai ensuite mis quelques choses en session (UserID, photoURL, userName, latitude, longitude, sexe) Ce sont les éléments de base qui seront sauvegardés en session et éventuellement APC/Memcache quand un l'utilisateur est "connecté". J'ai ma gestion de session et de gestion de cache enveloppée dans Classes de sorte qu'un objet utilisateur obtient les données sur chaque chargement de page en créant un objet de session et de cache, puis en important ces objets dans un objet utilisateur principal. Maintenant, je suis confus, je l'ai toujours fait de cette façon ou similaire, mais je sais que certaines personnes sérialisent les objets, puis les enregistrer en session ou en cache, puis récupérer l'objet au chargement de la page. Serait-il préférable de le faire de cette façon?Devrais-je créer de nouveaux objets à chaque chargement de page ou passer la page à la page en PHP?

Répondre

1

Je pense que vous n'avez pas à y penser. Je travaille en tant que développeur php dans mon entreprise où nous avons créé une page Web avec des centaines d'objets créés chaque fois qu'une page est chargée et qui sert 50 à 200 personnes à la fois et 50ms pour générer la page. Donc, si vous n'avez vraiment pas besoin de la vitesse supplémentaire obtenue par la sérialisation des objets, vous n'avez pas à vous en soucier.

+0

Je suis nouveau à l'aide d'objets, donc je vraiment don Vous ne savez rien sur les performances, alors dans votre dernière phrase dites-vous que sérialiser un objet et le passer de page en page est plus rapide? – JasonDavis

+0

Je pense juste que la sérialisation est plus rapide. mais si vous n'avez que quelques objets simples (ce qui semble être le cas), vous pouvez simplement créer vos objets à chaque fois. Comme je l'ai dit, il vaut mieux ne pas sérialiser. Sauf si vous utilisez des objets très complexes qui prennent comme 100-200ms à créer. – Gabriel

1

Je ne pense pas que la manière tout-en-session est la meilleure façon, c'est seulement une autre façon. Si vous stockez des objets sérialisés dans la session, puis désérialisez-les, cela sera certainement plus rapide, mais vous devez stocker une grande quantité de données. Personnellement, je préfère la régénération de l'objet à chaque chargement de page et j'utilise la sérialisation de la session uniquement lorsque la création de l'objet est très lente.

+0

Ok merci, je ne savais pas si elle était plus ou moins vite, je pensais sérialisation et un serais une lourde opperation – JasonDavis

1

Cela ressemble à une optimisation prématurée. Historiquement, c'était certainement une bonne idée de stocker des objets en tant qu'entités sérialisées - dès que vous appelez session_start et récupérez une session existante, le moteur devrait restaurer les objets - potentiellement avant le traitement des définitions de classe. Cependant, maintenant, la désérialisation des objets de session peut être différée. Tant que votre objet utilisateur n'est pas horriblement compliqué (cela ne semble pas être le cas), il est probable que faire autre chose que de stocker l'objet dans la session est excessif (Si votre classe d'utilisateur est très complexe, vous pourriez penser à propos de la scinder - assurez-vous que votre authentificateur et votre autorisateur sont des entités distinctes).

Notez que l'objet de session sérialise et désérialise tout son contenu de manière transparente - encore une fois vous pouvez voir un certain avantage en faisant bon usage des méthodes __sleep et __wakeup.

HTH

C.

Questions connexes