Skip to content

MODEL - Problème de performance #37

@Rahe

Description

@Rahe

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 :

  1. Stocker en static tous les champs, avec un index par CPT

Rapide et efficace, pas de dépendance supplémentaire

  1. 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.

Metadata

Metadata

Assignees

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions