Aurelia - 提升repeat.for视图渲染的性能

时间:2016-11-02 13:29:52

标签: aurelia aurelia-binding aurelia-templating

我有一个所谓的聊天视图,它基本上由一个data组成,它遍历所有消息并使用function MyController($scope, $http) { $http({ method: 'GET', data: "action=0", url: 'a.php' }).then(function(response) { $scope.legs = response.data.results; }); } 呈现消息视图。

问题是,一旦消息计数超过50并且用户在聊天之间导航(触发repeat.for更新,因为我替换VM中的数据集),它会变得非常慢。

我觉得我在处理这样的视图方面做错了。我可以就其他替代方案获得一些意见吗?

我尝试过UI虚拟化,但不幸的是,当前的插件不支持我需要的功能(可变高度项,自下而上对齐)。

我还对绑定做了很多优化,大多数都是一次性的,对数据集的更新都是去抖动的。但这并没有改善事情,因为主要的瓶颈是初始负载(第一次绑定视图)。

谢谢!

当前方法的示例:

<compose>

2 个答案:

答案 0 :(得分:3)

我认为您需要考虑根本不使用<compose>。你需要<compose>吗?当你考虑它时,每次显示一条消息时,<compose元素必须重新运行相同的视图实例化/绑定逻辑Aurelia为其他所有操作。

我个人会创建一个带有一些可绑定属性的HTML部分,并在循环内部引用它。所以你可能有chat-message.html,然后像这样显示:

<li repeat.for="message of messages">
    <chat-message message.bind="message"></chat-message>
</li>

在可能的情况下,在大多数情况下应该避免动态构图,以防止潜在的大型重复项目。

答案 1 :(得分:1)

您应该查看aurelia-ui-virtualization库。加载后,您可以在这样的位置将repeat.for替换为virtual-repeat.for,并且您将获得一个虚拟转发器,这将有助于在这种情况下改善性能。