42

我有一个大而复杂的页面,它严重依赖于 knockout.js。性能开始成为一个问题,但检查调用堆栈并试图找到瓶颈是一个真正的挑战。

我在另一个问题(Knockout.js -- 理解 foreach 和 with)中注意到接受的答案有评论:

...我建议不要with在需要高性能的地方使用,因为开销...

假设该陈述是正确的,那么这确实是非常有用的知识,而且我还没有找到此类性能提示的来源。

因此,我的问题是:

在深入研究经典性能调优之前,是否有可以应用的一般指南/重要提示来帮助提高我的应用程序的性能。

4

3 回答 3

37

我认为在一个答案中布置我想到的提示太过分了。

我开始了一系列关于这个主题的博客文章。第一篇文章在这里

这篇文章描述了一些if/with工作原理(将孩子复制为其模板并在触发绑定时使用模板重新渲染)并解释这些绑定如何导致重新渲染比预期的更频繁。

我将在以后的帖子中更新这个答案。

于 2012-03-30T05:09:49.890 回答
6

我发现的最大问题之一(并且没有在其他地方讨论过)是,只要元素上的任何绑定发生变化,Knockout 就会重新评估元素上的每个绑定。

这通常没什么大不了的,但是对于往往很昂贵的绑定(例如template),它会产生重大的性能问题。

如果它们不是元素上的唯一绑定,则将呈现内容/子项( 、 等)的绑定附加templateforeach虚拟元素(使用无容器控制流语法)。

于 2012-11-06T21:22:27.887 回答
0

我认为映射也可以提供帮助,您可以按照此测试查看使用 jquert map 和 knockout map knockout-map-vs-jquery-map之间的区别

当你开始大量使用 ObservableArrays 时,映射变得至关重要

于 2013-08-13T19:48:31.010 回答