Move page generation into background worker process