2012-11-23 11 views
5

Sto lavorando su semplici template per il mio lavoro in javascript .. deve essere molto semplice, quindi non sto usando Handlebars, baffi o altri robusti motori di template disponibili.Che cos'è la precompilazione del modello javascript?

Continuo a leggere la parola 'precompilare' o un modello 'COMPILE' per migliorare le prestazioni. Ma non sono sicuro di cosa esattamente significhi in questo senso. Nei miei lavori memorizzo il template html nel mio oggetto per evitare di colpire il template html ogni volta.

'una funzione molto semplice che fa principalmente i seguenti

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

elemento è l'oggetto che contiene il valore da sostituire.

Qualcuno può, per favore, dirmi cosa significa esattamente quando (manubri ecc.) Dice compilare il modello. ?

+0

ho trovato questo post http: // ejohn.org/blog/javascript-micro-templating/dopo aver letto la risposta di @nrabinowitz .. – Kamal

risposta

7

Di solito i modelli vengono analizzati utilizzando regex e poi convertiti in function utilizzando eval. Questo chiamato il modello di precompilazione .

Invocare tali funzioni con alcuni dati passati come argomenti chiamati il ​​modello di rendering . Quindi i template non vengono analizzati ogni volta che lo chiami - esiste già in forma di funzione che concatena e restituisce stringhe.

-1

Aggiornamento: non sono corretto qui, vedere il commento qui sotto.

Beh diciamo che il mio modello è una frase con riempire gli spazi vuoti:

Un giorno, _ ___ ha deciso che stava per portare _ ____ con lui al _ ____.

La compilazione del modello riempirebbe gli spazi vuoti.

Il giorno in cui John ha deciso che avrebbe portato SALLY con lui al BATMAN PREMIER.

speranza metafora è utile in questo caso:)

+4

No, non è quello che significano queste librerie. Quello che descrivi è il rendering del template, non la compilazione. – nrabinowitz

+0

Word! hai ragione. – Costa

11

Underscore, Handlebars e molti altri modelli JS creano una funzione fuori dalla stringa del modello. È quindi possibile chiamare la funzione più volte con argomenti diversi e ottenere la stringa appropriata di HTML. (Credo sia la sottolineatura e il manubrio fanno analizzando la stringa di modello in codice JS e quindi chiamando il costruttore Function per rendere la funzione di modello compilato.)

Quando queste librerie parlano di "precompilazione", significano la fase iniziale di trasformando la stringa del modello in una funzione riutilizzabile. Questo può essere un passo un po 'pesante, ma rende il template molto più veloce (più veloce della semplice regex nella maggior parte dei casi) quindi è più efficiente creare la funzione dal codice template e quindi usarla più volte, piuttosto che ricompilare e renderizzare ogni volta che viene chiamato il modello.