我是在一个有棱角的演讲中,其中一个在会议上提到的人,ng-bind比{{}}更具有约束力。
其中一个原因是,ng-bind把变量放在观察列表中,只有当模型发生变化时,数据才会被推到视图中,另一方面,{{}}每次都会插入表达式(我猜是角循环)并推送该值,即使该值发生变化或没有变化。
另外,如果屏幕上没有太多数据,可以使用{{}},性能问题将不可见。有人能帮我解释一下这个问题吗?
- "如果在Angular编译模板之前浏览器以原始状态临时显示模板,则最好使用ngBind而不是{{ expression }}。由于ngBind是一个元素属性,因此在加载页面时,它会使用户看不到绑定。"—但没有提到性能。
- 如果我的回答更好,你能查查吗
- 在我看来是不实际的,在完全加载数据之前,查看器将看到您的标签。我想知道Angular团队是否会解决这个问题。
- @BlazeMonger:你不能只包括ng-coast属性来防止模板被瞬间显示吗?
能见度:
当您的AngularJS引导时,用户可能会看到您在HTML中放置的括号。这可以用ng-cloak处理。但对我来说,这是一个解决方法,如果我使用ng-bind,我不需要使用它。
性能:
{{}}慢得多。
这个ng-bind是一个指令,将在传递的变量上放置一个观察程序。因此,只有当传递值实际发生变化时,ng-bind才适用。
另一方面,即使不需要,每个$digest中的支架都将被脏检查和刷新。
我目前正在构建一个大的单页应用程序(每个视图大约有500个绑定)。从改为严格的ng-bind,每一个scope.$digest节约了20%左右。
建议:
如果使用翻译模块(如Angular Translate),则始终首选括号注释之前的指令。
{{'WELCOME'|translate}}=>。
If you need a filter function, better go for a directive, that actually just uses your custom filter. $filter服务的文档
更新日期:2014年11月28日(但可能不在主题范围内):
在角1.3x中,引入了bindonce功能。因此,可以将表达式/属性的值绑定一次(将在以下时间绑定!)="未定义")。
当您不希望绑定发生更改时,这很有用。
用途:在装订前放置:::
1 2 3 4 5 6 7 8 9 10
| <ul>
<li ng-repeat="item in ::items">{{item}}
</li>
</ul>
<span data-ng-bind="::value"></span> |
例子:
ng-repeat输出表中的一些数据,每行有多个绑定。转换绑定,过滤输出,在每个范围摘要中执行。
- 是的,这里也是一样,我注意到这只是在Google Chrome Batarang扩展中使用,并检查"性能"选项卡,其中应用程序使用和应用程序使用ng绑定。
- 这是个更好的答案
- 想升级投票,但你得到了808分,这很酷:)
- 现在使用角度为1.3的bindOnce执行以下操作是否有意义:ng bind html="::user.username"????
- 当然可以,但前提是您不希望user.username更改。这将避免该绑定上附加的观察程序。
- 从源代码中我可以看出(截至2014-11-24),卷发插值的处理方式与指令类似(请参见ng/compile.js中的addtextinpolatedirective())。它还使用$watch,因此如果文本不更改,则不会触摸DOM,也不会像您所说的那样在每个$digest上"脏检查并刷新"它。但是,在每个$digest上所做的就是计算插入的结果字符串。它只是不分配给文本节点,除非它发生更改。
- 我写了一个内部评估的性能测试。它在一个ng repeat中有2000个条目,并在对象中显示了2个属性,因此2000x2绑定。绑定的不同之处在于:第一个绑定只是一个范围中的绑定。秒有一个绑定和一些普通的HTML。结果:NG绑定速度更快,每个作用域应用大约20%。在不检查代码的情况下,似乎额外的纯HTML和HTML元素中的卷曲表达式需要更多的时间。
- angular 1.3.x有一个bind-once语法(::variable)。所以你可以用这个来提醒脏的检查和使用NG斗篷
- @是的,正如Misaizdaleka在评论中所说。
- 只是想指出,根据这里的测试:jspef.com/angular-bind-vs-brackets似乎显示了括号比bind快。(注:条形图是每秒操作数,因此越长越好)。正如之前的评论所指出的,他们的观察机制最终是相同的。
- @Warren您的JSPref会测量测试的引导时间。因为指令具有更大的负载,所以它们的实例化时间较慢。更重要的值是运行应用程序时所获得的性能。JSPerf确实为5次执行提供了5个不同的结果,所以这就是我不依赖它的原因。
- "绑定一次+括号"与"绑定一次+ng绑定"是否有性能测试?在这种情况下,性能影响是否被消除或减弱?
- 只需ng重复10000个项目,ng绑定这些项目。开始使用chrome进行分析,并与bind进行一次比较。但是很抱歉破坏了,bind-once在任何情况下都会更快,因为在这个绑定的摘要循环中没有观察者(在绑定之后)
- 我知道,我要求对"bind once+brackets"和"bind once+ng bind"进行性能测试。显然,在大多数情况下,一次绑定比不一次绑定快。
- ng bind需要在每个摘要中进行"脏检查",与完全相同。同样,关于可见的不定值表达式的论点只适用于某些情况。例如,在ng repeat中,您可以使用而不显示它(因为只有在已经有数据的情况下,它才会显示)。
- 因为您没有提供任何源代码,所以我给您一个:ng-perf.com/2014/10/30/&hellip;"ng-bind更快,因为它更简单。插值必须经过额外的步骤来验证上下文、值的JSonification等等。这使得速度稍微慢一点。"
- 我不能忍受在刷新时看到括号-我说的是一个小的ASP.NET MVC站点,甚至一个只有2个模板的页面,我说的是当前的角度1.5.6。所以对我来说,我很高兴看到这一页。我喜欢的岁月,但暂时看不到这些括号是不值得的,我不想使用斗篷。所以对我来说,绑定指令是
如果您不使用ng-bind,则应使用如下内容:
在解析user.name之前(在加载数据之前),您可能会看到实际的Hello, {{user.name}}一秒钟。
你可以这样做
1
| Hello, <span ng-bind="user.name"></span> |
如果这是你的问题。
另一种解决方案是使用ng-cloak。
- 根据你所说的,如果我们使用的话,就不会影响性能。I was told, if you use {{}}, everytime, that will get inerpolate and generate the result even if the model does not change.
- 因此,ng bind的表现似乎更好,但我不确定它到底有多大的区别。我的印象是,除非您使用真正大的数据集,否则它不会产生显著的差异。否则,我不会担心这方面的问题。
- 如果我不想将user.name包装在SPAN标记中,如何使用ng bind?如果我使用大括号,我会得到干净的名称,没有HTML标记
- 嗨@finishingmove。请解释一下为什么在呈现$scope.something之前使用括号会导致显示为{{something}}?是虫子吗?
- @kevinmeredith在加载HTML时看起来是这样的,但是angular还没有。记住这是我们正在讨论的客户端模板。所有的插值都必须在加载应用程序的浏览器中完成。通常角荷载足够快,以致于看不到,但在某些情况下,它会成为一个问题。因此,人们发明了ng-cloak来解决这个问题。
- 对我来说,这不是问题的答案,为什么NgBind更好。它只是如何使用ngbind而不是注释和对ngcoat的引用。
- @Victor还有ng-bind-template,您可以将这两种方法结合在一起:ng-bind-template="Hello, {{user.name}}"这里绑定仍然提供性能提升,并且不引入任何进一步的嵌套。
- 在游戏的后期,但问题是关于ngbind指令的性能优势,这个答案没有解决。
- 阿法克没有表现。表达式将被构建并添加到$scope.$$watchers数组中,两种方法都相同。
ng-bind优于{{...}}。
例如,您可以执行以下操作:
这意味着由所附的整个文本Hello, {{variable}}将被复制并存储在内存中。
如果你改为这样做:
1
| Hello, <span ng-bind="variable"></span> |
只有值的值将存储在内存中,而Angular将注册一个仅由变量组成的观察者(观察表达式)。
- 另一方面,您的DOM更深。根据您所做的,在大文档中,这可能会影响渲染性能。
- 是的,我也这么认为@stephband。例如,如果您只想显示姓名和姓氏。为什么不只是插值?它将以相同的方式执行,因为它将在1摘要中运行相同的表。例如:firstname lastname=。第一个看起来更好。我认为这很大程度上取决于你想要什么,但最终它们都有优点和缺点。
- </div>是的替代方案,它的功能类似于ng bind。
- 这不是苹果对苹果,而是你在其中引入了一个跨度元素,而不是另一个。使用ng-bind的示例将更类似于Hello, {{variable}}</span></div>。
基本上,双卷曲语法更容易阅读,并且需要更少的输入。
这两种情况产生相同的输出,但是……如果您选择使用{{}},则用户有可能在使用angular呈现模板之前看到{{}}几毫秒。因此,如果您注意到任何{{}},那么最好使用ng-bind。
同样重要的是,只有在Angular应用程序的index.html中,才能取消呈现{{}}。如果您使用的是指令,那么模板,就没有机会看到这一点,因为Angular首先呈现模板,然后将其附加到DOM。
- 有趣的是,情况不同。我在ng bind="AnarrayViaFactory"vs AnarrayViaFactory上没有输出。我在尝试在Jekyll协议类型中输出JSON响应时遇到了这个问题,但由于与类似的模板冲突,我被迫使用NG绑定。ng repeat块(anarrayviafactory中的项)内的ng绑定将输出值。
这意味着{{...}}双向数据绑定。但是,吴绑定实际上是意味着单向数据绑定。
你想使用的NG减少数的人在你的页面。四、将更快比{{...}}绑定。所以,如果你只想显示a值和它的更新,它并不想反映更改UI反馈到控制器,然后去吴绑定。这将提高性能和减少页面页面加载时间。
1
| Hello, <span ng-bind="variable"></span> |
这是因为对于{{}},角度编译器同时考虑文本节点和其父节点,因为有可能合并2个{{}}节点。因此有额外的链接器增加了加载时间。当然,对于一些这样的情况,差异是无关紧要的,但是当您在大量项目的中继器中使用它时,它将在较慢的运行时环境中造成影响。
原因为什么吴绑定是更好的,因为
当你的页面是不加载当您的网络或是慢或当您的网站加载的帮助,然后你可以看到论文类型的问题(检查屏幕读取触发和标记)将完全在屏幕这是奇怪的。我们应该为了避免搜索使用的NG绑定
在中有一些闪烁的问题,比如刷新页面时,会看到一个短暂的时间垃圾表达式。因此,我们应该使用ng bind而不是expression来描述数据。
Ng绑定也有它的问题。当您尝试使用角度过滤器、限制或其他东西时,如果使用Ng绑定,可能会有问题。但在另一种情况下,ng-bind在UX端更好,当用户打开一个页面时,他/她会看到(10ms-100ms)打印符号(…)。}},这就是为什么ng bind更好。
你可以做这个网站的问题,给你一个更好的解释,这是专门为{一}。这是将吴的绑定。
corpus.hubwiz.com http:/ / / / / 2 angularjs 16125872.html参考这个网站。
医生:根据角因为ngbind是元素属性,使得它绑定到用户看不见的是在页面加载。它的主差分…
基本上每一个DOM元素加载,直到需要,我们可以ngbind湖是因为他们需要在元件属性,它等待我到教堂来播放……更多信息下面
ngbind在NG -指令模块一个ngbind属性告诉angularjs替换文本内容的HTML元素指定一个给定的表达式的值,和更新的文本内容的价值,当表达的变化。
通常,你不使用ngbind直接,但从你使用双括号{ }标记样表达的是类似的,但不详细。
它是优选使用ngbind"{ } if a表达momentarily模板是由浏览器显示在其原始状态angularjs compiles之前它。因为ngbind是元素属性,使得它绑定到用户看不见的是在页面加载。
到这个问题的替代解决方案是使用ngcloak指令。在这里
为更多的信息关于ngbind访问本页docs.angularjs.org:http://///ngbind毫微克/指令的API
你可以做一些像这样的AS NG绑定属性:
插值或做为下面:
一个这样的属性:在angularjs cloak NG
吴cloak避免闪烁在DOM和等到所有的准备!这是一个平等的NG绑定属性。
ng-bind也更安全,因为它将html表示为字符串。
例如,'