-
Notifications
You must be signed in to change notification settings - Fork 5
Description
Dans le Model de base, nous avons un problème de performances sur la méthode get_fields.
En effet on va chercher autant de fois la totalité des champs ACF pour chaque nouvel objet instancié et qui fait un get_field.
Si nous avons 5 objets du même CPT sur la page avec get_meta, ils feront tous appel 1 fois à get_fields appelant acf_get_field_groups et acf_get_fields, ce qui nous fera 5 appels à toutes ces méthodes.
Clairement ces opérations ne sont pas nécessaires, une fois les fields du CPT récupérés ils ne changeront pas dans le runtime.
Plusieurs approches possibles :
- Stocker en static tous les champs, avec un index par CPT
Rapide et efficace, pas de dépendance supplémentaire
- Avoir une classe dédiée à part, elle se charge de gérer le cache à l'endroit qui lui plait, cache objet, static dans la classe etc.
On pourrait l'utiliser à d'autres endroits pour le model user aussi par exemple
Après tests de mon côté, sur une page avec 405 appels à get_fields, on peut gagner 230ms et 1.76 MB de RAM sur une seule requête.