2012-03-28 128 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