• 微众银行面试小总结


    昨天进行微众银行的面试,其中有一个面试题目引起了我的兴趣(恭喜你,成功引起我的兴趣→_→)就是在jquery选择器中$('#div .cls')和$('#div').find('.cls')有什么不同

    当时知道这个问题的时候,我是懵逼的,因为我从来没有思考过这个问题,最近用cheerio经常用到find来查找,但是也没有思考过。于是在面试完后查阅API,谷歌只能找到一些比较理论的解释

    和同事交流,得出结果是:

        $()选择时返回的是一个jquery对象,而find方法是调用这个对象的方法。

      所以按照这样来说,$()会比find快,如果这个问题就这样完结了那就太没意思了,当时面试回答的是find方法的查询效率会更高(程序员的直觉),但是作为一个科学的程序员,咱们可不能凭直觉说话,刚刚洗澡的时候又想起这个问题,

    于是洗完澡赶紧出来手写了个demo,如下:

    http://2.danielcv.sinaapp.com/sae/jquerySelectorDemo/index2.html

    源码在此:

    
    
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Document</title>
     6     <style>
     7         
     8     </style>
     9 </head>
    10 <body>
    11     <div id='target'>
    12         <div id="div">
    13             <span class="cls">ddd</span>
    14             <span class="cls">ddd</span>
    15             <span class="cls">ddd</span>
    16         </div>
    17     </div>
    18     <button value="start" id='startBtn'>start</button>
    19     <input type="text" id='result'>
    20     <input type="text" id='findRes'>
    21     <input type="text" id='test3'>
    22     <script src='http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js'></script>
    23     <script>
    24         $(function(){
    25             $('#startBtn').click(function(){
    26             var start=(new Date()).getTime();
    27             for(var i=0;i<100000;i++){
    28                 $('#div .cls').css("background-color",'red');
    29             }
    30             var end=(new Date()).getTime();
    31             $('#result').val(end-start);
    32             console.log(end-start);
    33 
    34             start=(new Date()).getTime();
    35             for(var i=0;i<100000;i++){
    36                 $('#div').find('.cls').css("background-color",'red');
    37             }
    38             end=(new Date()).getTime();
    39             $('#findRes').val(end-start);
    40             console.log(end-start);
    41 
    42             start=(new Date()).getTime();
    43             for(var i=0;i<100000;i++){
    44                 $('.cls').css("background-color",'red');
    45             }
    46             end=(new Date()).getTime();
    47             $('#test3').val(end-start);
    48             console.log(end-start);
    49             })
    50         })
    51     </script>
    52 </body>
    53 </html>
    
    
    
     

    每一次的第一次执行结果,一定是find方法花的时间会比直接查找会少,因此,推翻了之前的那个结论,至于为什么?

    我的观点是这样的:

      CSS的选择器的匹配规则是从右到左的,我猜JQUERY也是这样,也就是说比如:

     $('#div .cls')会在dom树中先查找.cls的类,再从这些类中查找其ID为div的节点,因此这样的写法是比较耗时的。

    说到这里,你应该懂我的意思了吧?!
    好,抱着验证我的观点的想法,我再写了一次代码,就是现在你看到的第三个input框,他是直接查找$('.cls')的结果,数据说话,它所耗费的时间是最短的。
    我想,到了这里,似乎可以做一个小总结了,
    之前所得的结论并没有错————$()选择时返回的是一个jquery对象,而find方法是调用这个对象的方法。
    然而在查找嵌套层次比较深,或者查询次数比较多的情况下find的效率会更高效
    然而真正的原因是不是这样呢?!欢迎各位留言或者私信我一起探讨~!
  • 相关阅读:
    Java修改excel内容
    text标签onchang事件
    shh将数据导出excel
    正则表达式0到200以内的数
    虚拟内存与物理内存
    捕获内核的异常事件
    linux内存(三)内核与用户空间交互
    linux内存(二)高端内存
    linux内存(一) 内核空间与用户空间
    使用tc配置后端设备,来限制虚拟机网卡带宽
  • 原文地址:https://www.cnblogs.com/danielweb/p/4954804.html
Copyright © 2020-2023  润新知