Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何提高效率?_Javascript_Jquery_Performance - Fatal编程技术网

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);
};