zoukankan      html  css  js  c++  java
  • 高效JQuery的奥秘

    此文章修改自http://yanhaijing.com/jquery/2013/12/05/writing-better-jquery-code/,截取了其中认为很有用的部分。

    1.缓存变量,DOM遍历是昂贵的,所以尽量将会重用的元素缓存。

    // 糟糕
    h = $('#element').height();
    $('#element').css('height',h-20);
    
    // 建议
    $element = $('#element');
    h = $element.height();
    $element.css('height',h-20);

    2.避免全局变量,一般来说,最好确保你的变量在函数作用域内。

    // 糟糕
    $element = $('#element');
    h = $element.height();
    $element.css('height',h-20);
    
    // 建议
    var $element = $('#element');
    var h = $element.height();
    $element.css('height',h-20);

    3.匈牙利命名法,在变量前加$前缀,便于识别出jQuery对象。

    // 糟糕
    var first = $('#first');
    var second = $('#second');
    var value = $first.val();
    
    // 建议 - 在jQuery对象前加$前缀
    var $first = $('#first');
    var $second = $('#second'),
    var value = $first.val();

    4.请使用’On’,在新版jQuery中,更短的 on(“click”) 用来取代类似 click() 这样的函数。在之前的版本中 on() 就是 bind()。自从jQuery 1.7版本后,on() 附加事件处理程序的首选方法。然而,出于一致性考虑,你可以简单的全部使用 on()方法。

    // 糟糕
    $first.click(function(){
        $first.css('border','1px solid red');
        $first.css('color','blue');
    });
    $first.hover(function(){
        $first.css('border','1px solid red');
    })
    
    // 建议
    $first.on('click',function(){
        $first.css('border','1px solid red');
        $first.css('color','blue');
    })
    $first.on('hover',function(){
        $first.css('border','1px solid red');
    })

    5.精简javascript,最好尽可能合并函数。

    // 糟糕
    $first.click(function(){
        $first.css('border','1px solid red');
        $first.css('color','blue');
    });
    
    // 建议
    $first.on('click',function(){
        $first.css({
            'border':'1px solid red',
            'color':'blue'
        });
    });

    6.链式操作,jQuery实现方法的链式操作是非常容易的。

    // 糟糕
    $second.html(value);
    $second.on('click',function(){
        alert('hello everybody');
    });
    $second.fadeIn('slow');
    $second.animate({height:'120px'},500);
    
    // 建议
    $second.html(value);
    $second.on('click',function(){
        alert('hello everybody');
    }).fadeIn('slow').animate({height:'120px'},500);

    7.维持代码的可读性,伴随着精简代码和使用链式的同时,可能带来代码的难以阅读。添加缩紧和换行能起到很好的效果。

    // 糟糕
    $second.html(value);
    $second.on('click',function(){
        alert('hello everybody');
    }).fadeIn('slow').animate({height:'120px'},500);
    
    // 建议
    $second.html(value);
    $second
        .on('click',function(){ alert('hello everybody');})
        .fadeIn('slow')
        .animate({height:'120px'},500);

    8.选择短路求值

    // 糟糕
    function initVar($myVar) {
        if(!$myVar) {
            $myVar = $('#selector');
        }
    }
    
    // 建议
    function initVar($myVar) {
        $myVar = $myVar || $('#selector');
    }

    9.繁重的操作中分离元素,如果你打算对DOM元素做大量操作(连续设置多个属性或css样式),建议首先分离元素然后在添加。

    // 糟糕
    var 
        $container = $("#container"),
        $containerLi = $("#container li"),
        $element = null;
    
    $element = $containerLi.first(); 
    //... 许多复杂的操作
    
    // better
    
    var 
        $container = $("#container"),
        $containerLi = $container.find("li"),
        $element = null;
    
    $element = $containerLi.first().detach(); 
    //... 许多复杂的操作
    $container.append($element);

    10.更好或更快的方法来使用JQuery方法。

    // 糟糕
    $('#id').data(key,value);
    
    // 建议 (高效)
    $.data('#id',key,value);

    11.使用子查询缓存的父元素,正如前面所提到的,DOM遍历是一项昂贵的操作。典型做法是缓存父元素并在选择子元素时重用这些缓存元素。

    // 糟糕
    var 
        $container = $('#container'),
        $containerLi = $('#container li'),
        $containerLiSpan = $('#container li span');
    
    // 建议 (高效)
    var 
        $container = $('#container '),
        $containerLi = $container.find('li'),
        $containerLiSpan= $containerLi.find('span');

    12.避免通用选择符,将通用选择符放到后代选择符中,性能非常糟糕。

    // 糟糕
    $('.container > *'); 
    
    // 建议
    $('.container').children();

    13.避免隐式通用选择符

    // 糟糕
    $('.someclass :radio'); 
    
    // 建议
    $('.someclass input:radio');

    14.优化选择符

    // 糟糕
    $('div#myid'); 
    $('div#footer a.myLink');
    
    // 建议
    $('#myid');
    $('#footer .myLink');

    15.避免多个ID选择符

    // 糟糕
    $('#outer #inner'); 
    
    // 建议
    $('#inner');


     

  • 相关阅读:
    ABAP 程序中的类 沧海
    ABAP类的方法(转载) 沧海
    More than 100 ABAP Interview Faq's(2) 沧海
    SAP and ABAP Memory总结 沧海
    ABAP Frequently Asked Question 沧海
    ABAP System Reports(Additional functions) 沧海
    ABAP Questions Commonly Asked 1 沧海
    ABAP Tips and Tricks 沧海
    ABAP System Fields 沧海
    ABAP 面试问题及答案(一):数据库更新及更改 SAP Standard (转) 沧海
  • 原文地址:https://www.cnblogs.com/aotian/p/4119515.html
Copyright © 2011-2022 走看看