Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.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 更好的JQuery性能语法?_Javascript_Jquery - Fatal编程技术网

Javascript 更好的JQuery性能语法?

Javascript 更好的JQuery性能语法?,javascript,jquery,Javascript,Jquery,以下2种语法是否存在性能差异 $(“span.foo”) $(“.foo”) 有人告诉我,第一种方法只会搜索span,其类是foo,而第二种方法会在所有元素中进行搜索。如果您正在寻找与性能相关的问题,最好对不同的解决方案进行基准测试,以确定哪种解决方案更好 基于标记,它们可能有不同的结果 但是如果类foo只有span,那么第二个会更快。 原因可能是在第一种情况下,它将首先加载文档中的所有span,然后使用类foo对其进行过滤,而第二种情况下,您将使用本机getElementsByClassnam

以下2种语法是否存在性能差异

  • $(“span.foo”)
  • $(“.foo”)

  • 有人告诉我,第一种方法只会搜索
    span
    ,其类是
    foo
    ,而第二种方法会在所有元素中进行搜索。

    如果您正在寻找与性能相关的问题,最好对不同的解决方案进行基准测试,以确定哪种解决方案更好

    基于标记,它们可能有不同的结果

    但是如果类
    foo
    只有
    span
    ,那么第二个会更快。
    原因可能是在第一种情况下,它将首先加载文档中的所有span,然后使用类
    foo
    对其进行过滤,而第二种情况下,您将使用本机
    getElementsByClassname
    获取元素


    看看这个

    谁告诉过你这是正确的

    当在100000次迭代中选择两个元素时,看起来大约需要半秒钟(Firefox,Chrome比这要短)

    var开始、结束、i;
    开始=新日期();
    对于(i=0;i<100000;i++){
    $(“span.foo”);
    }
    结束=新日期();
    $(“span.foo”).html(结束-开始);
    开始=新日期();
    对于(i=0;i<100000;i++){
    $(“.foo”);
    }
    结束=新日期();
    $(“div.foo”).html(结束-开始);
    
    我相信你可以想象,选择更多的元素肯定需要更长的时间。您可能也不会选择100000次,但随着网站变得越来越大,javascript性能可能是最大的因素之一,jQuery的上下文和选择器可以提高效率


    此外,如果您只想将函数应用于具有“foo”类的跨距,您可能正在选择不需要的元素。

    有人从Word中复制/粘贴代码,
    “!=“
    当然,他们会选择不同的东西。CSS选择器就是这样工作的。性能差异是不相关的。使用选择你需要的元素的那一个。这是半不相关的,除非用户感觉到。希望你永远不会有不同的类和元素标记行。他们在做不同的事情。不是吗试图比较它们的性能是没有意义的。苹果对桔子,等等。
    var start, end, i;
    
    start = new Date();
    for(i = 0; i < 100000; i++){
        $("span.foo");
    }
    end = new Date();
    $("span.foo").html(end - start);
    
    start = new Date();
    for(i = 0; i < 100000; i++){
        $(".foo");
    }
    end = new Date();
    $("div.foo").html(end - start);