can we cache this? one per request? probably attaching it to `_page` object the first time it is used?