알고리즘공부를 하다가 효율성 문제에 부딪힐 때가 많아서 JavaScript의 성능을 개선하기 위해서 필요한 습관에 대해 찾아보았다.
var arr = new Array(); 보다 var arr = [];
를 사용해야 한다.
arr.push(i) 보다 arr[i] = value
를 사용해야 한다.
var obj = new Object(); 보다 var obj = {};
를 사용해야 한다.
obj['a'] = 1 보다 obj.a = 1;
를 사용해야 한다.
var str = new String('aaa'); 보다 var str = 'aaa';
를 사용해야 한다.
loop 문에서 문자열 조작시에
str += 'test'; 보다 arr = []; loop { arr[i] = 'test'; } arr.join(''');
을 사용해야 한다. (String과 StringBuffer 개념과 유사)
loop 문 안에 정규표현식 넣지 말고 밖에 놓아 한번만 컴파일 처리되게 해야 한다. 정규 표현식 리터럴은 스크립트를 불러올 때 컴파일되므로, 바뀔 일이 없는 패턴의 경우 리터럴을 사용하면 성능이 향상될 수 있다.
탐색 성능을 높이는 것이 본질 (자바스크립트 실행 성능 저하는 변수, 객체, 함수의 메모리상 위치 탐색 작업)
스코프 체인 구성
= 활성화 객체(Activate Object) + 전역 객체(Global Object)
실행문맥 > 스코프 체인 > 활성화 객체 (함수) > 스코프 체인 > 전역 객체의 속성 참조
함수 내부에 var LocalVariable = GlobalVariable; 식을 첨부 (전역속성 탐색을 제거)
프로토타입 체인 탐색 줄이기
new 연산자로 생성된 인스턴스 객체는 생성자의 프로토타입을 참조하게 된다.
var obj = new Object(); obj는 Object의 프로토타입 속성에 접근 할 수 있다.
자신의 객체만 접근하고 할 경우는 hasOwnProperty를 이용해야 한다..