2013-09-28 50 views
2

我有一個關於JavaScript效率的問題。我想創建一個監視特定成員的「監視器」,並在更改時執行一個函數。我已經看到了兩種方法:效率 - setInterval vs Object.watch

1)我已閱讀,連續地對電流值的舊的值進行比較,並觸發回調時,有一個變化

2)Object.watch

設定的間隔該Object.watch創造了一些開銷,但我很好奇哪種方法是最有效的?如果還有其他方法,請隨時通知我!

+0

您編寫和執行的所有代碼「會產生一些開銷」。你有沒有一個實際的性能問題?如果沒有,請選擇導致正確代碼更容易的地方。如果說「X比Y更有效率」,當它們都是完全不同的機制,具有不同的性能特徵時,碰巧完成相同的事情幾乎是無意義的。 – millimoose

+0

呵呵,實際上不是,它不是「無意義的」。對於樣板代碼,算法非常重要。否則,當你在其上構建時,最終會產生O(n^x)的複雜性。 –

+0

你並不是在編寫一個算法,而且這不是一個關鍵的代碼路徑,當差別可能是'O(n)'中'n'的不同值時,namedropping指數複雜性過於誇張,唯一的信息你有「我讀了一些開銷」,整個事情可能與其他代碼相比可以忽略不計。啓動更改通知的機制可能比基於該通知的任何操作都要小得多。 – millimoose

回答

2

您也可以將該成員封裝在更新函數中,該函數在設置新值後觸發事件,並在代碼中的其他位置偵聽事件。這將是非常有效的。

+0

這是一個更好的方法。 –

+1

這工作。我將簡單地設計框架的這一部分,以使用鍵值對接口來設置成員。 –

0

(旁註:你應該使用Object.observe()作爲Object.watch()是FF特定)

如果這是關於特定屬性則是在許多意義上使用虛擬財產的機制和提供自己制定者更好。檢查Object.defineProperty

+0

這是一個更通用的鍋爐板功能。 –