1

검색 엔진에 대해 select-all 기능을 만드는 Google 크롬 확장 프로그램이 있지만 속도가 느립니다 (1-14 초, 250-1000 결과) 더 빠른 방법이 있습니까? 내 코드는 다음과 같습니다 :체크 박스를 만드는 가장 빠른 방법

var dropdownvalue = dropdown.options[dropdown.selectedIndex].value; 
if ((dropdownvalue == "createFullCheckboxes") || (dropdownvalue == "createNameCheckboxes")) { 
    var div_embed1 = document.getElementById('results-pane'); 

    if (div_embed1) { 
     div_embed1.innerHTML = '<form id="checkbox-form">' + div_embed1.innerHTML + '</form>'; 
    } 

    var i; 
    var x = document.getElementsByClassName('name'); 

    for (i = 0; i < x.length; i++) { 
     x[i].innerHTML = '<input id="checkbox" type="checkbox">' + x[i].innerHTML + ''; 
    } 

    checkedAll(); 
    return; 
}​ 

나는이에 for 루프를 변경 시도 : for (var i = 0, len = x.length; i < len; i++){을하지만, 단지 20ms의 차이가 있었다. CheckedAll()은 단순히 모든 확인란을 선택하는 기능입니다.

선택한 확인란을 반복하고 실제로 select-all 작업을하는 다른 부분 (표시되지 않음)은 92ms에서 훨씬 빠르며 1000 개의 결과에도 여전히 빠릅니다.

Snapshot of the timings

감사합니다 : 여기

은 크롬 개발 도구에서 싹둑이다.

+4

을 그 dom 액세스가 느리지 만 루프가 아닙니다. 루프는 dom 연산에 비해 중요하지 않습니다. 당신은 배열로 리팩터링해야 할 것입니다. 문자열을 푸시 한 다음 마지막에 결합하여 한 번의 큰 텍스트 결과를 한 번에 넣으십시오. –

+0

DOM은 생각했지만 다른 방법을 찾지 못했습니다. 설명해주십시오. 더 자세하게? 감사합니다. –

+1

당신은 각각의 루프 반복을 겪고 있습니다. 대신, 당신이 정의하고있는 넓은 영역 주위에 사각형을 그릴 수있는 것처럼 HTML을 완전히 만들 수 있다면 그것은 접근 방식입니다. 당신이 렌더링하는 방법에 따라 특정 접근법을 보여주기 위해 내가보기에 당신의 dom을 보여줘야한다. –

답변

1

나는 것 테스트 :

var x = document.getElementsByClassName('name'); 
var h = '<input class="checkbox" type="checkbox">'; 
var i = x.length; 
while(i--){ x[i].innerHTML = h + x[i].innerHTML; } 

동등한 시험은 시험보다보다 더 빨리해야한다.

것은 Duffs 장치를 사용해보십시오 : (투기 우리가 부정적인 영향을 미칠 수있는 프로토 타입 속성 마크 업 렌더링 알고하지 않는 한) 클래스로 대체 (참고 중복 ID를 피하기 위해 = ID를 제거))

function process(xi, h) { 
    xi.innerHTML = h + xi.innerHTML; 
} 
var x = document.getElementsByClassName('name'); 
var h = '<input class="checkbox" type="checkbox">'; 
var iterations = Math.floor(x.length/8); 
var leftover = x.length % 8; 
var i = 0; 

if (leftover > 0) { 
    do { 
     process(x[i++], h); 
    } while (--leftover > 0); 
} 

do { 
    process(x[i++], h); 
    process(x[i++], h); 
    process(x[i++], h); 
    process(x[i++], h); 
    process(x[i++], h); 
    process(x[i++], h); 
    process(x[i++], h); 
    process(x[i++], h); 
} while (--iterations > 0); 
+0

주석에서 언급했듯이 성능 테스트에서 언급 한 DOM 액세스와 비교하면 사소한 것입니다. –

+0

2.77 초,하지만 어쨌든 고맙습니다. –

+0

572ms, 250 결과 및 2.43, 750 결과! 고맙습니다. –

관련 문제