프론트엔드/Tips

자바스크립트 for while 퍼포먼스 비교

Marshall K 2019. 6. 8. 22:41

앞서 포스팅했던 자바스크립트 퀵소트에서 for이 while보다 퍼포먼스가 좋다고 기술했는데, 잘못된 정보를 알려 드린 것 같아 정정하고자 글을 작성합니다.


앞선 포스팅에선, 한번에 for while 둘 다 실행되도록 하고 시간을 측정했습니다.

나중에 다시 확인해보니, for이건 while이건 먼저 하나가 실행되면 그다음 건 빨리 실행되더라고요.


전 그 테스트에서 while을 계속 먼저 실행하고 for을 그다음에 실행해서 for이 더 빨리 실행되는 것처럼 보였던 것입니다.


console.time("while"),
(function() {
let i = 0;
while(i < 100000) {i++}
})(),
console.timeEnd("while")

console.time("for"),
(function() {
let i = 0;
for(;i < 100000;) {i++}
})(),
console.timeEnd("for")


다른 요인은 배제하고 순수하게 퍼포먼스를 비교하고 싶어서, 두 개를 최대한 비슷한 모양으로 만들고 테스트를 진행했습니다.


결과


for

for: 1.226806640625ms

for: 1.133056640625ms

for: 1.120849609375ms

for: 1.0859375ms

for: 1.088134765625ms

for: 1.130859375ms

for: 1.15283203125ms

for: 1.098876953125ms

for: 1.072998046875ms

for: 1.114990234375ms

for: 1.10498046875ms

for: 1.111083984375ms

for: 1.115966796875ms

for: 1.0810546875ms

for: 1.117919921875ms

for: 1.1142578125ms

for: 1.10400390625ms

for: 1.109130859375ms

for: 1.091796875ms

for: 1.094970703125ms


while

while: 1.135009765625ms

while: 1.0791015625ms

while: 1.0830078125ms

while: 1.286865234375ms

while: 1.094970703125ms

while: 1.080810546875ms

while: 1.09814453125ms

while: 1.089111328125ms

while: 1.10693359375ms

while: 1.0849609375ms

while: 1.10205078125ms

while: 1.124755859375ms

while: 1.084716796875ms

while: 1.0888671875ms

while: 1.072021484375ms

while: 1.089111328125ms

while: 1.084228515625ms

while: 1.10498046875ms

while: 1.084228515625ms

while: 1.1162109375ms


결과가 하나 나올 때마다 리프레시하며 확인한 결과입니다. 그렇게 눈에 띄는 차이를 보여주진 못했습니다.



100000 대신 10000000000으로 테스트해봤습니다.


for

for: 8827.246826171875ms

for: 8834.508056640625ms

for: 8843.69580078125ms

for: 8828.421875ms

for: 8823.5791015625ms


while

while: 8801.22509765625ms

while: 8832.86376953125ms

while: 8826.122802734375ms

while: 8814.134765625ms

while: 8813.14990234375ms



후에 몇 번 더 테스트를 해봤지만 for은 8,810대도 나오지 않았습니다.

루프가 저만큼 돌 일도 많진 않고, 그렇게 극적인 차이를 보이지도 않으니 그냥 코드 작성할 때 편한 방법을 선택하면 되지 않을까 싶습니다.