• “草原英雄小姐妹”走进山城 2019-07-01
  • 高清:里约奥运会奖牌曝光 大部分由再生材料制成 2019-06-27
  • 在楼主大谈共产主义分配的时候,希望楼主先说明一下对马克思关于共产主义基本原则的理解。一个社会如果仍然存在“按劳动分配”,怎么会是“每一个个人的全面而自由的发展” 2019-06-25
  • 河北法院:打造互联网+诉非衔接的人民法庭工作新机制 2019-06-25
  • 芯片是汽车产业发展的基石  专家呼吁建立"汽车芯片智库" 2019-06-13
  • “高深文学创作回顾研讨会”在北京举行 2019-06-13
  • 江苏专项督查基础教育问题 择校热、大班额成重点 2019-06-08
  • 14599元!索尼A7M3发布:续航翻番、支持4K视频 2019-06-08
  • 首页 春城壹网 七彩云南 一网天下 2019-05-22
  • QFII政策调整引增量资金入场 “成长+大消费”或成布局重点 2019-05-22
  • 密印“农禅”:何以在蛮荒之地举起文明火把(图) 2019-05-18
  • 20180531 袁隆平:海水稻打破纪录,杂交稻走向全球 2019-05-17
  • 晋城:八项重点打好水污染防治攻坚战 2019-05-15
  • 法国装置艺术家将一部老旧房车改造成移动游泳池 2019-05-13
  • 习近平致信祝贺人民日报创刊70周年 2019-05-10
  • 欢迎访问

    双色球012路走势图:云南鼎浩信息技术有限公司官方网站,云南网站建设诚信品牌!

    DING HAO COLUMN 鼎浩专栏

    鼎浩的一些分享
    Sharing from Ding Hao

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

    来源:云南11选五走势图500期     2013年07月02日17:02
    字号:T|T

    云南11选五走势图500期 www.a-mcl.com 在这篇文章中,我们将介绍15个让你的jQuery更加有效的技巧,大部分关于性能提升的,希望大家能够喜欢!

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

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

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

    
    
    

    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
    

    如果性能是你关注的,那么使用简单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被设置到另外一个元素,例如:

    Close

    执行下面代码:

    $('#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的属性,来自动得到数据。下面是个例子:


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

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

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

    15. 本地存储和jQuery

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

    // Check if "key" exists in the storage
    var value = $.jStorage.get("key");
    if(!value){
    	// if not - load the data from the server
     	value = load_data_from_server();
     	// and save it
    	$.jStorage.set("key",value);
    }
    
    // Use value

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

    以上是我们介绍的15个jQuery的开发技巧,如果你有更多的技巧和评论,请在下面给我们留言, 谢谢支持!

    译文来源://www.gbin1.com/technology/jquery/20111116jquery15tips/

    英文原文://tutorialzine.com/2011/06/15-powerful-jquery-tips-and-tricks-for-developers/

    客服中心
    点击进行在线咨询

    QQ咨询 咨询QQ:79929313 咨询QQ:88139574 咨询QQ:122790803

    咨询热线:0871-63399840

    客服热线:0871-63523332

    客服中心 客服中心
  • “草原英雄小姐妹”走进山城 2019-07-01
  • 高清:里约奥运会奖牌曝光 大部分由再生材料制成 2019-06-27
  • 在楼主大谈共产主义分配的时候,希望楼主先说明一下对马克思关于共产主义基本原则的理解。一个社会如果仍然存在“按劳动分配”,怎么会是“每一个个人的全面而自由的发展” 2019-06-25
  • 河北法院:打造互联网+诉非衔接的人民法庭工作新机制 2019-06-25
  • 芯片是汽车产业发展的基石  专家呼吁建立"汽车芯片智库" 2019-06-13
  • “高深文学创作回顾研讨会”在北京举行 2019-06-13
  • 江苏专项督查基础教育问题 择校热、大班额成重点 2019-06-08
  • 14599元!索尼A7M3发布:续航翻番、支持4K视频 2019-06-08
  • 首页 春城壹网 七彩云南 一网天下 2019-05-22
  • QFII政策调整引增量资金入场 “成长+大消费”或成布局重点 2019-05-22
  • 密印“农禅”:何以在蛮荒之地举起文明火把(图) 2019-05-18
  • 20180531 袁隆平:海水稻打破纪录,杂交稻走向全球 2019-05-17
  • 晋城:八项重点打好水污染防治攻坚战 2019-05-15
  • 法国装置艺术家将一部老旧房车改造成移动游泳池 2019-05-13
  • 习近平致信祝贺人民日报创刊70周年 2019-05-10
  • 秒速飞艇手机版app下载 淘宝快3怎么买 胜负彩17054分析 广西十一选五号码推荐 彩票走势图 71期二肖中特 天津快乐十分哦组试图 全年免费公式规律大全 25选5走势图大星 陕西快乐十分预测软件 通比牛牛游戏规则 足球指数、足球比分 辉煌国际娱乐037 河北十一选五和直遗漏 九江市彩票销售点申请