2012-03-28 61 views
1

我发现内存使用情况,并在这里对堆栈溢出CPU使用的一些有趣的信息,但是他们都没有直接的办法给看似简单的问题:CPU VS内存使用率(理论)

作为一个通用的策略在JavaScript应用程序中,使用内存(存储数据)或CPU(每次重新计算数据)的性能会更好吗?

我指的是在常见的浏览器的JavaScript环境使用(FF,Chrome浏览器,IE> 8)

没有任何人有一个更直接的和记录的答案呢?

---编辑---

好吧,我明白这个问题是非常通用。我试图减少“范围”。

阅读你的答案我意识到真正的问题是:“如何展现我的javascript代码仍然具有良好性能的内存限制?”。 (FF,Chrome,IE> 8)

我使用的函数不是很复杂的数学函数,但可以产生相当大量的数据(300-400kb),我想了解它是否会最好每次重新计算它们或者将结果存储在变量中。

+0

“更好”为了什么?在什么性能约束下?在什么环境下? – 2012-03-28 08:38:24

+1

也许没有直接的方法,因为这个问题没有答案。这取决于很多因素(移动设备与台式机,慢速电脑与现代电脑,应用类型等),就像其他语言一样。 – 2012-03-28 08:40:46

+0

好的我编辑了问题 – 2012-03-28 09:25:45

回答

3

隐约相关 - 当您开始使用大型对象/数组时,浏览器中的JS非常饥饿难耐。如果您考虑由canvas元素或其他富媒体API生成的二进制数据,那么您显然不希望以传统方式存储这些数据 - 不考虑性能问题,这也很重要。

MDN article talking about JS Typed Arrays

随着Web应用程序变得越来越强大,使用的WebSockets增加功能,如音频和视频处理,获得原始数据,等等,它已经很清楚,有这对于JavaScript代码能够快速且容易地操作原始二进制数据是有帮助的。

这里有一个JS Perf comparison of arrays,另有looking at canvas in particular,这样你就可以得到他们是如何工作的一些直接的例子。希望这是有用的。

1

这只是尺寸/性能折衷的另一种变化。存储值会增加大小,重新计算会降低性能。

在某些情况下,计算复杂,并且内存使用量很小。数学函数尤其如此。

在其他情况下,所需的内存会很大,并且计算很简单。当输出为大数据结构时尤其如此,并且您可以轻松计算结构中的元素。

您需要考虑的其他因素是可用的资源。如果你的内存非常有限,那么你可能没有选择,如果它是一个后台进程,那么可能使用大量内存是不可取的。如果计算需要经常进行,那么比起每月进行一次更有可能存储该值...

折衷中有很多因素,因此没有“通用”回答,只有在每种情况下你可以遵循的一套准则。

+0

我编辑了我的问题,也许现在问题的“范围”更清晰了...... – 2012-03-28 12:32:20

+0

@DanieleB,我们仍然需要了解更多以给出明确的答案。你说300 + kb是不是少量的数据,是否有可能只生成感兴趣的数据而不是存储它?更好的办法是确切地知道这些功能是什么。 – Matt 2012-03-28 12:51:03

+0

@ Mat.Yes它可以生成每次感兴趣的数据。我使用的函数基本上是:1)backbone.js函数像'pluck'2)函数我做了,基本上操纵JSON数据,并且可以有一些嵌套的(最多3级)下划线_.each()函数。 没有做任何基准测试,我发现这些函数相对于其他渲染函数(比如highcharts)来说相当'快速'。通常,我想要一个编写高效代码的策略。 到目前为止,我明白要考虑的参数至少是:内存,功能复杂度,网络使用率。其他? – 2012-03-30 10:13:13