编写更好的jQuery代码

议论jQuery和Javascript机能的文章有许多。不过在这里我照样要总结一下jQuery的提速战略,另有我本身的一些发起,愿望这些发起能协助你写出更好的jQuery和JavaScript代码。更好的代码意味着更快的运用和无渣滓的网站。更快的衬着和相应意味着更好的用户体验。

《编写更好的jQuery代码》

起首,别忘了jQuery JavaScript。这意味着我们应当运用雷同的代码商定,作风指南最好实践

假如你是JavaScript新手,我发起你在尝试jQuery之前先浏览给新手的JavaScript最好实践,另有这篇编写优良JavaScript代码

当你预备运用jQuery的时刻,我强烈发起你恪守下面的指点。

变量缓存

遍历DOM是很高贵的,所以须要重用的元素要缓存起来。

// 不好

h = $('#element').height();
$('#element').css('height',h-20);

// 好

$element = $('#element');
h = $element.height();
$element.css('height',h-20);

防止全局变量

和平常的JavaScript一样,jQuery下也最好把你的变量的作用域限定在函数以内。

// 不好

$element = $('#element');
h = $element.height();
$element.css('height',h-20);

// 好

var $element = $('#element');
var h = $element.height();
$element.css('height',h-20);

运用匈牙利标记

在包含jQuery对象的变量前加上美圆标记,易于辨认。

// 不好

var first = $('#first');
var second = $('#second');
var value = $first.val();

// 好一点 -  我们在jQuery对象前加上了 $ 标记

var $first = $('#first');
var $second = $('#second'),
var value = $first.val();

单一Var情势

能够将多个Var语句合并为一个。我发起将未赋值的变量放在末了。

var 
  $first = $('#first'),
  $second = $('#second'),
  value = $first.val(),
  k = 3,
  cookiestring = 'SOMECOOKIESPLEASE',
  i,
  j,
  myArray = {};

运用On

新版的jQuery支撑click()之类的写法,将其作为on('click')的简写情势。然则在新近的版本中,click()却示意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');
})

精华精辟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'
    });
});

运用连锁

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

坚持可读性

过于寻求简短,滥用连锁,代码会因而变得不可读。尝试运用缩进和换行来坚持可读性。

// 不好

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

善用短路

运用&&||运算符。

// 不好

function initVar($myVar) {
    if(!$myVar) {
        $myVar = $('#selector');
    }
}

// 更好

function initVar($myVar) {
    $myVar = $myVar || $('#selector');
}

优先运用简写情势

这也是精华精辟代码的好要领

// 不好

if(collection.length > 0){..}

// 更好

if(collection.length){..}

大批操纵时星散元素

假如要对DOM元素举行大批操纵,发起先星散出来,预先从新增加。

// 不好

var 
    $container = $("#container"),
    $containerLi = $("#container li"),
    $element = null;

$element = $containerLi.first(); 
//... a lot of complicated things

// 更好

var 
    $container = $("#container"),
    $containerLi = $container.find("li"),
    $element = null;

$element = $containerLi.first().detach(); 
//...a lot of complicated things

$container.append($element);

进修秘诀

当你运用不熟悉的jQuery要领时,一定要看看文档,可能有更好更快的要领。

// 不好

$('#id').data(key,value);

// 更好 (更快)

$.data('#id',key,value);

缓存父元素

前面已提到了,遍历DOM是异常高贵的。平常而言,最好将父元素缓存起来,如许选定子元素的时刻能够重复运用。

// 不好

var 
    $container = $('#container'),
    $containerLi = $('#container li'),
    $containerLiSpan = $('#container li span');

// 更好 (更快)

var 
    $container = $('#container '),
    $containerLi = $container.find('li'),
    $containerLiSpan= $containerLi.find('span');

防止运用通用挑选符

当与其他selector组合运用时,universal selector极端迟缓。

// 不好

$('.container > *'); 

// 好一些

$('.container').children();

防止隐式通用挑选符

隐式通用挑选符一样要防止。

// 不好

$('.someclass :radio'); 

// 更好

$('.someclass input:radio');

优化挑选符

比方,运用ID就已充足,没必要再弄巧成拙。

// 不好

$('div#myid'); 
$('div#footer a.myLink');

// 更好
$('#myid');
$('#footer .myLink');

不要descend多个ID

ID已充足选定元素了,所以没有必要运用子女挑选符。

// 不好

$('#outer #inner'); 

// 更好

$('#inner');

只管运用最新版

最新一般意味着最好:偶然更轻量,偶然更疾速。明显,你须要斟酌代码兼容性。比方,别忘了2.0起jQuery不支撑IE 6/7/8了。

不要运用烧毁的要领

主要的是老是关注每次晋级时烧毁的要领,只管防止运用它们。

// 不好 - live已烧毁

$('#stuff').live('click', function() {
  console.log('hooray');
});

// 更好
$('#stuff').on('click', function() {
  console.log('hooray');
});

从CDN加载jQuery代码

Google CDN从离用户近来的缓存供应代码。只需运用此url即可享用Google CDN的优点:http://code.jquery.com/jQuery-latest.min.js

有必要的时刻夹杂原生JavaSCript代码

正如我前面说的,jQuery是JavaScript,这就意味着我们能够在jQuery下做原生JavaScript下能够做的事。编写原生(原味)JavaScript代码偶然意味着可读性和可维护性的下落,文件变长,然则这也意味着更快的代码。切记没有一个框架能够比原生JavaScript操纵更小、更轻、更快。(点击图片可运转测试。)

http://blog.mathewdesign.com/wp-content/uploads/2013/10/jq.png
http://jsperf.com/jQuery-vs-JavaScript-performance-comparison

因为原生JavaScript和jQuery的机能差别,我强烈发起明智地夹杂二者,状况许可的时刻运用jQuery函数的原生替代品

末了的斟酌

末了,我引荐进步jQuery机能一文,它包含了其他一些优越实践。假如你盘算深切的话,你会以为它们很有意义。

切记运用jQuery不是必须的,它只是一个挑选。想一想为何你运用它。操纵DOM?Ajax?模板?CSS动画?挑选符引擎?偶然刻,或许值得斟酌运用一个JavaScript微框架,或许运用合适你需求的jQuery定制构建

原文 Writing Better jQuery Code
翻译 SegmentFault

    原文作者:weakish
    原文地址: https://segmentfault.com/a/1190000000355106
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