반응형
Javascript 성능을 저하시키는 부분에 대한 좋은 글이 있어서
공부해보고 정리해 보았다.
=> 원본
https://m.blog.naver.com/tmondev/221070295102
1. 전역 변수 및 Element를 캐싱
=> 자바스크립트의 전역 변수는 스코프 체인의 마지막에 오게 되므로, 전역 변수 내의 태그 탐색 등의 일을 하게되기 때문에 n*2의 비용이 발생
=> 어떤 값을 찾을 때까지 스코프 체인 끝까지 뒤지기 때문에 성능에 문제가 발생할 수 있다는 뜻으로 해석됨.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | /* 사례 1. document라는 javascript 전역 객체에 지속적으로 접근하기 때문에 해당 객체의 스코프 체인을 실행시키기 때문에 문제가 발생하므로 doc 지역변수에 캐싱하여 사용 */ # 문제상황 function problemFunction() { var data = document.getElementById('data'); var data2 = document.getElementById('data2'); var data3 = document.createElement('data3'); }; # 해결방법 function solutionFunction() { var doc = window.document; var data = doc.getElementById('data'); var data2 = doc.getElementById('data2'); var data3 = doc.createElement('data3'); }; /* 사례 2. jQuery를 사용할 때에도 변수를 이용하는 방식이 더 효율적 */ # 문제상황 function problemFunction() { $(“#dataId”).val(“cjung”); $(“#dataId”).css(“display”, “NONE”); $(“#dataId”).attr(“checked”, true); }; # 해결방법 function solutionFunction() { var data = $('#dataId'); data.val(“cjung”); data.css(“display”, “NONE”); data.attr(“checked”, true); }; /* 사례 3. append child 할때도 다음과 같이 하는 것이 효율적 */ # 문제상황 function problemFunction() { var data = document.createElement("data"); opt.text = 'data is fun'; $('#dataDiv').appendChild(opt); }; # 해결방법 function solutionFunction() { var dataDiv = $('#dataDiv'); dataDiv.append('<span>fdfdf</span>'); }; | cs |
2. javascript 문자열 조합 방식 성능 (concat, join)
1 2 3 4 5 6 7 8 9 10 | function concatTest() { var str = "concat" + "is" + "goog"; } function arrayTest() { var strArray = ["array", "is", "not good"]; var str = strArray.join(''); } // concat 보다 array join이 성능이 더 좋다고 알려졌으나 요새는 concat이 성능이 더 좋다. | cs |
3. innerHTML과 appendChild
=> appendChilde는 element 개수만큼 매번 새로 할당하는 방식이고, innerHTML은 노드를 직렬화하여 개수만큼 만들어 한번만 할당하므로 innerHTML이 더 좋다.
-> 다만 이 두개의 차이는 만건 이상의 element를 새로 생성할 정도의 규모에서 차이가 발생한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | function innerHTMLFunc() { var doc = document; var data = doc.getElementById('dd'); data.innerHTML = "<span>" + 'dfdf' + </span>; } function innerHTMLFunc() { var doc = document; var data = doc.getElementById('dd'); var span = doc.createElement('span'); span.innerText = 'dfdf'; data.appendChild(span); } | cs |
반응형
'web > javaScript' 카테고리의 다른 글
div내에 overflow scroll 옵션에 따라 스크롤 생성 시 제일 밑으로 스크롤 내리기 (0) | 2018.06.17 |
---|---|
javascript로 여러 파일 다운로드 하기 (0) | 2018.05.27 |
var와 let 그리고 const 차이점과 사용법 소개 (0) | 2018.05.27 |
Javascript 처리과정 (0) | 2018.05.27 |
javascript 기타 팁 (0) | 2018.05.27 |