12. 벤치마킹과 튜닝

주요내용

벤치마킹(성능테스트)와 테스트 시나리오에 대한 간략한 내용이 대부분 그러면서 소개하는 Beanchmark.js jsPerf.com 사이트

테스트를 하는 항목외 부수효과가 발갱하는 부분을 잘 생각하고 설정해서 테스트를 해야한다 가 큰 맥락

테스트는 의도가 분명해야한다.. 당연한소리

Benchmark.js

벤치마킹 도구..? 테스트를 하도록 해주는 js 인듯 참고 : https://benchmarkjs.com/

  // 공식사이트 샘플 예제
  var suite = new Benchmark.Suite;

  // add tests
  suite.add('RegExp#test', function() {
    /o/.test('Hello World!');
  })
  .add('String#indexOf', function() {
    'Hello World!'.indexOf('o') > -1;
  })
  .add('String#match', function() {
    !!'Hello World!'.match(/o/);
  })
  // add listeners
  .on('cycle', function(event) {
    console.log(String(event.target));
  })
  .on('complete', function() {
    console.log('Fastest is ' + this.filter('fastest').map('name'));
  })
  // run async
  .run({ 'async': true });

jsPerf.com

다양한 환경에서 테스트를 할 수 있는 사이트라는데...?? 필요하면 사용하자 ㅋㅋ.. https://jsperf.com/

미세성능

성능에 지나친집착은 금물. 사소한 코드 하나하나에 집착하지 말것.. 부질없다

--i가 i++ 보다 빠르다는 사실은 일반적인 내용이긴하나. 자바스크립트의 엔진이 언제든지 i++를 ++i로 바꿀수 있는 상황은 존재하기때문에 무의미한 성능테스트라는데..

똑같은 엔진은 없다

브라우저마다 코드처리방식이 제각각. ES6 '꼬리호출 최적화'를 제외하면 자바스크립트 명세가 명시한 성능요건 같은건 없다.

v8 작동 원리를 최대한 활용한 코딩방식

  • 함수간에 arguments변수를 전달하지 말라. 누수때문에 함수 구현체가 느려짐.

  • try~catch 구문은 함수에서 떼어내라(분리). 브라우저가 try~catch 구문이 포함된 함수를 최적화하려고 해서 주변코드 반최적화됨?

문자열 join(), + 이야기 IE 쓰레기

꼬리호출 최적화(TCO)

스택프레임이 생성하냐 안하냐가 관건 진짜 꼬리호출일 때만 효과 ES6가 보증하는 기능이니 마음껏 써도 무방함! 일부 재귀패턴 구현 (func 기반)

Last updated

Was this helpful?