2011-01-05 2 views
12

업데이트는 jQuery를 템플릿 성능을 향상

은 분명히, jQuery를 템플릿을 컴파일 할 수 있으며이 here을 보여 문 경우와 템플릿의 성능을하는 데 도움이됩니다.

그러나 표시된대로 here, 내 템플릿에는 논리 블록이 없으므로 미리 컴파일 된 jQuery 템플릿은 제 경우에는별로 도움이되지 않습니다.

다른 템플릿 엔진의 사용을 제안하는 사람들에게는 jQuery 템플릿 만 사용하는 것이 좋습니다. 팀의 모든 사람이 jQuery를 알고 있기 때문입니다. 몇 가지 템플릿 엔진을 비교하는 this 테스트 케이스도 있습니다.


안녕

,

그냥 오늘은 내가 jQuery를 템플릿을 사용하여 성능 문제가 있다는 것을 들었다.

비교하려면 jQuery 템플릿과 좋은 이전 문자열 append 메서드를 사용하여 테이블에 행을 추가했습니다. 결과는 here으로 볼 수 있습니다. jQuery 템플릿을 사용하면 문자열 추가 메서드와 비교할 때 약 65 % 느려집니다.

jQuery 템플릿 스크립트의 성능을 향상시키기 위해 수행 할 수있는 작업이 궁금합니다.

전체 스크립트는 제공된 링크에서 볼 수 있습니다. 그러나 기본 개념은 다음과 같다 :

템플릿 :

<script type="x-jquery-tmpl" id="tmplRow"> 
<tr> 
    <td><input type="checkbox" value="${id}" /></td> 
    <td>${firstName} ${lastName}</td> 
    <td class="edit"> 
     <a>Edit</a> 
     <input style="display:none;" type="hidden" value="Blah" /> 
     <input class="cancel" type="button" value="cancel" /> 
    </td> 
    <td class="select"> 
     <a>Select</a> 
     <select style="display:none;"> 
      <option>0</option> 
      <option>1</option> 
      <option>2</option> 
      <option>3</option> 
      <option>4</option> 
      <option>5</option> 
      <option>6</option> 
      <option>7</option> 
      <option>8</option> 
      <option>9</option> 
      <option>10</option> 
     </select> 
     <input class="cancel" type="button" value="cancel" /> 
    </td> 
    <td>More string</td> 
    <td>More string</td> 
    <td>More string</td> 
    <td>More string</td> 
    <td>More string</td> 
    <td>More string</td> 
</tr> 
</script> 

데이터 :

<script type="text/javascript"> 
    var data = []; 

    for (var i = 0; i < 100; i++) { 
     var row = { 
      id: i, 
      firstName: 'john', 
      lastName: 'doe' 
     }; 

     data.push(row); 
    } 
</script> 

HTML :

<table id="table"></table> 

가 실행 :

<script type="text/javascript"> 
$('#tmplRow').tmpl(data).appendTo('#table'); 
</script> 
,451,515,

감사합니다,

답변

0

당신의 템플릿은 정말 간단합니다, 당신은 템플릿을 미리 컴파일 할 수있는 옵션이있는 템플릿 언어이다 take a look at handlebars.js 할 수 있습니다.

레일과 jquery 코어 멤버 Yehuda Katz가 만듭니다. http://documentcloud.github.com/underscore/

당신은 현재 사용할 수있는 모든 다른 템플릿 프레임 워크를 비교 여기 벤치마킹 테스트 스위트를 찾을 수 있습니다 : https://github.com/aefxx/jQote2 [다운로드 및 jqote.benchmark.htm 실행]

+0

나는 핸들을 확인하기 위해 상관하지 않습니다. 그러나 다운로드가 작동하지 않습니다. 소스에서 "handlebars.js"만 참조하면 정의되지 않은 "required"메소드가 실패합니다. js 파일 복사본이 있습니까? –

+0

jquery templates가 템플릿을 '컴파일'합니다 ... – user406905

+0

템플릿을 컴파일하는 것만으로도 논리 제어 블록이있는 경우에만 도움이됩니다. 자세한 내용은 업데이트 된 질문을 확인하십시오. –

4

이 가장 빠른 지금 동력이 될 것으로 보인다.

필자는 jQuery 템플릿이 초기 단계에 있으며 성능이 후속 반복에서 개선 될 것이라고 생각합니다.

+0

이것이 가장 가까운 대답이라고 생각합니다. 기본적으로 jQuery 템플릿이 성능을 향상시킬 때까지 기다립니다. 당분간, 나는 그것에 의존하지 않으려 고 노력할 것입니다. –

+0

