Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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 什么是更快的-$().closest()或本机while循环?_Javascript_Jquery_Performance - Fatal编程技术网

Javascript 什么是更快的-$().closest()或本机while循环?

Javascript 什么是更快的-$().closest()或本机while循环?,javascript,jquery,performance,Javascript,Jquery,Performance,我有自己的下拉列表实现。我将所有列表标识符存储在全局数组中,并在窗口中单击事件,我将遍历该数组并决定必须隐藏哪个列表 我需要检查元素是否具有.active类的祖先 jQuery版本: for (var i = 0; i < window.dropdowns.length; i++) { var e = window.dropdowns[i]; if ($(event.target).closest('.active').length == 0) {

我有自己的下拉列表实现。我将所有列表标识符存储在全局数组中,并在
窗口
中单击事件,我将遍历该数组并决定必须隐藏哪个列表

我需要检查元素是否具有
.active
类的祖先

jQuery版本:

    for (var i = 0; i < window.dropdowns.length; i++) {
        var e = window.dropdowns[i];
        if ($(event.target).closest('.active').length == 0) {
            e.hideList();
        }
    }
for(变量i=0;i
纯javascript版本:

for (var i = 0; i < window.dropdowns.length; i++) {
    var e = window.dropdowns[i];
    var parent = event.target.parentElement;
    while (parent.tagName != 'BODY') {
        if (parent.className.indexOf('active') > 0) {
            e.hideList();
            break;
        }

        parent = parent.parentElement;
    }
}
for(变量i=0;i0){
e、 神秘主义者();
打破
}
parent=parent.parentElement;
}
}

那么,哪个版本的速度更快?性能如何取决于页面上元素的数量?

如果您对了解硬数字感兴趣,可以将循环转化为函数,并使用和使用它们。大概是这样的:

//First while loop
console.time(firstWhileLoopInFunction)
console.timeEnd(firstWhileLoopInFunction)

//Second while loop
console.time(secondWhileLoopInFunction)
console.timeEnd(secondWhileLoopInFunction)

如果您对了解硬数字感兴趣,您可以将循环转换为函数,并在其上使用和。大概是这样的:

//First while loop
console.time(firstWhileLoopInFunction)
console.timeEnd(firstWhileLoopInFunction)

//Second while loop
console.time(secondWhileLoopInFunction)
console.timeEnd(secondWhileLoopInFunction)

如果你只是想知道什么是最快的,去发现。如果你想知道为什么


jQuery将做比您需要的更多的工作,例如,您只测试标记名和类名

话虽如此,您的代码可能会给出误报,因为如果元素的类为notactive,则
className.indexOf('active')
将返回>-1。改用classList

最后,如果您已经在使用jQuery,那么应该使用它,因为我们刚刚向您展示了我们自己编写的代码可能有缺陷,在这种情况下,性能可能并不重要


记住,过早优化是许多意大利面代码的根源。

如果你只是想知道什么是最快的,那就去看看吧。如果你想知道为什么


jQuery将做比您需要的更多的工作,例如,您只测试标记名和类名

话虽如此,您的代码可能会给出误报,因为如果元素的类为notactive,则
className.indexOf('active')
将返回>-1。改用classList

最后,如果您已经在使用jQuery,那么应该使用它,因为我们刚刚向您展示了我们自己编写的代码可能有缺陷,在这种情况下,性能可能并不重要


请记住,过早优化是许多意大利面条式代码的根源。

您可能应该使用jQuery方法而不是父类,因为如果找到元素,它将停止迭代,而父类则不会。请在此阅读更多内容,谢谢,@Esko。但问题仍然存在。最接近的
会比
循环时的
快吗?我将更新我的问题。为什么不试试看呢?简单的性能问题,可以很容易地测试。查询将做比您需要更多的工作,例如,您只测试标记名和类名。话虽如此,您的代码可能会给出误报,因为如果元素的类为notactive,则
className.indexOf('active')
将返回>-1。改用classList。最后,如果您已经在使用jQuery,那么您应该使用它,因为我们刚刚向您展示了我们自己编写的代码可能存在缺陷,并且性能可能并不重要。在这种情况下,您可能应该使用jQuery方法,而不是父代,因为如果找到元素,它将停止迭代,父代不会。请在此阅读更多内容,谢谢,@Esko。但问题仍然存在。最接近的
会比
循环时的
快吗?我将更新我的问题。为什么不试试看呢?简单的性能问题,可以很容易地测试。查询将做比您需要更多的工作,例如,您只测试标记名和类名。话虽如此,您的代码可能会给出误报,因为如果元素的类为notactive,则
className.indexOf('active')
将返回>-1。改用classList。最后,如果您已经在使用jQuery,那么应该使用它,因为我们刚刚向您展示了我们自己编写的代码可能有缺陷,在这种情况下,性能可能并不重要