2011-09-12 68 views
3

在我正在構建的Web應用程序中,我有兩個鬆散相關的代碼,每隔一秒鐘在兩個獨立的計時器中運行。兩個JavaScript定時器vs一個定時器,性能是否值得放棄?

我正在尋找優化Javascript,是否值得將這兩個計時器合併爲一個,還是隻是在頂部?

實際上,我是否會通過將兩個1秒的間隔合併爲一個1秒的間隔來提高任何性能(考慮到我們不知道訪問者正在運行什麼類型的系統)?

據我所知,JavaScript是單線程的,所以發生的事情越多,這些堆積起來越多,並阻止其他事情發生(特別是定時器)。我只是不知道每秒鐘運行一個可怕的計時器是否是一個問題。

保持兩個定時器分開的原因純粹是代碼可讀性,這在控制硬件的服務器端很好,但我不知道我的訪問者將運行什麼樣的瀏覽器或硬件。

謝謝。

+0

到目前爲止,您是如何測試的? –

回答

3

就可以完成的整體操作數而言,不,沒有可測量的差異。然而,在保持多個定時器的情況下,可能存在認爲其性能優勢。在單個計時器迭代中同步運行的代碼越多,所有DOM更新和某些類型的用戶交互就會「暫停」的時間越長。通過將它們分成多個定時器,您可以在定時器迭代之間進行其他更新,因此用戶可以獲得「更流暢」的體驗。

然而,在這種情況下,有可能在感知性能方面甚至沒有差別,所以我會這樣做,無論哪種方式都會使代碼組織變得更簡單。

1

如果性能真的是你可以只創建1個定時器,例如一個問題,用它來調用這兩個函數:

function update() 
{ 
    A(); //Do your first task 
    B(); //Do the second 

    setTimeout("update()", 1000); 

} 

update(); 

然而,如何確保你的瓶頸是這個定時器內?先嚐試測量,並且不要優化應用程序的錯誤部分。

1

我敢打賭,你會通過消除JS級別的時鐘處理來提高性能。你肯定不會性能下降性能,並且,只有一個計時器運行,我認爲你會增強代碼的可維護性,如果不是可讀性。在我現在正在處理的應用程序中,我有一個定時器運行來處理三項任務:一種特殊的滾動方式,更改大概300個單元的背景圖像,並檢查是否該刷新頁面併發出一個AJAX請求如果是的話。該計時器運行時間間隔爲1/10秒,而且事情很緊張,但是代碼能夠完成所有這些工作,偶爾會有一個時鐘週期在前一個時鐘週期結束。

所以我懷疑你會有1秒的間隔和只有一個滴答處理程序的麻煩。