The inner loop is virtually always over one element (and can't be over more than a couple), so worrying about that feels like over-optimization. The idea here is to leverage an existing cache feed to avoid expensive redundant proxy queries, & we don't have control of the proxy feed format.

That said, I'm pretty sure we'll need to do some tweaking of the cache-and-permissions combo here to get zippier performance on the image downloads, maybe by pre-populating image-plus-instructor specific cache keys when building the roster feed.