Promise 사용했음에도 프레임드랍이 발생하는걸 보면 스레드 부하가 심한 연산이라고 생각이 들긴 하는데요,
코드를 보니 resolve 내에서 함수를 실행하고 계신 것 같습니다.
resolve는 Promise를 종료시키고 then으로 값을 전달받을 수 있게 fulfilled 상태로 전환시키기 때문에 코드를 변경해볼 필요가 있을 것 같아요.
return new Promise((resolve, reject) => {
const result = 문제의함수();
resolve(result);
});
위 처럼 함수를 실행시키고 나서 결과만 리턴되도록 수행 방식을 바꿔보세요. 이렇게 해도 안된다면 web worker 사용하는 형태로 변경해야 할 것 같습니다.