Видел этот репозиторий, но здесь скорее показывают, какие подходы бывают. У меня ведь код все-таки полностью исполняется, вряд ли execute() спасет ситуацию.
А пока нагуглил cpusampler, вынес самые долгие функции из JS'a в котлин, стало несравнимо быстрее (TraceCompilation показывал, что эти функции компилируются, так что не знаю, что еще можно было сделать для грааля, чтобы в жсе оно работало быстро). Ну и проблему с while (await promise) решаю тем, что переписываю все на promise per batch, а не promise per element: посмотрю, спасет ли (но почти уверен, что да)