Javascript 如何提高效率?
我正在使用以下代码(简化): 所讨论的Javascript 如何提高效率?,javascript,jquery,performance,Javascript,Jquery,Performance,我正在使用以下代码(简化): 所讨论的表单可能包含动态添加的输入,但是定义的els对象是静态的,如果表单获得新的输入,radio和check不会更改。我需要在整个代码中经常使用els,因此我提出了一个简单的解决方案: var getEls = function () { return { radio: $form.find('input[type=radio]'), check: $form.find('input[type=checkbox]') } } var fo
表单
可能包含动态添加的输入,但是定义的els
对象是静态的,如果表单获得新的输入,radio
和check
不会更改。我需要在整个代码中经常使用els
,因此我提出了一个简单的解决方案:
var getEls = function () {
return {
radio: $form.find('input[type=radio]'),
check: $form.find('input[type=checkbox]')
}
}
var foo = function () {
var els = getEls()
// do something with `els`
}
这很好,但我认为这可能不会提供最佳性能,因为它每次都必须再次查询所有元素。有更好的方法吗?如果不在循环中调用
getEls()
,性能应该可以。但是,由于您可以控制向表单中添加元素,因此有一些方法可以简化代码
使用属性
使用表单上的数据属性保存特定元素的数量,以便在执行完全刷新之前将其与保存的元素数量进行比较
function() {
var checkBoxCount = parseInt($form.data("checkbox-count"), 10);
$("form").append("<input type='checkbox'>");
// now increment the count and re-save it
$form.data("checkbox-count", checkBoxCount+1);
};
function(){
var checkBoxCount=parseInt($form.data(“checkbox count”),10);
$(“表格”)。附加(“”);
//现在增加计数并重新保存
$form.data(“复选框计数”,复选框计数+1);
};
更新集合
在将对象添加到dom中时,还可以将其添加到保存的集合中
function() {
var $checkbox = $("<input type='checkbox'>");
$("form").append($checkbox);
els.check = els.check.add(checkbox);
};
function(){
var$checkbox=$(“”);
$(“表格”)。附加($复选框);
els.check=els.check.add(复选框);
};
多久添加一次新输入?当情况发生变化时,您是否可以更新您的els
变量?您是否确实存在性能问题?如果没有,谁会在乎…@Obrian先生,只要他们需要。我曾考虑过要更新setter,但实际上没有意义,因为选择器总是相同的。我会告诉你…@Karoly Horvath好吧,我还没有用其他解决方案做过任何测试,但我的代码越来越大,我只是想知道这是否会变得更难维持,是否会影响长期性能。+1这很有趣,我不知道用我当前的代码更新集合是否那么容易,因为我有很多选择器,但最好跟踪长度,以便在相同时不刷新,但会带来另一个问题,因为输入也可以删除。在这种情况下,您只需从count变量中减去。或者,要从集合中删除元素,可以使用$.fn.not(/*element或selector*/)
返回新集合,而不使用传递的元素或选择器。
function() {
var $checkbox = $("<input type='checkbox'>");
$("form").append($checkbox);
els.check = els.check.add(checkbox);
};