我正在構建一個大量使用jQuery插件和大量綁定的Web應用程序。jQuery,什麼是最好的,有整個站點或每頁基於一個文件綁定的所有綁定?
後端是使用模板系統開發的,它只允許(現在)將所有腳本放在該HTML文件中。我們將使用YUI壓縮器將所有這些合併爲一個。
現在,對於綁定來說,對於可能不存在於特定頁面中的元素,在HTML文件(現在是整個站點的模板)中綁定有多糟?
任何意見是極大的讚賞
我正在構建一個大量使用jQuery插件和大量綁定的Web應用程序。jQuery,什麼是最好的,有整個站點或每頁基於一個文件綁定的所有綁定?
後端是使用模板系統開發的,它只允許(現在)將所有腳本放在該HTML文件中。我們將使用YUI壓縮器將所有這些合併爲一個。
現在,對於綁定來說,對於可能不存在於特定頁面中的元素,在HTML文件(現在是整個站點的模板)中綁定有多糟?
任何意見是極大的讚賞
我一直在大網站上使用Paul Irish's markup-based solution相當廣泛。
最大的問題是,你可以得到你沒有打算有綁定,造成麻煩......
當然,你會在頁面加載時有一些性能問題,但是如果這是一個問題,當然取決於你有多少個綁定以及代碼的樣子。
在客戶端(解析文件,執行文檔就緒處理程序)可能會失去一些性能,但它改善了客戶端上的緩存(即文件不需要多次傳輸)。這也節省了服務器查找。我認爲這只是一個優勢而不是缺點,只要你能確保你不會意外修改對象。
我認爲選擇器引擎足夠快,您或任何其他人都不應該注意到差異。
顯然這不是一個「最佳實踐」,但如果你綁定到ID和類名,並且你不會有任何衝突或意外的綁定,那麼我不會看到傷害。
如果您有一些大頁面,請注意您的選擇器。例如,如果您的頁面有大但惰性(沒有綁定)的表格,但其他頁面的表格很小但有控件,您可能不想這樣做:
$('td.bindMe').bind('whatever', function() { ... });
(在這裏拋開live()問題;有時你需要做逐元素工作,這就是我所說的)。問題是Sizzle將不得不瀏覽頁面上的所有td元素,可能。取而代之的是,你可以把一些有點像與控制「活動」表周圍的事物「標記」的容器,和工作這種方式:
$('table#withControls').find('td.bindMe').bind(/* ... */);
這樣嘶嘶只需要弄清楚的是有沒有所謂的表「 withControls「,然後完成。
這樣做的最大問題之一就是性能 - 選擇器將被評估,並且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();
}
})();
這是優秀的!我已經在實施它,到目前爲止,該應用感覺更加流暢。 – Sam3k 2010-02-11 21:11:03