Does this really need to be calculated every page turn?  Couldn't it be cached and only recalculated when the current component changed?