본문 바로가기

코드 기록

Javascript 반복문 성능

728x90

INDEX

    Preview

    저번 프로그래밍 문제 포스팅(https://sieon-dev.tistory.com/120)에서 봤듯이 Javascript 에서 사용하는 여러 반복문이 각각 성능이 다르다는 걸 알 수 있었습니다.

     

    JS에는 for, forEach, map, reduce, while, do while, for in, for of 등 다양하게 반복문을 구현할 수 있는데 이번 글에서는 

    간단하게 for 과 while 문의 실행시간을 비교해보려고 합니다.

     

     

    Methodology

    function for_test() {
        let sum = 0;
    
        for (let i = 0; i <= 100000000; i++) {
            sum += i;
        }
        return;
    }
    function while_test() {
        let sum =0;
        let i=0;
        while(i<100000000){
            sum+=i;
            i++
        }
        return;
    }
      
      let start = performance.now();  // 시작
      while_test();
      let end = performance.now();  // 종료
      console.log("for test : ", end - start); // 경과시간(밀리초)
    
      
      start = performance.now();  // 시작
      for_test();
      end = performance.now();  // 종료
      console.log("while test : ", end - start); // 경과시간(밀리초)

    간단하게 1부터 1억까지의 합을 구하는 함수의 실행시간을 비교해 봤는데

    for test :  109.9753999710083
    while test :  113.45970010757446
    ---------------------

    for test :  111.72530007362366
    while test :  118.72339987754822
    ----------------------

    for test :  109.90000009536743
    while test :  115.75189995765686

    3차례 정도 돌려봤을 때 정말로 for 문의 실행시간이 while 문보다 빨랐습니다.

    원인으로는 while 문은 iterator 를 실행 후 조건 검사를 한번 더 하기 때문이라고 합니다.

     

    번외로 요즘 공부를 시작한 golang에서는 실행 속도가 얼마나 되는지 궁금해 돌려봤는데 역시나 

    45.3525 ms로 2~3배 정도 가량 빠르더군요..ㅎㅎ

    //golang code
    package main
    
    import (
    	"fmt"
    	"time"
    )
    
    func main() {
    	start := time.Now()
    	sum := 0
    	for i := 0; i < 100000000; i++ {
    		sum += i
    	}
    	end := time.Since(start)
    	fmt.Println(end)
    }