취준개발자
2020-12-30 05:45:55
6
404

자바스크립트에서 setInterval과 while의 차이점이 궁금합니다.


최근 서버 응답 속도 확인 차 서버로 요청 값을 보내고 응답 값을 찍는 테스트를 진행하였습니다.

자바스크립트의 XMLHttpRequest를 이용해 간단하게 테스트를 했는데요.

한 가지 의문점이 생겨서 질문을 올리게 되었습니다.

1분 동안 setInterval로 XMLHttpRequest를 통한 응답 값을 요청했을 시 대략 2500번의 응답을 받았습니다.

그리고 똑같은 조건에서 while로 응답 값을 요청했을 시 대략 2200번의 응답을 받았습니다.

여러 번 시도했음에도 불구하고 비슷한 응답 횟수로 항상 setInterval이 빨랐습니다.

개인적으로 while이 훨씬 빠를 것이라고 판단했으나 setInterval이 빨라서 혹시 비동기식의 작동이 원인일까로 추측하여 특정 조건에서 멈추도록 수정한 후 테스트를 해보았습니다.

만약 특정 조건에서 setInterval이 clearInterval을 통해 멈추고, while보다 빠르다면 clearInterval 메소드가 동작할 시기에 하나에서 두 개 정도의 요청 값이 비동기로 인해 넘어갈 것이라고 판단했습니다.

그러나 너무 정확하게 멈추더라구요...

그래서 자바스크립트 코딩 시에 while(true)에서 break로 나오는 게 효율적인지 setInterval에서 clearInterval로 나오는 게 효율적인지 궁금했습니다.

저는 항상 속도 빠르다는 점과 동기식 코딩이 편한 점에서 while(true)를 자주 쓰는 편이었는데 제가 틀린 것이었나요?

0
  • 답변 6

  • 취준개발자
    2020-12-30 05:46:54

    아 참고로 setInterval의 시간 차는 10으로 했습니다. (0.01초)

  • 킁킁탐정
    844
    2020-12-30 08:13:08

    while를 얼마나 오래 리소스를 소비하도록 하는지에 따라 다르겠지만, 무거운 작업이라면 브라우저가 잠식당해서 다른 기능들이 모두 마비가 됩니다. 적절하게 setInterval, requestAnimationFrame... 등 여러 방법을 사용해서 공백을 두는게 좋습니다.

  • qskm
    265
    2020-12-30 08:32:50
    비동기라곤 하지만 원래 한꺼번에 너무 많은 요청을 하게 되면 전체적으로 오히려 더 느려지게 됩니다.
    while 문을 이용한 경우 한번의 실행으로 2500의 request가 한번에 요청으로 들어오게 되면서 느려질 수 밖에 없죠. 추천 드리기가 어려운 방법이네요
    해야한다면 Pool 형식으로 최대 요청 갯수를 제한하는 게 좋은 것 같습니다.
  • 도라도로떠납니다
    762
    2020-12-30 08:35:07

    https://meetup.toast.com/posts/89 참고하면 좋을거같네요

  • 욥욥욥
    947
    2020-12-30 09:40:48

    테스트툴이 아닌것 같은데 테스트 방법을 바꿔보시는건 어떤가요

    시간 설정으로 돌리지 마시고 요청횟수를 2천 limit으로 서버에서 마지막 요청까지 얼마나 걸렸는지를 확인해보세요

  • 취준개발자
    2020-12-30 16:10:42
    댓글 하나하나가 진짜 유용했습니다..ㅠㅠ
    감사합니다, 선배님들!
  • 로그인을 하시면 답변을 등록할 수 있습니다.