Rappelez-vous l'état de l'objet en PHP entre les requêtes
-
19-09-2019 - |
Question
Je suis en train d'écrire une application et je vais avoir quelques valeurs du dictionnaire dans de nombreuses langues différentes. Je sais que je pourrais utiliser GetText, mais les fichiers AFAIR doivent être compilés après l'édition, et je veux laisser le dictionnaire d'utilisateur de modifier, et je ne peux pas recompiler .mo fichiers sur le serveur. Je ne sais pas combien de langues seront utilisées, de sorte que la solution doit être élastique.
J'ai conçu la base de données il fonctionne bien, et le schéma semble bien, mais pour chaque valeur dictionnaire il y a quelques jointures, de sorte que la solution ne soit pas trop rapide.
Pour cette raison, je pense à stocker des valeurs de dictionnaire une fois, et vous rafraîchir seulement après la modification d'une valeur en elle. Malheureusement, les variables statiques PHP ne pouvaient pas être utilisés, car ils meurent à la fin de la demande. Je ne veux pas utiliser session, parce que je vais devoir faire DB appels par utilisateur. Idéalement, je voudrais utiliser des variables statiques comme dans Java -. Ils vivent aussi longtemps que l'application en direct dans JVM
Quelle est la meilleure solution pour stocker certaines variables (dans mon exemple - dictionnaires, entrées de dictionnaire, etc.) pendant une longue période (et non par demande) pour tous les utilisateurs (et non par l'utilisateur)?
Je pense à faire quelque chose comme classe DictionaryValues
, sérialiser une fois, et deserialize alors chaque demande. Chaque fois que quelqu'un va modifier le dictionnaire, l'objet sera de nouveau sérialisé et remplacer l'ancien objet sérialisé. Bien sûr, l'édition se produira rarement par rapport à la fréquence des valeurs dictionnaire sera lu.
Est-ce une bonne solution? Dois-je sérialiser l'objet et le stocker sur le disque ou écrire à la base de données? Lequel est plus rapide?
Peut-être vous trouver une meilleure solution pour ce problème?
Autres conseils
Quelques options si memcache / APC est trop ou pas possible:
Vous pouvez « compiler » vos valeurs de base de données fréquemment dans un fichier PHP et inclure cela. Ce serait le plus rapide et le traitement parsing- sage.
Si vous n'avez pas besoin chaque valeur dans le dictionnaire chaque page (très probable, est-ce pas?), Vous pouvez utiliser une table de mise en cache qui peut fonctionner sans JOIN. Ce serait la meilleure solution du point de vue de l'empreinte.
Il y a deux options:
- Vous pouvez utiliser la mémoire partagée ( shmop ou memcache ).
- Vous pourriez mettre en cache dans un fichier ou base de données - essayez PEAR :: Cache_Lite (ou < a href = "http://php.net/apc" rel = "nofollow noreferrer"> APC comme @jldupont suggère)