我正在嘗試解決一些我一直在工作幾天的JavaScript的一些性能問題。其中一個功能件的低於:用jQuery選擇價值選項的性能更好?
var removeAddress = function(pk) {
var startTime = new Date();
jQuery('.add_driver select.primary_address:has(option[value=' + pk + ']:selected)').each(function(c, o) {
console.log("Shouldn't get here yet...");
showInputs(o);
});
console.log('removeAddress1: ', (new Date() - startTime)/1000);
jQuery('.add_driver select.primary_address option[value=' + pk + ']').remove();
console.log('removeAddress2: ', (new Date() - startTime)/1000);
};
此代碼是非常強力的Firefox中:
removeAddress1: 0.004
removeAddress2: 0.023
但在IE8它是另一個故事:
LOG: removeAddress1: 0.203
LOG: removeAddress2: 0.547
中的表單問題是一個20個人的名字,姓氏和地址字段。我還下拉選擇了其他已經存在於表格中的地址(.primary_address
)。此代碼正在從主地址選擇框中刪除地址。
我想明白爲什麼這需要這麼長時間,唯一突出的是option[value=????]
部分。這是找到有問題的元素的最實用的方法,所以我用它跑。這兩個選擇器是否會導致IE失去午餐?
很好的使用'filter'。應該足夠快,但他肯定需要從一個ID開始。我記得讀過一些關於按照課程選擇特別緩慢的東西...即 – jasongetsdown 2010-07-21 20:42:24
ID可能會更快,但我有20個主要地址下拉列表,而不是一個。 – 2010-07-21 20:47:12
如果它們全都以相同的形式將id分配給表單。如果不是,則將其分配給他們最近的共同祖先。任何讓jQ不必從根開始搜索的東西。好處取決於你的頁面結構。它肯定不會變慢,並且可能會更快。遍歷需要時間。 – jasongetsdown 2010-07-21 20:57:10