Javascript Angular JS HTML中相同表达式的数量是否会影响性能?

Javascript Angular JS HTML中相同表达式的数量是否会影响性能?,javascript,html,angularjs,dom,angularjs-scope,Javascript,Html,Angularjs,Dom,Angularjs Scope,考虑一个角度: <div> <p> <span ng-if="abc.def !== 'someValue'"></span> <span ng-if="abc.def === 'someValue'"></span> </p> <ul ng-if="abc.def !== 'someValue'"> <li></li> <l

考虑一个角度:

<div>
  <p>
    <span ng-if="abc.def !== 'someValue'"></span>
    <span ng-if="abc.def === 'someValue'"></span>
  </p>

  <ul ng-if="abc.def !== 'someValue'">
    <li></li>
    <li></li>
    <li></li>
    <li></li>
  </ul>

  <div ng-if="abc.def !== 'someValue'" 
    ng-class="{'alternative-list': abc.def !=='someValue'}">
    <div></div>
    <div></div>
  </div>

  <div ng-class="{'class-a': abc.def !== 'someValue', 'class-b': abc.def === 'someValue'}"></div>

</div>


  • 如果有更多的角度表达式执行相同的检查,是否会对性能产生不良影响
  • 或者Angular是否预先计算,并有效地仅对所有
    ng ifs
    执行一次性解析

在文档中找不到它。

每次使用指令时,angular使用angular html编译器遇到它时,它将运行指令编译函数,从中取回链接函数,并调用具有作用域的链接函数。就我所知,指令之间解析的信息没有真正的共享,缓存解析/处理的值的框架中不存在这样的优化,因为解析后需要将特定的作用域应用于解析返回的函数,我不确定缓存表达式/解析有多大好处函数会有所帮助。

答案是否定的

您可以在以下位置找到ng的代码:

如您所见,它为存储在
ng if
标记中的表达式添加了
$scope.$watch()
$watch
方法指的是
$parse
方法,该方法将表达式存储在dictionary
expression=>parsedExpression
中,如下所示:

这就是它与缓存相关的所有功能。您还可以在此处看到示例:

如果让其中一个执行一个函数,然后计算该函数执行的次数,你会得到一个非常清楚的答案。与往常一样,你做的工作越多,花费的时间就越长。