Aurelia-提高视图渲染的repeat.com的性能
我有一个所谓的聊天视图,它基本上由一个Aurelia-提高视图渲染的repeat.com的性能,aurelia,aurelia-templating,Aurelia,Aurelia Templating,我有一个所谓的聊天视图,它基本上由一个repeat.for组成,它在所有消息上循环,并使用呈现消息视图 问题是,一旦消息计数超过50,并且用户在聊天之间导航,它就会变得非常慢(这会触发repeat.for更新,因为我在VM中替换了数据集) 我觉得我在处理这样一个观点方面做错了什么。我能得到一些关于其他选择的信息吗 我尝试过UI虚拟化,但不幸的是,当前的插件不支持我需要的功能(可变高度项目、自底向上对齐) 我也做了很多关于绑定的优化,大多数都是一次性的,对数据集的更新是取消公告的。但这并没有改善情
repeat.for
组成,它在所有消息上循环,并使用
呈现消息视图
问题是,一旦消息计数超过50,并且用户在聊天之间导航,它就会变得非常慢(这会触发repeat.for
更新,因为我在VM中替换了数据集)
我觉得我在处理这样一个观点方面做错了什么。我能得到一些关于其他选择的信息吗
我尝试过UI虚拟化,但不幸的是,当前的插件不支持我需要的功能(可变高度项目、自底向上对齐)
我也做了很多关于绑定的优化,大多数都是一次性的,对数据集的更新是取消公告的。但这并没有改善情况,因为主要的瓶颈是初始负载(第一次绑定视图)
谢谢
当前方法的示例:
<li repeat.for="message of chat.messages">
<compose view-model.bind="getMessageViewFromMessage(message) & oneTime"
model.bind="message & oneTime"
containerless>
</compose>
</li>
您应该查看aurelia ui虚拟化库。一旦你加载它,你就可以替换<代码>重复。对于使用<代码>虚拟重复。在这样的地方,对于,你将得到一个虚拟化的中继器,这将有助于改善这种情况下的PYF。 < P>我认为你根本不需要考虑使用<代码> <代码>。您需要
有什么原因吗?仔细想想,我在原始帖子中提到的不符合我的标准,原因有两个。不过谢谢。啊,我现在明白了。我建议提交一个功能请求给那个repo,希望我们能够对它进行迭代以支持它。你能定义“相当慢”吗?当然。聊天的初始视图是50条消息(第一页)。显示它大约需要600-900毫秒,在此期间UI线程被冻结。这是在Chrome的V8 JavaScript引擎上实现的。因为很多都是纯HTML,实际上不需要很多绑定(除了音频和媒体消息),所以我想知道我需要哪些选项来加快速度。当前的做法是通过绑定到innerHTML将纯文本消息转换为静态HTML。但这对音频和媒体消息不起作用,因为它们还需要一些绑定(如单击委派和对音频对象的引用)。我使用了
,因为我有很多不同的视图(5种不同的类型)。例如文本、音频终端媒体(图像/视频)。如果我创建了五个不同的动态视图,然后将它们绑定在一起,并使用if.bind
选择正确的视图,会更快吗?(if.bind=“message.type==“text”
etc)嘿,德韦恩。我刚刚测试了它,我可以确认它确实更快,尽管它看起来有点让我困惑。正如我所期望的那样,
方法会更快。这真是太棒了。我认为,在您的情况下,您可能会看到许多项目被一个接一个地呈现,您会看到一些副作用,因为
附带了隐含的环境。要回答您的问题,您可以使用if.bind,或者您可以将类型传递给泛型元素,然后像switch/case语句一样在其中处理它。太棒了!我在用Aurelia和phonegap。从“撰写”移动到“if.bind”,渲染时间从6秒减少到不到2秒。谢谢哇@AlonBar,这大大缩短了渲染时间。
<li repeat.for="message of messages">
<chat-message message.bind="message"></chat-message>
</li>