2012-11-23 25 views
5

Pracuję nad prostym szablonem obejmującym moją pracę w javascript. Musi być bardzo prosty, więc nie używam Handlebars, wąsy ani żadnego innego silnego silnika szablonowego.Co to jest prekompilacja szablonu javascript?

Ciągle czyta słowo „precompile lub szablon” „skompilować” w celu zwiększenia wydajności. Ale nie jestem pewien, co dokładnie wtedy oznacza. W mojej pracy przechowuję szablon html w moim obiekcie, aby uniknąć trafienia szablonu html za każdym razem.

Jest to bardzo prosta czynność, która przede wszystkim wykonuje następujące

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

poz jest obiekt, który posiada wartość należy wymienić.

Czy ktoś może mi powiedzieć, co dokładnie oznacza, kiedy (kierownicy itp.) Mówią, że kompiluje szablon. ?

+0

znalazłem ten post http: // ejohn.org/blog/javascript-micro-templating/po przeczytaniu odpowiedzi z @nrabinowitz .. – Kamal

Odpowiedz

7

Zazwyczaj szablony są analizowane przy użyciu regex a następnie konwertowane do function użyciu eval. Nazywa się szablon prekompilacji .

Wywoływanie takich funkcji z pewnymi danymi przekazanymi jako argumenty o nazwie Szablon renderowania. Więc szablony nie są analizowane za każdym razem, gdy je wywołujesz - już istnieje w postaci funkcji, która łączy i zwraca ciąg znaków.

-1

Aktualizacja: Jestem niepoprawny tutaj, patrz komentarz poniżej.

No powiedzmy, że mój szablon jest zdanie z wypełnić puste pola:

jeden dzień, _ ___ zdecydował, że zamierza doprowadzić _ ____ z nim do _ ____.

Kompilowanie szablonu spowoduje wypełnienie pustych miejsc.

W dniu, JOHN zdecydował, że zamierza zabrać SALLY z nim na BATMAN PREMIER.

Nadzieja metafora jest pomocne w tym przypadku:)

+4

Nie, nie to mają na myśli te biblioteki. To, co opisujesz, renderuje szablon, a nie go kompiluje. – nrabinowitz

+0

Słowo! masz rację. – Costa

11

Podkreślenie, kierownice i większość innych szablonów JS tworzy funkcję poza łańcuchem szablonów. Następnie możesz wywołać funkcję wiele razy z różnymi argumentami i uzyskać odpowiedni ciąg znaków HTML. (Sądzę, że zarówno Underscore, jak i Handlebars robią to przez parsowanie łańcucha szablonu do kodu JS, a następnie wywołanie konstruktora Function w celu utworzenia skompilowanej funkcji szablonu.)

Gdy te biblioteki mówią o "prekompilacji", mają na myśli początkowy etap przekształcenie łańcucha szablonu w funkcję wielokrotnego użytku. Może to być nieco ciężki krok, ale powoduje, że renderowanie szablonu jest znacznie szybsze (w większości przypadków szybsze niż proste zastąpienie wyrażeniem regularnym), więc lepiej jest utworzyć funkcję z kodu szablonu, a następnie użyć jej wielokrotnie, zamiast rekompilacji i renderowania za każdym razem, gdy szablon jest wywoływany.