12

L'attivazione della politica di protezione del contenuto e l'aggiunta della direttiva ng-csp impediscono ad Angular di utilizzare Function() e eval() per determinate ottimizzazioni.Impatto sulle prestazioni della direttiva ng-csp

Il documento afferma che le prestazioni possono diminuire fino al 30%.

Mi chiedevo quali funzioni angolari siano effettivamente influenzate dall'utilizzo della direttiva ng-csp.

Esistono soluzioni, schemi o altre idee che possono ridurre il costo dell'utilizzo di tale direttiva?

+0

si può probabilmente ridurre le ricerche mettendo in cache i percorsi, o fare alias poco profonde per i percorsi in profondità (ad es. 'A.x = a.b.c.d.e.x'). – dandavis

risposta

5

ho fatto qualche ricerca e il modo più semplice per capire il calo di prestazioni è di guardare il initial commit (see issue on Github too), che ha introdotto il supporto CSP in AngularJs nel 2012.

Il fatto è che è necessario utilizzare risoluzioni del (sotto) espressioni come

a.b.c.d.e 

es.

user.data.books 

in espressioni angolari nei file modello HTML. Parser angolare per questo usato originariamente new Function(arguments, code) per analizzare queste espressioni. Tuttavia, per supportare CSP non è possibile utilizzare new Function() o eval(). Il numero magico del 30% sembra provenire da http://jsperf.com/angularjs-parse-getter/4 (source). La mia interpretazione dei risultati è che il codice con un ciclo for (ovvero i salti nell'assembly) è più lento del codice con un ciclo for espanso/espanso.

Alla luce dei paragrafi precedenti, non credo che si possa fare qualcosa di significativo per mitigare l'impatto sul rendimento. Forse (se sei disperato) non usare le espressioni lunghe (come a.b.c.d.e.f.g.h) e usare quelle piuttosto brevi, ma non penso che sia un modo fattibile per ottimizzare il tuo codice.

Fast forward al 2015, AngularJs codebase cambiato sostanzialmente, ma si può vedere ci sono two parsers: ASTInterpreter (per CSP abilitato) e ASTCompiler (per CSP disabilitato). Forse puoi mettere un po 'di codice di valutazione delle prestazioni in quei parser per confrontare ASTInterpreter contro ASTCompiler.

HTH

+1

Grazie Martin. Questo è veramente utile – HipsterZipster

Problemi correlati