scure.js, at least the version I am using seemed to have a recursive implementation. Only nostr:nprofile1qqs8evfumcr8pevs7qkta84qlnc7qhkmchxg5syhx8a9gdjyqxqu78gpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszxthwden5te0wfjkccte9e3xcmmhv96x2u3wv9c8qtcppemhxue69uhkummn9ekx7mp0fxcf3v knows why.
nostr.ts 's original decrypt is copied from nostr-tools months ago. I remember that nostr:nprofile1qqs8evfumcr8pevs7qkta84qlnc7qhkmchxg5syhx8a9gdjyqxqu78gpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszxthwden5te0wfjkccte9e3xcmmhv96x2u3wv9c8qtcppemhxue69uhkummn9ekx7mp0fxcf3v has released new versions since then but I never bothered to update. Maybe it's now faster.
I am not sure if Alby uses the exact nostr-tools decrypt or not.