그리고 살인자 속도를 얻으려면 밑줄을 사용하십시오. 네이티브 javascript에 더 가깝습니다. 물론, jQuery 템플릿을 약간 변경하거나 변경해야합니다 (루프/조건부 논리 및 기타 복잡한 요소를 사용하는 경우 더 많음). 좋은 점은 정교한 문서가 부족함에도 불구하고 모든 것을 관리 할 수 ​​있으며 경우에 따라 jQuery보다 쉽게 ​​관리 할 수 ​​있다는 것입니다. – Mrchief

1

렌더링을 수행하는 브라우저에 따라 크게 달라집니다.IE6는 상당히 느릴 수 있습니다 (HTML 마크 업 1,000 행을 전송하여 문서에 삽입하는 것이 빠를 수는 없지만).

여기에 9

더 중요한 질문은 정말해야 크롬에서 jsperf benchmark that generates 1,000 rows of 10 columns and renders it. I'm averaging 200-250ms to render 1000 행의 : 왜 세계에서 한 번에 1,000 행을 표시하는? 항상 UX보다 나은 UX 대안이 있습니다.

+0

우리는 1000 개의 행을 쓰는 대신 100 개의 행을 사용하려고합니다. 100 줄이 그렇게 나쁘지는 않다. :) 우리는 각각 이 데이터에 따라 다른 결과를 표시하는 대화 형 그리드를 만들려고하기 때문에 템플릿 작성의 성능을 빠르게 테스트하고 싶습니다. 물론 많은 행렬을 추가하는 템플릿 로직이 많이있을 것입니다. 작성된 테스트는 성능이 문제가 될 수 있는지 확인할 수있는 방법 일뿐입니다. –

+0

RAW HTML을 구축 한 새로운 테스트를 만들었고 속도가 jQuery 템플릿보다 빠르다. http://jsperf.com/jquery-templates-performance/4 - jQuery 템플릿 (1.2 초), 원시 HTML (0.2 초)! 큰 차이 –

+0

다른 사람의 대답을 복사/붙여 넣기하려면 적어도 신용을 부여하십시오. http://stackoverflow.com/questions/4590718/jquery-templates-performance/4590790#4590790 –

5

치 찬,

조금 늦게 하나 흔적. 템플릿을 먼저 컴파일 한 다음 문자열 ID (아래의 경우 명명 된 변수 templateAlias)로 참조하는 것은 실제로 객체 경로를 거치는 것보다 10 배 빠름을 발견했습니다. 여기에 당신이 (당신의 코드 샘플을 기반으로) 그것을 달성 할 것 방법 :이 템플릿이 컴파일 된 것으로 크게 procedings 속도를해야하고 .appendTo()를 실행 전체 개체 모델 매번 사용하지 않을

var templateAlias = 'tmplRow'; 
// compile the template 
$.template(templateAlias, $("#tmplRow")); 

<script type="text/javascript"> 
    $.tmpl(templateAlias, data).appendTo('#table'); 
</script> 

기능. $('#tmplRow').tmpl(data).appendTo('#table');을 사용하면 $('#tmplRow')이 DOM을 쿼리하지만 $.tmpl(templateAlias, data).appendTo('#table');은 템플릿에 대한 참조를 기반으로 DOM에만 추가한다는 것을 의미합니다. 그 주제에 대해 아주 약간의 독서가 있습니다. 이 도움이

http://boedesign.com/misc/presentation-jquery-tmpl/#13

희망, 행운을 빌어 요 ...

+0

안녕하세요 짐! 귀하의 의견을 주셔서 감사합니다 :) 귀하의 프레 젠 테이션은 최고입니다. 컴파일 된 템플릿 일은 여전히 ​​매우 귀찮습니다.나는 그것이 배경에서 무엇을하는지 모르지만 컴파일 된 템플릿은 템플릿에 조건부 블록이있는 경우에만 차이를 만들어 낼 것으로 보인다. 나는 그것을 위해 테스트를 썼다. 질문에서 "Update"블록을 살펴 본다. 이상한가? –

+0

위의 코드를 두 번째 업데이트로 테스트에 삽입하고 그 차이점을 확인하십시오. 나는 숫자가 좋은 60-70 %에 의해 내려올 것이라고 생각합니다. –

+0

나는 당신의 성능 테스트에 결함이 있다고 생각합니다. 어쩌면 차이를 만들지는 않겠지 만 두 번째 "$ .tmpl"문을 측정하지 않고 한 번 실행 한 다음 1000 번 실행하여 속도를 확인합니다. 이 방법은 처음 실행될 때 약간의 최적화를 수행 중일 수 있습니다. 적어도 나는 그렇게 희망한다. 즉, 두 번째 1000 회 실행에는 실행 1에서 수행중인 가능한 모든 최적화가 포함됩니다. –

0

아무도 콧수염을 언급하지 :

여기에 도움이 될 수있는 링크입니다. 2011 년 후반에 콧수염은 인기있는 템플릿 프레임 워크에서 최고의 성능을 보였습니다.

http://mustache.github.com/

관련 문제