考慮下面的JavaScript函數(1):何時構建Javascript中的對象?
function setData(domElement) {
domElement.myDataProperty = {
'suppose': 'this',
'object': 'is',
'static': 'and',
'pretty': 'big'
};
};
現在我不喜歡這個功能是完全相同的對象創建的每個函數被調用的時間。由於對象沒有改變,我寧願只創建一次。因此,我們可以做出如下調整(2):
var dataObject = {
'suppose': 'this',
'object': 'is',
'static': 'and',
'pretty': 'big'
};
function setData(domElement) {
domElement.myDataProperty = dataObject;
};
現在,當腳本被加載並存儲在dataObject
的對象被創建一次。但是我們假設setData
只是偶爾被調用的 - 大部分時間腳本加載的函數都沒有使用。在這種情況下,我不喜歡這個功能,這個對象總是被創建並保存在內存中,包括許多永遠不會被使用的場合。我想你可以做這樣的事情來達到理想的平衡(3):
var dataObject;
function setData(domElement) {
if (!dataObject) {
dataObject = {
'suppose': 'this',
'object': 'is',
'static': 'and',
'pretty': 'big'
};
}
domElement.myDataProperty = dataObject;
};
這是否合理?我認爲這取決於解釋者何時決定創建一個對象。它是否真的等待,直到它通過!dataObject
的條件,或者它是否進入函數,試圖變得聰明,並決定提前構造它?也許不同的JavaScript引擎有不同的政策呢?
那麼當然有一個問題,這些優化在實踐中是否會有問題。顯然,這取決於像物體的大小,引擎的速度,可用資源的數量等因素。但總的來說,你會說哪一個是更顯着的優化:從(1)到(2)或從(2)到(3)?
好點,但請記住,我正在談論一個永遠不會改變的對象,例如典型的功能。 – 2009-08-13 14:12:57
並不重要,JS說它可以改變,你不打算改變它的事實是無關緊要的。你會期待'返回[1,2,3];'總是返回相同的對象,例如? – olliej 2009-08-13 22:19:44