2015-09-30 61 views
2

考慮一個角度HTML部分:Angular JS HTML中的相同表達式的數量是否會影響性能?

<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> 
  • 是否有更多的角度表達式做同樣的檢查,對性能有不好的影響?
  • 還是有角度預先計算並且只對所有ng-ifs有效地進行一次性解析?

在文檔中找不到它。

+0

如果你有其中一個而是執行一個函數,然後計算該函數被執行多少次,你會有一個非常明確的答案。 –

+0

一如既往,你做的工作越多,所需的時間就越長。 – dandavis

回答

1

答案是否定的。 https://github.com/angular/angular.js/blob/master/src/ng/directive/ngIf.js

正如你所看到的,它增加了$scope.$watch()存儲在ng-if標記表達式:

可以爲NG-如果在這裏找到的代碼。該$watch方法是指$parse方法存儲在字典expression => parsedExpression表達,你可以在這裏看到: https://github.com/angular/angular.js/blob/master/src/ng/parse.js

這就是所有它涉及到緩存。你也可以看到這裏的例子: http://jsfiddle.net/zxfje53h/1/

0

每當您使用指令和角度使用角度html編譯器遇到它時,它將運行指令編譯函數從中取回鏈接函數,並用範圍調用鏈接函數。就我所知,在緩存解析/處理的值的框架中不存在這樣的優化,因爲在解析它之後需要將特定範圍應用於從解析返回的函數,我沒有真正共享在指令之間解析的信息。不知道具有緩存表達式/解析函數會有多大好處。

相關問題