Alas, it's unfortunate that it's unlikely I can make it faster, but it's nice to have confirmation that this is a limit. I guess the only way forward is to either have a loading indicator, or to chunk the transaction into smaller bits and have a requestAnimationFrame transact a bit at a time to unblock the UI.