jquery 性能变量

jquery performance variable

几个问题,我想知道什么时候应该使用变量,如果选择器会调用多次,那么我应该为那个选择器设置变量吗?

  1. 局部变量还是全局变量?例如

var $body = $('body');

如果我有 100 个 jquery 函数,每个函数需要 $('body') 选择器,局部 100 次或全局一次变量会更快?

  1. 如果像下面这样的函数

    $('.link').on('click', function() { var $this =$(this); $this.addClass('a'); });

函数完成,只调用一次$this,需要$this吗?或者只使用 $(this)?哪个更快?

  1. 变量非选择器

    $('one').addClass('a').removeClass('b').html('abcd'); $('two').addClass('a').removeClass('b').html('abcd');

如果我创建一个变量var job = addClass('a').removeClass('b').html('abcd');

`$('one').job;
$('two').job;`

会更快吗?还是没用?

  1. resize函数变量,弄个全高div,哪个更快?

    $('#full-height').css({'height' : ($(window).height() + 'px')}); //没有变量<br> var vH = $(window).height(); $('#full-height').css({'height' : vH + 'px'}); //有变量<br> var vH = $(window).height(); $('#full-height').height(vH + 'px'); //使用变量并使用 height() 方法

以上函数运行都在$(window).on('resize', function() {}里面,所以每次resize函数都会运行,变量代码会不会更快?

我什么时候需要可变非选择器?

非常感谢

如果你多次使用一个元素,将它保存在一个变量(一个元素的指针)中肯定会提高性能,因为就像你说的那样它是一个query, jQuery 会把所有的 DOM 都取出来找到你需要的元素,所以将查询结果保存在变量中会更快,这是一个好习惯.

所以使用 $this 而不是 $(this) 也会提高性能。

*第3题

你不能job = addClass...因为addClass不是一个全局函数!它是一个jQuery对象方法! 所以你只能用 jQuery object/element $jqObject.addClass...

*问题 4

就像我说的,如果你在同一个函数中多次使用一个方法的结果,你应该把它放在一个变量中,但在你的例子中你使用的是$(window).height(); 只有一次,所以将它放在变量中是没有用的,但对于 干净的代码 来说这是一个好习惯。而且不会影响性能。

简单来说:如果您在同一上下文中多次使用一个方法的结果,将其保存在变量中将提高性能。