I have a similar Suitelet for expense approvals. Users were complaining about how long it took to approve a large number of expenses. What I did was have the Client Script fire off a Map/Reduce script that handles all of the approvals. In order to make it a fast user experience, I add the transaction numbers to a cache before I fire off the Map/Reduce job. Then, I fire the job and redirect the user back to Suitelet. The Suitelet then excludes any transaction numbers in the cache. The cache expires after 15 mins or so, so if for some reason some of the transactions didn’t succeed approving, they would then show back up on the Suitelet.