유명함수 recur를 이용하는 것이 성능상 이점이 있는 이유에 대해서 좀 더 자세한 설명을 듣고 싶습니다.
450
작성한 질문수 52
reduce 함수를 아래와 같이 수정하고 go함수를 실행시킬 경우 acc를 acc = acc instanceof Promise ? acc.then(acc => f(acc, a)):f(acc, a);로 작성한 구현보다 성능상 이점이 있다고 하셨는데 어떤 점에서 그런지 좀 더 자세히 설명해주실 수 있을까요? 특히 콜스택과 관련해서 어떤 차이가 있는지 잘 이해가 안 되네요. Promise에서 then은 매번 새로운 콜스택을 사용하면서 추가적인 로드가 발생하는 것인가요? 재귀함수를 호출하면서 생기는 약간의 추가 로드도 있을 것 같은데, then에서의 콜스택 사용과 비교했을 때에 성능상 이점이 크기 때문에 이렇게 구현해서 사용하는 것인가요? go, pipe, reduce에서 비동기제어편 약 5분 45초 이후에 설명된 부분입니다.
const reduce = curry((f, acc, iter) => {
if (!iter) {
iter = acc[Symbol.iterator]();
acc = iter.next().value;
} else {
iter = iter[Symbol.iterator]();
}
return (function recur() {
let cur;
while (!(cur = iter.next()).done) {
const a = cur.value;
acc = f(acc, a);
if (acc instanceof Promise) {
return acc.then(recur);
}
}
return acc;
})(acc);
});
go(
1,
(a) => a + 10,
(a) => Promise.resolve(a + 100),
(a) => a + 1000,
console.log
);
답변 4
2
for문 만으로 처리하면 모든 함수 마다 promise에 감싸져서 매번 비동기가 일어납니다.
반면에 후자의 기법을 쓰면 f 가 연속으로 동기인 상황에서는 같은 콜스택에서 반복문안에서 실행되고 비동기가 매번 일어나지 않기 때문에 효율적입니다.
(매번 recur 가 실행되는 것이 아닌 비동기가 있을때만 실행되고 그때만 promise를 만들게 됩니다.)
감사합니다 :)
1
안녕하세요. 답글과 코드들을 보면서 생각을 해 봤습니다.
유명함수를 사용하기 이전 코드에서는 프로미스 체인이 유지되면서 이벤트 루프가 비동기 큐에 계속해서 머무르면서 성능저하가 일어나기 때문에 유명함수를 사용하여 `비동기 처리가 필요한 시점`에서만 비동기 처리를 하는 것으로 이해를 했는데 설명하신 의도와 맞는 방향일까요??
0
저도 이 부분에 대해서 질문이 있는데요...
Promise 에 감싸져서 매번 비동기가 일어난다고 하셨잖아요. 그런데 Promise는 단지 비동기상황을 컨트롤 하기위한 객체아닌가요?? 비동기적인 상황은 Promise(({.... 비동기 상황}) 이렇게 Promise 안에있는 코드가 비동기적인 상황을 만드는거 아닌가요??
잘 기억은 않나지만..
return new Promise(function (resolve, reject) {
$.ajax(....)
})
이런 방식으로 사용되는 코드를 봐서요..
답변 해주시면 감사하겠습니다.
프론트엔드 실무에서 어떤때에 쓰이는지 궁금합니다
1
111
1
함수형 프로그래밍 심화 강의 자료 추천
0
72
2
함수형 자바스크립트 프로그래밍 책
0
52
1
filter가 아무것도 걸러내지 못하는 경우
0
112
1
take 함수의 성능적면에서의 이점
1
463
1
pipe함수
1
530
1
Identity 함수
0
450
1
함수형 프로그래밍이란
0
831
1
reduce 예제 코드 제안!
0
403
1
fxts를 배워보려고 합니다.
1
537
1
flatMap 관련 질문드립니다~
1
444
1
다용성이 높은 L.flatMap
0
357
1
변수에 재 할당 금지~
0
540
1
DevTools라고 옆에 결과 확인하는거 어떻게 하나요?
0
482
2
소요시간에 관해서 질문드립니다
1
457
1
join에 대한 내용이 궁금증이 해결되지 않아서 질문드립니다!
0
465
2
reduce에 L.range를 사용할 때
0
526
2
[이해내용 공유] Lazy 에서 C.reduce가 병렬 효과를 내는 이유
3
738
2
제가 이해한 C.Reduce와 Reduce의 동작 차이 정리
2
787
3
go, pipe 함수 관련하여 질문 드립니다.
1
498
1
안녕하세요 강사님!
0
378
2
fxts에 go가 없는 이유?
0
838
1
비동기 관련 질문입니다!
0
458
1
질문 있습니다.
0
514
1






