Подтвердить что ты не робот

Влияние производительности директивы ng-csp

Включение политики безопасности контента и добавление директивы ng-csp предотвращает использование Angular Function() и eval() для определенной оптимизации.

В документе говорится, что производительность может уменьшаться до 30%.

Мне было интересно, какие функции на самом деле действительно влияют на функции Angular, используя директиву ng-csp.

Существуют ли обходные пути, шаблоны или другие идеи, которые могут снизить стоимость использования этой директивы?

4b9b3361

Ответ 1

Я провел некоторое исследование, и самый простой способ понять, как это повлияет на производительность, - это посмотреть initial commit (см. вопрос о Github тоже), который представил поддержку CSP в AngularJs еще в 2012 году.

Дело в том, что вам нужно использовать разрешения (под) выражений типа

a.b.c.d.e  

например.

user.data.books

в выражениях Angular в ваших файлах шаблонов HTML. Angular для этого используется первоначально новая функция (аргументы, код) для синтаксического анализа этих выражений. Однако для поддержки CSP вы не можете использовать new Function() или eval(). Магическое число 30% похоже происходит от http://jsperf.com/angularjs-parse-getter/4 (source). Моя интерпретация результатов состоит в том, что код с циклом for (т.е. Переходы в сборке) медленнее, чем код с циклом inlined/extended for.

В свете предыдущих абзацев, я не верю, что есть что-то значимое, что вы можете сделать, чтобы уменьшить удар производительности. Возможно (если вы отчаялись) просто не используйте длинные выражения (например, a.b.c.d.e.f.g.h) и используйте довольно короткие, но я не думаю, что это возможный способ оптимизации вашего кода.

Ускоренная перемотка вперед до 2015 года, кодовая база AngularJs существенно изменилась, но вы можете видеть, что два парсара: ASTInterpreter (для CSP включен) и ASTCompiler (для CSP отключено). Возможно, вы можете поместить некоторый код оценки производительности в эти парсеры, чтобы сравнить ASTInterpreter с ASTCompiler.

НТН