이거 크롬 브라우저에서 돌려보면 생각외로 빨리도는데(1초가량) 왜그런거? 그냥 for만 돌려도 18~20초는 걸리는데
Js 쌉고수만
익명(222.111)
2020-01-01 09:22
추천 0
댓글 24
다른 게시글
-
백엔드 프론트엔드 궁금한거있음 [2]익명1(221.147) | 20.01.01추천 0
-
이거 안본 사람 있으면 ㅊㅊ익명(221.161) | 20.01.01추천 0
-
자바스크립트 조팝들 한수 가르쳐 준다. [9]야이미친(27.32) | 20.01.01추천 1
-
스타트업회사 다니다 때려치고 국비교육 들으면 흑우임? [1]익명(58.148) | 20.01.01추천 0
-
시바 잠이 안온다헤르 미온..(okoil) | 20.01.01추천 0
-
혼자 코딩할때 듣기 좋은 음악 [2]익명(221.161) | 20.01.01추천 0
-
암튼 잔당~ 즐거운 새해 첫날~ [3]헤르 미온..(okoil) | 20.01.01추천 0
-
난 오늘도 일한다.. [2]헤르 미온..(okoil) | 20.01.01추천 0
-
이책 읽어도 됨? [2]익명(14.63) | 20.01.01추천 0
-
별 쓸일도 없는데 파이썬 초보 유튭 강의 결국 완강했다. [4]익명(218.238) | 20.01.01추천 0
500 밀리세컨드 = 0.5초
덧) 어 이거 신기하긴 하다 따로 for문으로 10억 돌리는것보다 저렇게 돌리면 훨 빨리 끝나긴 하네 그래도 내 컴퓨터 기준으로는 1초 이내로 끝남. 워낙 v8 엔진이 빠르긴 하니
아니 애초에 부담이 없는 코드라니까
아니10억번을 도는데?
먼소리야 0.5초마다 500번 루프돌고 그게 반복인데
뭘보고 500번이라는건지 모르겠네 500파라미터보고 말하는거임?
아아 1e9 를 잘못봤다 쏘리
근데 방금 컴에서 테스트하고 왔는데 별로 오래 안걸리는데? 콘솔에 10억 돌렸는데 390ms 밖에 안걸린다. console.time('test') for (let i = 0; i < 1000000000; i++) {} console.timeEnd('test')
let으로 두면 interval에서 하듯이 비슷함 var로 하면 달라짐
var은 let이랑 다르게 함수스코프라서 그럴수도 있다. 범위 자체가 다름.
setInterval로 해봐라 let 속도랑 비슷함
ㅇㅇ해봤는데 콘솔에 그냥 var을 쓰면 let이랑 다르게 전역으로 호이스팅되니까 전역변수를 쓰는거랑 비슷할거임. let은 for문 내에서만 쓰이게 될거고
근데 setInterval 로 하면 그 내부 콜백내로 전역변수에서 함수스코프 변수 정도로 호이스팅 범위가 줄어드니까 좀 더 빨라지는거 아닐까 추측하는데
맞네 아래랑 같이 호이스팅 범위를 콜백함수 내로 줄여주면 시간 훨씬 적게 걸린다 (() => { console.time('test') for (var i = 0; i < 1e9; i++) {} console.timeEnd('test') })()
근데 그게 어떻게 차이를 내는거지?
전역변수가 느리고 지역변수가 빠른거랑 같은 원리임. 스코프 범위가 넓을수록 접근속도가 느려
https://yuddomack.tistory.com/entry/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EB%B3%80%EC%88%98%EC%99%80-%EC%8A%A4%EC%BD%94%ED%94%84%EC%9C%A0%ED%9A%A8%EB%B2%94%EC%9C%84
여기에
요약 잘해놨네. 한번 봐두면 좋겠다
감사요! var가 접근하는데 그래 느려지는지는 몰랐네 코틀린서 단순 10억번 더해봤는데 1~2초면 되네 이것도 이렇게 빨라진줄 몰랐음
let, var 퍼포먼스 찾아보니까 원래 var가 더 빠르다네 근데 v8 엔진 최적화 때문에 달라지는듯? 정확히 알 수가 없네..
그냥 for만돌려도 20초가나온다는건 타언어에서의 코드를 말하는거임 모임
크롬 브라우저 상에서 그냥 10억 for문 돌리는거, 위 코드처럼 setInterval 콜백에서 for가 아닌
굳이 원인을 이야기 하면 아마 다른스레드에서 돌게되서 빠른거 아닐까싶음
타이머는 이벤트 큐에서 콜되니 구현체마다 다...ㄹ...
단일쓰레드 비동기io때문임