Instead of recomputing aggregates like a product's star rating on every render, store them as columns updated via after_create/after_destroy callbacks on the child model. Saves CPU on every cached-miss render, especially for complex calculations.
type
recommendation
takeawayPrefer DB-derived columns over recomputed values