在Angular的模板中遍历一个集合(collection)的时候你会这样写:
<ul> <li *ngFor="let item of collection">{{item.id}}</li> </ul>
有时你会需要改变这个集合,比如从后端接口返回了新的数据。那么问题来了,Angular不知道怎么跟踪这个集合里面的项,不知道哪些该添加哪些该修改哪些该删除。结果就是,Angular会把该集合里的项全部移除然后重新添加。就像这样:
这样做的弊端是会进行大量的DOM操作,而DOM操作是非常消耗性能的。
那么解决方案是,为*ngFor添加一个trackBy函数,告诉Angular该怎么跟踪集合的各项。trackBy函数需要两个参数,第一个是当前项的index,第二个是当前项,并返回一个唯一的标识,就像这样:
import{ Component } from '@angular/core'; @Component({ selector: 'trackBy-test', template: ` <ul><li *ngFor="let item of items; trackBy: trackByIndex">{{item.name}}</li></ul> <button (click)="getItems()">Get Items</button> ` }) export class TrackByCmp{ items: any[]=[]; constructor(){ this.items = [{name:'Tom'},{name:'Jerry'},{name:'Kitty'}]; } getItems(){ this.items = [{name:'Tom'},{name:'Jerry'},{name:'Mac'},{name:'John'}]; } trackByIndex(index, item){ return index; } }
这样做之后,Angular就知道哪些项变动了:
我们可以看到,DOM只重绘了修改和增加的项。而且,再次点击按钮是不会重绘的。但是在没有添加trackBy函数的时候,重复点击按钮还是会触发重绘的(可以回头看第一个GIF)。
以上所述是小编给大家介绍的Angular利用trackBy提升性能的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
本文向大家介绍使用FriendFeed来提升MySQL性能的方法,包括了使用FriendFeed来提升MySQL性能的方法的使用技巧和注意事项,需要的朋友参考一下 背景 我们使用MySQL存储了FriendFeed的所有数据。数据库随着用户基数的增长而增长了很多。现在已经存储了超过2.5亿条记录与一堆涵盖了从评论和“喜欢”到好友列表的其他数据。 随着数据的增长,我们也曾迭代地解决了随着如此迅猛的
问题内容: 如果涉及通配符,有什么办法可以加快mysql等操作员的性能吗?例如。如“%test%” 问题答案: 如果查询看起来像或,MySQL可以使用索引。它可以将索引用于第一个通配符之前的任何部分或字符串。如果需要在字符串中的任意位置匹配单词,则可能需要考虑使用索引。 有关索引的更多详细信息: http //dev.mysql.com/doc/refman/5.1/en/mysql- index
有哪些能够提升模型训练速度、提升GPU利用率的组件或方法? 大模型发展迅速,热度很高,很多企业都想训练自己的大模型,但在训练的过程中无疑避不开GPU短缺、已有的GPU利用率低、GPU很贵等问题,所以在无限买GPU的选择之下,还有一个很好的解决办法就是尽可能将已有的GPU利用率发挥到最大,提升整个模型训练的速度。
第 20 章 提升性能
本文向大家介绍canvas有哪些可以提升性能的优化方法?相关面试题,主要包含被问及canvas有哪些可以提升性能的优化方法?时的应答技巧和注意事项,需要的朋友参考一下 一般画下一帧会 clearRect,但当本帧绘制情况很复杂,会造成一定的白屏或黑屏, 所以会有一个临时 canvas 保留上一帧,因为直接 draw 不怎么消耗计算资源, 在发现绘制未完成时,用临时 canvas 显示。 在 ios
本文向大家介绍提升Ruby on Rails性能的几个解决方案,包括了提升Ruby on Rails性能的几个解决方案的使用技巧和注意事项,需要的朋友参考一下 简介 Ruby On Rails 框架自它提出之日起就受到广泛关注,在“不要重复自己”,“约定优于配置”等思想的指导下,Rails 带给 Web 开发者的是极高的开发效率。 ActiveRecord 的灵活让你再也不用配置繁琐的 Hiber