Ответ 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
.
НТН