【JQuery】15个值得开发人员关注的jQuery开发技巧和心得

在这篇文章中,我们将介绍15个让你的jQuery更加有效的技巧,大部分关于性能提升的,希望大家能够喜欢!

1. 尽量使用最新版本的jQuery类库

jQuery项目中使用了大量的创新。最好的方法来提高性能就是使用最新版本的jQuery。每一个新的版本都包含了优化的bug修复。对我们来说唯一要干的就是修改tag,何乐而不为呢?

我们也可以使用免费的CDN服务,例如, Google来存放jQuery类库。

<!-- Include a specific version of jQuery -->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<!-- Include the latest version in the 1.6 branch -->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script>

2. 使用简单的选择器

直 到最近,返回DOM元素的方式都是解析选择器字符串,javascript循环和内建的javascript API例如,getElementbyId(),getElementsByTagName(),getElementsByClassName()三种 方式的整合使用。但是现代浏览器都开始支持querySelectorAll(),这个方法能够理解CSS查询器,而且能带来显著的性能提升。

然而,我们应该避免使用复杂的选择器返回元素。更不用说很多用户使用老版本的浏览器,强迫jQuery去处理DOM树。这个方式非常慢。

$(‘li[data-selected="true"] a‘)    // Fancy, but slow
$(‘li.selected a‘)    // Better
$(‘#elem‘)    // Best

选择id是最快速的方式。如果你需要使用class名称, 那么你最好带上tag名称,这样会更快些。特别是在老浏览器和移动设备上。

访问DOM是javascript应用最慢的方式 ,因此尽量少使用。使用变量去保存选择器,这样会使用cache来保存。性能更好。

var buttons = $(‘#navigation a.button‘);  // Some prefer prefixing their jQuery variables with $:
var $buttons = $(‘#navigation a.button‘);

另 外一个值得做的是jQuery给了你很多的额外便利选择器 ,例如,:visible,:hidden,:animated还有其它,这些不是合法的CSS3选择器。结果是你使用这些类库就不能有效地利用 querySelectorAll()方法。为了弥补这个问题,你需要先选择元素,再过滤,如下:

$(‘a.button:animated‘);    // Does not use querySelectorAll()
$(‘a.button‘).filter(‘:animated‘);    // Uses it

3. 数组方式使用jQuery对象

运行选择器的结果是一个jQuery对象。然而,jQuery类库让你感觉你正在使用一个定义了index和长度的数组。

// Selecting all the navigation buttons:
var buttons = $(‘#navigation a.button‘);

// We can loop though the collection:
for(var i=0;i<buttons.length;i++){
    console.log(buttons[i]);    // A DOM element, not a jQuery object
}

// We can even slice it:
var firstFour = buttons.slice(0,4);

如果性能是你关注的,那么使用简单for或者while循环来处理,而不是$.each(),这样能使你的代码更快

检查长度也是一个检查你的collection是否含有元素的方式。

if(buttons){    // This is always true
    // Do something
}

if(buttons.length){ // True only if buttons contains elements
    // Do something
}

4. 选择器属性

jQuery提供了一个属性,这个属性显示了用来做链式的选择器。

$(‘#container li:first-child‘).selector    // #container li:first-child
$(‘#container li‘).filter(‘:first-child‘).selector    // #container li.filter(:first-child)

虽然上面的例子针对同样的元素,选择器则完全不一样。第二个实际上是非法的,你不可以使用它来创建一个对象。只能用来显示filter方法是用来缩小collection。

5. 创建一个空的jQuery对象

创建一个新的jQuery空间能极大的减小开销。有时候,你可能需要创建一个空的对象,然后使用add()方法添加对象。

var container = $([]);
container.add(another_element);

这也是quickEach方法的基础,你可以使用这种更快的方式而非each()。

6. 选择一个随机元素

上面我提到过,jQuery添加它自己的选择器过滤。除了类库,你可以添加自己的过滤器。只需要添加一个新的方法到$.expr[‘:‘]对象。一个非常棒的使用方式是Waldek Mastykarz的博客中提到的:创建一个用来返回随机元素的选择器。你可以修改下面代码:

(function($){
    var random = 0;

$.expr[‘:‘].random = function(a, i, m, r) {
        if (i == 0) {
            random = Math.floor(Math.random() * r.length);
        }
        return i == random;
    };

})(jQuery);

// This is how you use it:
$(‘li:random‘).addClass(‘glow‘);

7. 使用CSS Hooks

CSS hooks API是提供开发人员得到和设置特定的CSS数值的方法。使用它,你可以隐藏浏览器特定的执行并且使用一个统一的界面来存取特定的属性。、

$.cssHooks[‘borderRadius‘] = {
        get: function(elem, computed, extra){
            // Depending on the browser, read the value of
            // -moz-border-radius, -webkit-border-radius or border-radius
        },
        set: function(elem, value){
            // Set the appropriate CSS3 property
        }
};

// Use it without worrying which property the browser actually understands:
$(‘#rect‘).css(‘borderRadius‘,5);

更好的在于,人们已经创建了一个支持CSS hooks类库

8. 使用自定义的删除方法

你可能听到过jQuery的删除插件,它能够允许你给你的动画添加特效。唯一的缺点是你的访问者需要加载另外一个javascript文件。幸运的是,你可以简单的从插件拷贝效果,并且添加到jQuery.easing对象中,如下:

$.easing.easeInOutQuad = function (x, t, b, c, d) {
    if ((t/=d/2) < 1) return c/2*t*t + b;
    return -c/2 * ((--t)*(t-2) - 1) + b;
};

// To use it:
$(‘#elem‘).animate({width:200},‘slow‘,‘easeInOutQuad‘);

9. $.proxy()

使用callback方法的缺点之一是当执行类库中的方法后,context被设置到另外一个元素,例如:

<div id="panel" style="display:none">
    <button>Close</button>
</div>

执行下面代码:

$(‘#panel‘).fadeIn(function(){
    // this points to #panel
    $(‘#panel button‘).click(function(){
        // this points to the button
        $(this).fadeOut();
    });
});

你将遇到问题,button会消失,不是panel。使用$.proxy方法,你可以这样书写代码:

$(‘#panel‘).fadeIn(function(){
    // Using $.proxy to bind this:

$(‘#panel button‘).click($.proxy(function(){
        // this points to #panel
        $(this).fadeOut();
    },this));
});

这样才正确的执行。$.proxy方法接受两个参数,你最初的方法,还有context。这里阅读更多$.proxy in the docs.。

10. 判断页面是否太过复杂

一个非常简单的道理,约复杂的页面,加载的速度越慢。你可以使用下面代码检查一下你的页面内容:

console.log( $(‘*‘).length );

以上代码返回的数值越小,网页加载速度越快。你可以考虑通过删除无用多余的元素来优化你的代码

11. 将你的代码转化成jQuery插件

如果你要花一定得时间去开发一段jQuery代码,那么你可以考虑将代码变成插件。这将能够帮助你重用代码,并且能够有效的帮助你组织代码。创建一个插件代码如下:

(function($){
    $.fn.yourPluginName = function(){
        // Your code goes here
        return this;
    };
})(jQuery);

你可以在这里阅读更多开发教程。

12.  设置全局AJAX为缺省

如果你开发ajax程序的话,你肯定需要有”加载中“之类的显示告知用户,ajax正在进行,我们可以使用如下代码统一管理,如下:

// ajaxSetup is useful for setting general defaults:
$.ajaxSetup({
    url            : ‘/ajax/‘,
    dataType    : ‘json‘
});

$.ajaxStart(function(){
    showIndicator();
    disableButtons();
});

$.ajaxComplete(function(){
    hideIndicator();
    enableButtons();
});

/*
    // Additional methods you can use:
    $.ajaxStop();
    $.ajaxError();
    $.ajaxSuccess();
    $.ajaxSend();
*/

详细你可以查看这篇文章:

13. 在动画中使用delay()方法

链式的动画效果是jQuery的强大之处。但是有一个忽略了的细节就是你可以在动画之间加上delays,如下:

// This is wrong:
$(‘#elem‘).animate({width:200},function(){
    setTimeout(function(){
        $(‘#elem‘).animate({marginTop:100});
    },2000);
});

// Do it like this:
$(‘#elem‘).animate({width:200}).delay(2000).animate({marginTop:100});

jQuery动画帮了我们大忙,否则我们得自己处理一堆的细节,设置timtout,处理属性值,跟踪动画变化等等。

大家可以参考这个文章:jQuery animations

14. 合理利用HTML5的Data属性

HTML5的data属性可以帮助我们插入数据。特别合适前后端的数据交换。jQuery近来发布的data()方法,可以有效的利用HTML5的属性,来自动得到数据。下面是个例子:

<div id="d1" data-role="page" data-last-value="43" data-hidden="true"
    data-options=‘{"name":"John"}‘>
</div>

为了存取数据你需要调用如下代码:

$("#d1").data("role");            // "page"
$("#d1").data("lastValue");        // 43
$("#d1").data("hidden");        // true;
$("#d1").data("options").name;    // "John";

如果你想看看实际的例子,请参考这篇教程:使用HTML5和jQuery插件Quicksand实现一个超酷的星际争霸2兵种分类展示效果

data()的jQuery文档:data() in the jQuery docs

15. 本地存储和jQuery

本地存储是一个超级简单的API。简单的添加你的数据到localStorage全局属性中:

localStorage.someData = "This is going to be saved across page refreshes and browser restarts";

但是对于老的浏览器来说,这个不是个好消息。因为他们不支持。但是我们可以使用jQuery的插件来提供支持一旦本地存储不能用的话。这种方式可以使得本地存储功能正常工作。

来源: <http://blog.csdn.net/djx123456/article/details/7762978>

来自为知笔记(Wiz)

时间: 2024-10-10 21:13:23

【JQuery】15个值得开发人员关注的jQuery开发技巧和心得的相关文章

BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发人员工具 用SPD开发SharePoint应用程序

BEGINNING SHAREPOINT? 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发人员工具 用SPD开发SharePoint应用程序 很多开发人员说他们宁愿不用SPD作为开发SharePoint的工具.然而,如果你没有在工具集中包括它你可能进度放缓.因为你将发现SPD可以让一些开发任务变得更容易. SPD从FrontPage(早起Web开发人员工具)进化而来到SPD(以SharePoint为中心的设计人员工具,随SharePoint 2010一起出现)

BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发人员工具 使用Napa开发SharePoint应用程序

BEGINNING SHAREPOINT? 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发人员工具 使用Napa开发SharePoint应用程序 如果你做过SharePoint开发,你会知道构建开发环境要花费时间.在SharePoint 2010中,你不得不安装在本地一些软件应用程序,如SharePoint,SQL Server,VS等,并且配置你的环境能使用它们.然后要在本地安装的SharePoint实例上调试.SharePoint 2013快速开发则稍微进

Android开发人员必知的开发资源

developer.android.com 官方开发人员网站推荐资源 在动手编写第一个 Android 应用之前,用心读一读 Android Design 章节.尤其是以下的这些文章: Devices and Displays  (设备和显示) Touch Feedback(触摸反馈) Metrics and Grids (度量和网格) Iconography (图像研究) 同一时候也请下载 Downloads 部分的代码,这些代码囊括了 Android 图标和控件的设计模板,源文件.样式以及无

JavaScript 开发人员需要知道的简写技巧

本文来源于多年的 JavaScript 编码技术经验,适合所有正在使用 JavaScript 编程的开发人员阅读. 本文的目的在于帮助大家更加熟练的运用 JavaScript 语言来进行开发工作. 文章将分成初级篇和高级篇两部分,分别进行介绍. 初级篇 1.三目运算符 下面是一个很好的例子,将一个完整的 if 语句,简写为一行代码. const x = 20; let answer; if (x > 10) { answer = 'greater than 10'; } else { answe

0-2岁的app开发人员必读,Android开发APP前的准备事项

随着移动互联网的兴起,各行各业对移动应用的需求越来越大,从事APP开发的人也越来越多,APP开发行业可以说是方兴未艾.APP开发是比较复杂的事情,涉及产品.美工设计.服务器端开发.Android/iOS开发.软件测试和项目管理等各方面.这些方面都是相互关联的,如果要做好一个APP,需要对上述各方面都有所了解. 在实际工作中,许多从别的行业转行从事APP开发或从事APP开发一两年的人员,对APP开发的基础知识不甚了解,需要关注的地方都没有考虑到,导致在开发APP的过程中犯了许多低级错误,而这些本来

【精品推荐】web开发人员应该知道的31个jQuery模态对话框

在网站开发中经常会用到模态窗口,如果直接利用javascirpt的window.showModalDialog()打开一个模式窗口,虽然实现了模式窗口的功能,但十分的不好看.当我们遇到这样的需求时很多人会从网上寻找这些jQuery的模态对话框,有时候搜索了很多,但都不是很合适,那为什么人们喜欢模态窗口呢?那模态窗口到底有什么优点呢? 当一个模态窗口包含一个较小的元素时,用户并不需要加载一个完成的全新新页面就可以访问它.(达到同样效果的另一种方式来是使用基于AJAX的标签) . 通过模态窗口,您提

开发人员的必备技能

对于刚开始学习软件开发的新人来说,"必备技能"往往意味着一个长长的.标有重要度的学习列表,但是过长的列表通常会导致新人不知如何开始学习,压力倍增. 本文尝试列举出最重要的几个技能,也期望通过此列表能给新人一个比较明确的学习重点和路径. 深入学习一门编程语言 没有掌握任何一门编程语言,就不可能成为一名编程人员. 许多程序员试图在学习之初一次学习几种编程语言,以便应对他们第一份软件开发工作的需要.虽然我认为开发人员最终会学习多种编程语言,  但建议不要在开始时这样做.  因为同时学习多种语

每个Java开发人员都应该知道的4个Spring注释

这是每个Java开发人员都应该知道的最重要的Spring注解.感谢优锐课老师对本文提供的一些帮助. 随着越来越多的功能被打包到单个应用程序或一组应用程序中,现代应用程序的复杂性从未停止增长.尽管这种增长带来了一些惊人的好处,例如丰富的功能和令人印象深刻的多功能性,但它要求开发人员使用越来越多的范例和库.为了减少开发人员的工作量以及开发人员必须记住的信息量,许多Java框架都转向了注解. 特别是Spring,它以注解的使用而闻名,它使开发人员仅用少数几个注解就可以创建完整的表示状态转移(REST)

【Windows10&nbsp;IoT开发系列】开发人员模式设置

原文:[Windows10 IoT开发系列]开发人员模式设置  声明:本文转自微软Windows 开发人员中心(https://msdn.microsoft.com/library/windows/apps/xaml/dn706236.aspx),在此基础上进行删减和修改. ​对于要用于开发.安装或测试应用的设备,不再需要开发人员许可证.你只需从设备的设置中为这些任务启用设备一次.(仅限于运行Windows 10系统的设备) 使用开发人员功能 ​使用 Microsoft Visual Stud