jquery 性能变量
jquery performance variable
几个问题,我想知道什么时候应该使用变量,如果选择器会调用多次,那么我应该为那个选择器设置变量吗?
- 局部变量还是全局变量?例如
var $body = $('body');
如果我有 100 个 jquery 函数,每个函数需要 $('body')
选择器,局部 100 次或全局一次变量会更快?
如果像下面这样的函数
$('.link').on('click', function() {
var $this =$(this);
$this.addClass('a');
});
函数完成,只调用一次$this,需要$this
吗?或者只使用 $(this)
?哪个更快?
变量非选择器
$('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;`
会更快吗?还是没用?
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();
只有一次,所以将它放在变量中是没有用的,但对于 干净的代码 来说这是一个好习惯。而且不会影响性能。
简单来说:如果您在同一上下文中多次使用一个方法的结果,将其保存在变量中将提高性能。
几个问题,我想知道什么时候应该使用变量,如果选择器会调用多次,那么我应该为那个选择器设置变量吗?
- 局部变量还是全局变量?例如
var $body = $('body');
如果我有 100 个 jquery 函数,每个函数需要 $('body')
选择器,局部 100 次或全局一次变量会更快?
如果像下面这样的函数
$('.link').on('click', function() { var $this =$(this); $this.addClass('a'); });
函数完成,只调用一次$this,需要$this
吗?或者只使用 $(this)
?哪个更快?
变量非选择器
$('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;`
会更快吗?还是没用?
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();
只有一次,所以将它放在变量中是没有用的,但对于 干净的代码 来说这是一个好习惯。而且不会影响性能。
简单来说:如果您在同一上下文中多次使用一个方法的结果,将其保存在变量中将提高性能。