高效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‘);
时间: 2024-11-06 11:35:43

高效JQuery的奥秘的相关文章

探索高效jQuery的奥秘

讨论jQuery和javascript性能的文章并不罕见.然而,本文我计划总结一些速度方面的技巧和我本人的一些建议,来提升你的jQuery和javascript代码.好的代码会带来速度的提升.快速渲染和响应意味着更好的用户体验. 首先,在脑子里牢牢记住jQuery就是javascript.这意味着我们应该采取相同的编码惯例,风格指南和最佳实践. 首先,如果你是一个javascript新手,我建议您阅读 <给JavaScript初学者的24条最佳实践> ,这是一篇高质量的javascript教程

高效JQuery代码编写

缓存变量 DOM遍历是昂贵的,所以尽量将会重用的元素缓存. // 糟糕 h = $('#element').height(); $('#element').css('height',h-20); // 建议 $element = $('#element'); h = $element.height(); $element.css('height',h-20); 避免全局变量 jQuery与javascript一样,一般来说,最好确保你的变量在函数作用域内. // 糟糕 $element = $(

算法心得-高效算法的奥秘(原书第2版)pdf高清版免费下载

下载地址:网盘下载 备用地址:网盘下载 原文地址:https://www.cnblogs.com/hsqdboke/p/9783480.html

总会有一个是你需要的

http://www.shouce.ren/post/d/id/112300 黑客攻防实战入门与提高.pdfhttp://www.shouce.ren/post/d/id/112299 黑客入门新手特训.pdfhttp://www.shouce.ren/post/d/id/112298 黑客与设计-剖析设计之美的秘密(彩印).pdfhttp://www.shouce.ren/post/d/id/112297 鸟哥的LINUX私房菜:服务器架设篇 (第二版).pdfhttp://www.shouc

架构师 必备资料

 架构师 必备资料 Apache 使用指南与实现原理.pdf: http://www.t00y.com/file/68570832 How Tomcat Works中文版.pdf: http://www.t00y.com/file/68572394 Java开发技术  在架构中体验设计模式和算法之美 高清扫描完整PDF版.pdf: http://www.t00y.com/file/68521000 jee webserver cluster.pdf: http://www.t00y.com/

《算法心得》一点整理

最近在图书馆看到本神书<算法心得:高效算法的奥秘>,主要讲解计算机算法的,强调编译器优化和计算机体系结构设计的.虽然看的不大懂,但还是给自己增长了见识和知识.少许整理些自己感兴趣的算法,以备后续温故知新. 1. 操作最右边的位元 a. 将字组中值为1且最靠右的位元置0,如果不存在值为1的位元,则全部结果为0(例如 0101 1110 => 0101 1100): x & (x-1) 这个操作可以判断无符号证书是不是2的幂或者0. b. 将字组中值为0且最靠右的位元置1,如果不存在

转置位矩阵

/* * http://www-graphics.stanford.edu/~seander/bithacks.html#ReverseByteWith64Bits * * 0010 0100 -- 24 * 0010 0001 -- 21 * 1111 0000 -- F0 * 0111 1111 -- 7F * 1000 0000 -- 80 * 0011 0111 -- 37 * 1111 1111 -- FF * 0001 1111 -- 1F * |||| |||| * 4CFC 89

我的GTD中收集的书单

在几年的GTD过程中,收集了一些想读的书目,没有系统地整理,每当读完一本之后,就翻翻书单,寻找下一本感兴趣的书,书是不可能读完的,只能找有兴趣的.符合自己目标方向的.有些书记录了豆瓣上的评分,虽然不是很准,但可作为选书的一项参考吧. 谁如果强烈推荐哪本书,请把书名加条评注吧. 穷爸爸富爸爸 影响力 科技需要什么 李鸿章传 希特勒传 走出思维的误区,8.6  副标题: 批判性思维指南(修订第9版) 钱不要存银行,胜间和代 瓦尔登湖,8.5 学习之道,8.5 Founders at Work 改写生

ConcurrentHashMap中的2的n次方幂上舍入方法(转)

最近看JDK中的concurrentHashMap类的源码,其中有那么一个函数: /** * Returns a power of two table size for the given desired capacity. * See Hackers Delight, sec 3.2 */ private static final int tableSizeFor(int c) { int n = c - 1; n |= n >>> 1; n |= n >>> 2;