【问题标题】:Angular 2 Performance: Is it better to bind with a data member than a function?Angular 2 Performance:绑定数据成员比绑定函数更好吗?
【发布时间】:2018-04-04 18:52:54
【问题描述】:

我想知道绑定到数据成员是否比绑定到函数在性能上更好?

例如下面哪个语句的性能会更好?

1)

<myComp *ngIf="isThisTrue"></mycomp>

isThisTrue 是通过方法设置的

checkIfTrue(data){
       this.isThisTrue = data;
}

在从 observable 接收事件时调用此 checkfTrue()。

2)

<mycomp *ngIf="seeIfItHasBecomeTrue()"></mycomp>

seeIfItHasBecomeTrue 检查 this.isTrue 是否变为真。

我明显觉得绑定到数据成员应该更快,但我不确定这是否总是更快?或者是否有一些灰色区域?还有,如果快的话要多少?

【问题讨论】:

  • 尝试将 console.log 放入 seeIfItHasBecomeTrue - 我怀疑它会被调用 5 到 30 次。如果它是一个简单的函数,那没关系,但如果它更复杂,它可以变成可测量的东西。
  • my answer 有什么不清楚的地方吗?
  • 抱歉耽搁了。感谢您的回答。你能帮我解答完整的问题吗?我一直在寻找,如果它总是更快,它有多快。
  • @TypeScripter,是的,它总是会更快,我在回答中解释了原因。速度有多快取决于您运行代码的特定机器

标签: angular performance data-binding


【解决方案1】:

如果您使用*ngIf="isThisTrue" 方法,编译器将生成以下updateRenderer 函数:

function (_ck, _v) {
    var _co = _v.component;
    var currVal_1 = _co.isThisTrue;   <--- simple member access
    _ck(_v, 5, 0, currVal_1);
}

如果你使用第二种方法*ngIf="seeIfItHasBecomeTrue()",函数将如下所示:

function(_ck,_v) {
    var _co = _v.component;
    var currVal_1 = _co.seeIfItHasBecomeTrue();   <--- function call
    _ck(_v,5,0,currVal_1);
}

并且函数调用比简单的成员访问更重性能。

要了解有关updateRenderer 函数的更多信息,请阅读:

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 2017-11-05
  • 1970-01-01
  • 2017-09-13
  • 2017-03-16
  • 2018-04-17
  • 1970-01-01
相关资源
最近更新 更多