2012-09-10 26 views
4

我有這樣的代碼:

$(document).ready(function() { 

    $('.accessLink') 
     .bind('click', accessLinkClick); 
    $('#logoutLink') 
     .click(function (e) { 
      window.location = $(this).attr('data-href') 
     }); 

}); 

功能爲我的網站的每個部分分成若干小文件和當這個網站被部署時,這些網站將會被整合並加入進來。

這些小文件中的每一個最多可以等待$(document).ready。任何人都可以告訴我這樣做是否有很多開銷。分割我的代碼爲功能區域,意味着該代碼看起來很容易維護,但我只是想知道現在的開銷,我使用jQuery 1.8.1

更新:

基礎上的答案,我開始像這樣的代碼:

$(document).ready(function() { 

    accessButtons(); // login, register, logout 
    layoutButtons(); 
    themeButtons(); // theme switcher, sidebar, print page 

}); 

每個函數,則編碼爲:

function accessButtons() { 

    $('.accessLink') 
     .bind('click', accessLinkClick); 
    $('#logoutLink') 
     .click(function (e) { 
      window.location = $(this).attr('data-href') 
     }); 

}; 
+1

會有一個(非常)小的性能開銷,但是當你測試你的網頁時你可能不會注意到問題嗎?如果它簡化了維護,那麼這足以證明是正確的? – nnnnnn

+0

開銷包含多次調用'$()。ready'(而不是一個/幾個)並調用多個回調(而不是一個/幾個)。但是否對您的網站/應用程序的性能有任何影響是另一個問題。很可能不會。 –

+0

Check out http://stackoverflow.com/questions/1327756/can-you-have-multiple-document-readyfunction-sections或http://stackoverflow.com/questions/1148241/jquery-is-it-bad-to -have-multiple-document-readyfunction http://stackoverflow.com/questions/5263385/jquery-multiple-document-ready –

回答

3

如果代碼需要順序執行,那麼就應該在相同的DOM準備回調函數,否則,你可以將它們分成不同的dom ready回調。

+3

我假設回調是按照它們添加的順序執行的。 –

+0

@FelixKling - jQuery確保按照綁定的順序執行事件處理程序(當然,對於給定的元素和事件),但是在這種情況下,準備好的處理程序被分割到多個源文件中,這可能會導致維護問題因爲如果訂單很重要,那麼這些文件必須以正確的順序包含在內。 (我可以想象這樣一種情況,網站的十個頁面中有九個以正確的順序排列,但十分之一沒有......) – nnnnnn

+0

@xdazz - 我更新了我的問題,以顯示我現在編碼的方式。這看起來不錯。我認爲這沒關係,但希望得到第二個意見。 – Alan2

3

只有使用.ready()函數才能包裝所有需要運行的代碼,一旦加載了所有其他代碼並且頁面準備就緒後。如果你有任何可以自己運行的庫,並且不需要對DOM做任何事情,那麼你就不需要把它們放到一個準備好的調用中。

+0

另請注意,只有將所有其他

6

這裏的10個$(document).ready()呼叫與之間的區別一個然後調用10個初始化函數。

隨着10個電話,你會得到:

  • 10調用$(document)
  • 10個電話給.ready()方法。
  • DOM準備事件的一個事件監聽器
  • 當DOM準備好事件觸發時,它隨後遍歷一個回調數組,並調用每個回調傳遞給.ready()

如果你有一個$(document).ready()那然後叫你的初始化函數的所有10,你有這樣的:

  • 1次來電,$(document)
  • 1致電.ready()方法。
  • DOM ready事件的一個事件監聽器
  • 當DOM準備事件觸發時,它會調用您的一個就緒處理程序。
  • 準備好的處理程序然後調用10個初始化函數調用。

所以,差異大約是構建9個額外的jQuery對象並使9個額外的.ready()方法調用花費的時間。在極端情況下,這可能是顯而易見的,但不太可能在實踐中看到不同。

相關問題