[JavaScript] 성능 개선

똔의 기록·2022년 8월 2일
0

JavaScript

목록 보기
14/14
post-thumbnail

알고리즘공부를 하다가 효율성 문제에 부딪힐 때가 많아서 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를 이용해야 한다..

반복문 & 조건문

for~in 문은 가급적 쓰지 말아야 한다.
  • for 문안에 Array.length 구하는 함수등을 호출하지 말고, 외부에서 var length = Array.length 를 설정해야 한다.
  • 조건절을 빠른 탐색을 위한 알고리즘을 적절히 적용해야 한다.
    (quick-sort, merge-sort, breadth first search, depth first search 등)

참고
https://goldenthumb.net/coding-style-for-performance

profile
Keep going and level up !

0개의 댓글