Considering that when you cold launch your app, you don't know nothing about your images, the images might or not exists on S3, I don't see much options you can take here, just one: cache.
Having cached the retrieved items would make the difference. Memcache would suit if your item size is not bigger than 1M.
On the other hand, I would reduce drastically the calls to S3 (as they cost), maybe keep locally a flag to know if the image exists on S3 or not. And would directly link to CDN rather than fetch it.
You can even preload the next pages, based on where the user is. You can use a Message Queue as Beanstalkd to manage background jobs.