2013-05-18 3 views
8

Posso usare ng-include per includere un partial all'interno di una vista angolare o posso usare partials lato server per farlo sul server. Sto pensando di usare partials lato server invece di partial angolari e poi ng-include (con il tag script) perché ho letto da qualche parte che i partial partials creano nuovi ambiti e questo può danneggiare le prestazioni di $ digest.angularjs/rendering Differenza di prestazione tra inlining o utilizzo di ng-

Esiste la validità a questo. Qual è l'effetto sulle prestazioni quando si utilizza l'angolare

risposta

9

ng-include creerà un nuovo ambito e registrerà un orologio (su un'espressione di percorso utilizzato da ng-include) su un ambito in cui viene utilizzato lo ng-include. Mentre questo incorre in qualche elaborazione aggiuntiva è ancora basato su oggetti JavaScript e come tale è molto veloce. Nella maggior parte dei casi, l'effetto di un nuovo orologio più un ambito aggiuntivo dovrebbe essere totalmente trascurabile.

L'unica vera differenza che posso vedere è che ng-include includerà/renderà il tuo parziale in modo asincrono, quindi potresti vedere un po 'di ritardo, specialmente quando recuperi i partial sulla rete (ma questo può essere mitigato dal pre-caricamento dei partial come qui descritta: https://stackoverflow.com/a/12346901/1418796)

in breve: nella maggior parte dei casi l'effetto di ng-include dovrebbe essere trascurabile se parziali sono pre-caricati.

Un ultimo commento: "l'ottimizzazione prematura è la radice di tutti i mali". Non avviare le regolazioni delle prestazioni micr. Fino a quando non si misura la prestazione di e si determina che ng-include è un collo di bottiglia.

+2

D'altra parte, ng-include (s) all'interno di ng-repeat (s) inizierà molto velocemente per mostrare grandi degradi delle prestazioni a causa del meccanismo asincrono. La migliore ottimizzazione che ho fatto nella mia app angularJS è stata la creazione di una direttiva ng-include-cache (sincrona quando si colpisce la cache). – Guillaume86

+0

@ Guillaume86: Ti interessa condividere il codice sorgente per quella direttiva? Sarei molto interessato – paldepind

+1

@paldepind qui è: https://gist.github.com/guillaume86/9272837 ma probabilmente vorrai scriverne uno nuovo con l'ultimo codice ngInclude dall'ultima versione angolare. Il mio ha usato un vecchio 1.0.x come base. – Guillaume86