2012-11-23 2 views
5

나는 자바 스크립트에서 내 작업을위한 간단한 templating enging 작업을하고있다. 핸들 바, 콧수염 또는 다른 강력한 템플릿 엔진을 사용할 수 없기 때문에 매우 간단해야한다.자바 스크립트 템플릿 프리 컴파일이란 무엇입니까?

나는 성능을 향상하기 위해 단어 'PRECOMPILE'또는 'COMPILE'템플릿을 계속 읽어. 하지만 정확히 무엇을 의미하는지 모르겠습니다. 내 작품에서는 매주 html 템플릿을 치는 것을 피하기 위해 내 개체에 템플릿 html을 캐시합니다.

주로 다음

_template = _template.replace(/\{(.+?)\}/g, function(token, match, number, txt) { 
        return item[match]; 
       }); 

항목 교체 될 값을 유지하는 목적 않는 매우 간단한 함수이다.

누군가 (핸들 바 등) 템플릿을 컴파일 할 때 정확히 어떤 의미인지 말해 줄 수 있습니까? ?

+0

이 게시물은 http : // ejohn입니다.org/blog/javascript-micro-templating/@nrabinowitz에서 답장을 읽은 후 .. – Kamal

답변

7

보통 템플릿 regex를 사용하여 구문 분석하고 eval를 사용하여 function로 변환. 프리 컴파일 템플릿이라고합니다.

렌더 템플릿이라고하는 일부 데이터를 인수로 전달하여 이러한 함수를 호출합니다. 따라서 템플릿을 호출 할 때마다 파싱되지 않습니다. 이미 문자열을 연결하고 반환하는 함수 형태로 존재합니다.

-1

업데이트 : 여기 올바르지 않습니다. 아래의 설명을 참조하십시오. 이 _ ___ 그가 _ ____ 그와 함께 _ ____을 가지고가는 결정

어느 날 :

음의 내 템플릿이 빈칸을 채워와 문장이라고 할 수 있습니다.

템플릿을 컴파일하면 공백이 채워집니다.

하루에 존은 배트맨 프리미어에게 샐리를 데려 올 것이라고 결정했습니다.

희망 은유는이 경우에 도움이된다 :)

+4

아니요,이 라이브러리가 의미하는 바가 아닙니다. 당신이 설명하는 것은 템플릿을 컴파일하는 것이 아니라 그것을 렌더링하는 것입니다. – nrabinowitz

+0

Word! 네가 옳아. – Costa

11

언더 코어, 핸들 막대 및 대부분의 다른 JS 템플릿은 템플릿 문자열에서 기능을 만듭니다. 그런 다음 함수를 여러 인수로 여러 번 호출하고 적절한 HTML 문자열을 가져올 수 있습니다. (Underscore와 Handlebars는 모두 템플릿 문자열을 JS 코드로 구문 분석 한 다음 Function 생성자를 호출하여 컴파일 된 템플릿 함수를 작성한다고 생각합니다.)

이러한 라이브러리는 "사전 컴파일"에 대해 이야기 할 때 템플릿 문자열을 재사용 가능한 기능으로 변환합니다. 이것은 약간 무거운 단계 일 수 있지만 템플릿을 훨씬 빠르게 렌더링 (대부분의 경우 간단한 정규식 대체보다 빠름)하므로 템플릿 코드에서 함수를 만든 다음 다시 컴파일하고 렌더링하는 대신 여러 번 사용하는 것이 더 효율적입니다. 템플릿이 호출 될 때마다

관련 문제