我已经构建了一个LIVE in beta的应用程序,现在我正在努力优化它的性能。我有一个案例,其中有一个带图像的表格,我注意到图像一直闪烁,这使我看起来在引擎盖下,我注意到DOM保持清爽。刷新,没有任何变化,但它会一直删除并重新添加自己几次。
我想,我首先会将自己记录到ngOnChanges(_:SimpleChanges)函数中,但是没有任何东西从那里进入console.log,这意味着组件本身没有改变,但出于某种原因,它认为有必要刷新它的DOM。
我只是想知道,我如何调试它并知道是什么导致组件刷新它的DOM?
也许有些工具可以提供帮助吗?我试过Augury,但这似乎没有帮助调试性能问题。
PS。在
中渲染comopnentif let result = response.result.value as? [String:Any] {
if let tone = result["document_tone"] as? [String:Any] {
print(tone)
if let cat = tone["tone_categories"] as? [[String:Any]] {
if let dic = cat[0] as? [String:Any] {
if let catId = dic["category_id"] as? String {
print("catId is %@",catId)
}
if let catName = dic["category_name"] as? String {
print("catName is %@",catName )
}
if let alltones = dic["tones"] as? [[String:Any]] {
print("alltones is %@",alltones)
if let innerTone = alltones[0] as? [String:Any] {
print(innerTone["tone_name"])
print(innerTone["tone_id"])
}
}
}
}
}
}
模式有点帮助(仍然不明白,为什么它有帮助,如果OnChanges永远不会运行)......但它并没有完全消除随机时刻刷新的DOM。
答案 0 :(得分:1)
我找到了自己问题的答案。我的问题是使用我的模板中的get方法生成的数组。阿卡。有2个模型:[ParentModel,ChildModel],ParentModel包含一个ChildModel数组。现在我想从ParentModel中只选择那些ChildModel,我做的是
class ParentModel {
__specificChildren() : IChild[] {}
}
在模板中,我使用了
*ngFor="let child of parentModel.__specificChildren()"
这开始不断刷新。可能是因为某些全局事件触发了相关模型的变化检测,每次检查时都会创建一个具有不同指针的数组,这会告诉Angular某些内容发生了变化,从而触发了变更检测。
无论如何,我如何解决这个问题,而不是在模板中使用最佳的函数,因为我不想在组件中创建一个无用的变量来使事情复杂化,我仍然在组件中创建了辅助变量,从而导致:
<强>组件强>
public specificChildren: IChild[]
parentDatatabe.subscribe( _parent {
this.parent = _parent;
this.specificChildren = _parent.__specificChildren()
})
<强>模板强>
*ngFor="let child of specificChildren"
因此,当父数据库推送新值时,仅设置新子项。