编写高性能的jquery代码

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

// 优秀代码
var $first = $('#first');
var $second = $('#second'),
var value = $first.val();
复制代码

4,变量定义尽量在一行,不要多行定义,建议把没有值的放在最后

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

5,使用事件的时候,尽量用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');
})
复制代码

6,合并函数

复制代码
// 垃圾代码
$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'
    });
});
复制代码

7,使用链式结构代码

复制代码
// 垃圾代码
$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);
复制代码

8,增强代码可读性

复制代码
// 垃圾代码
$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);
复制代码

9,使用短路循环表达式,从左边优先匹配,最后到右边

复制代码
// 垃圾代码
function initVar($myVar) {
    if(!$myVar) {
        $myVar = $('#selector');
    }
}

// 优秀代码
function initVar($myVar) {
    $myVar = $myVar || $('#selector');
}
复制代码

10,使用简写

// 垃圾代码
if(collection.length > 0){..}

// 优秀代码
if(collection.length){..}

11,对元素进行大量操作时应选择拆卸,最后在组装在一起

复制代码
// 垃圾代码
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);
复制代码

12,技巧

// 垃圾代码
$('#id').data(key,value);

// 优秀代码
$.data('#id',key,value);

13,使用缓存父元素方法进行子查询

复制代码
// 垃圾代码
var 
    $container = $('#container'),
    $containerLi = $('#container li'),
    $containerLiSpan = $('#container li span');

// 优秀代码
var 
    $container = $('#container '),
    $containerLi = $container.find('li'),
    $containerLiSpan= $containerLi.find('span');
复制代码

14,避免通用选择器,尽量不要用*

// 垃圾代码
$('.container > *'); 

// 优秀代码
$('.container').children();

15,避免默认通用选择器

// 垃圾代码
$('.someclass :radio'); 

// 优秀代码
$('.someclass input:radio');

16,尽量用id选择器

// 垃圾代码
$('div#myid'); 
$('div#footer a.myLink');

// 优秀代码
$('#myid');
$('#footer .myLink');

17,不要用多个id选择器

// 垃圾代码
$('#outer #inner'); 

// 优秀代码
$('#inner');

18,不要使用废弃的方法

复制代码
// 垃圾代码 - live is deprecated

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

// 优秀代码
$('#stuff').on('click', function() {
  console.log('hooray');
});
复制代码

本文转自:https://modernweb.com/writing-better-jquery-code/

posted @   ppjj  阅读(276)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示