2010-02-11 50 views
5

我正在構建一個大量使用jQuery插件和大量綁定的Web應用程序。jQuery,什麼是最好的,有整個站點或每頁基於一個文件綁定的所有綁定?

後端是使用模板系統開發的,它只允許(現在)將所有腳本放在該HTML文件中。我們將使用YUI壓縮器將所有這些合併爲一個。

現在,對於綁定來說,對於可能不存在於特定頁面中的元素,在HTML文件(現在是整個站點的模板)中綁定有多糟?

任何意見是極大的讚賞

回答

2

我一直在大網站上使用Paul Irish's markup-based solution相當廣泛。

+0

這是優秀的!我已經在實施它,到目前爲止,該應用感覺更加流暢。 – Sam3k 2010-02-11 21:11:03

0
使用的所有網頁上的所有綁定

最大的問題是,你可以得到你沒有打算有綁定,造成麻煩......

當然,你會在頁面加載時有一些性能問題,但是如果這是一個問題,當然取決於你有多少個綁定以及代碼的樣子。

0

在客戶端(解析文件,執行文檔就緒處理程序)可能會失去一些性能,但它改善了客戶端上的緩存(即文件不需要多次傳輸)。這也節省了服務器查找。我認爲這只是一個優勢而不是缺點,只要你能確保你不會意外修改對象。

0

我認爲選擇器引擎足夠快,您或任何其他人都不應該注意到差異。

顯然這不是一個「最佳實踐」,但如果你綁定到ID和類名,並且你不會有任何衝突或意外的綁定,那麼我不會看到傷害。

1

如果您有一些大頁面,請注意您的選擇器。例如,如果您的頁面有大但惰性(沒有綁定)的表格,但其他頁面的表格很小但有控件,您可能不想這樣做:

$('td.bindMe').bind('whatever', function() { ... }); 

(在這裏拋開live()問題;有時你需要做逐元素工作,這就是我所說的)。問題是Sizzle將不得不瀏覽頁面上的所有td元素,可能。取而代之的是,你可以把一些有點像與控制「活動」表周圍的事物「標記」的容器,和工作這種方式:

$('table#withControls').find('td.bindMe').bind(/* ... */); 

這樣嘶嘶只需要弄清楚的是有沒有所謂的表「 withControls「,然後完成。

2

這樣做的最大問題之一就是性能 - 選擇器將被評估,並且DOM搜索的每個綁定都不是針對特定頁面的。至少,可能需要設置一個對象字面值,以便根據頁面標識符(可能是window.location.href或其子字符串)運行適當的就緒綁定代碼。像

// avoid global pollution! 
(function() { 

    var pages = { 

     pageX : { 

      ready: function() { /* code to run on ready */ }, 
      teardown: function() { /* code to run on teardown */ } 

     }, 

     pageY : { 

      ready: function() { /* code to run on ready */ }, 
      teardown: function() { /* code to run on teardown */ } 

     }, 

    } 

    // set up ready event handler 
    $(ready); 

    // handler function to execute when ready event raised 
    // Note: Access to pages through closure 
    function ready() { 
     var location = window.location.href; 
     pages[location].ready(); 
    } 

})(); 
相關問題