jquery,性能明智的getElementById或jQueryselect器是什么?

性能明智的document.getElementById('elementId')还是$('#elementId') ? 我怎样才能自己计算速度?

如果您关心性能,原生getElementById要快得多,但jQuery可以非常方便地访问很多东西。 所以,你可能想要使用像这样的东西:

 $( document.getElementById("some_id") ).jQueryCall(); 

这会给你一个更好的performance,同时也允许你使用jQuery。

getElementById更快,因为它使用本地代码。 jQueryselect器也将使用getElementById,但它首先需要对文本进行大量的testing和比较。

我只是偶然发现了这个post,同时想知道同样的问题…所以决定敲一个快速的testing脚本…运行它,自己尝试,吹我的脑海!

 var now = Date.now(); var diff = 0; console.log(now); for(var i=0; i < 1000000; i++) { if($(document.getElementById("test")).css('opacity') == '0.2') $(document.getElementById("test")).css('opacity', '1'); else $(document.getElementById("test")).css('opacity', '0.2'); } diff = Date.now() - now; console.log('With $(document.getElementById("test")).somejQueryCall(): ' + diff + ' milliseconds'); //////////////////////////////////////////////////////////////////////// var now2 = Date.now(); var diff2 = 0; console.log(now2); for(i=0; i < 1000000; i++) { if($("#test").css('opacity') == '0.2') $("#test").css('opacity', '1'); else $("#test").css('opacity', '0.2'); } diff2 = Date.now() - now2; console.log('With $("#test").somejQueryCall(): ' + diff2 + ' milliseconds'); //////////////////////////////////////////////////////////////////////// var now3 = Date.now(); var diff3 = 0; var elem = $("#test"); console.log(now3); for(i=0; i < 1000000; i++) { if(elem.css('opacity') == '0.2') $(elem).css('opacity', '1'); else $(elem).css('opacity', '0.2'); } diff3 = Date.now() - now3; console.log('With $(elem).somejQueryCall(): ' + diff3 + ' milliseconds'); 

运行这个脚本之后,我得到了以下结果:

运行1

$(document.getElementById("test")).somejQueryCall() :552毫秒

$("#test").somejQueryCall() :881毫秒

$(elem).somejQueryCall() :1317毫秒

运行2

$(document.getElementById("test")).somejQueryCall() :520毫秒

$("#test").somejQueryCall() :855毫秒

$(elem).somejQueryCall() :1289毫秒

运行3

$(document.getElementById("test")).somejQueryCall() :565毫秒

$("#test").somejQueryCall() :936毫秒

$(elem).somejQueryCall() :1445毫秒

我不能相信区别! 只是不得不分享这个!

和平!

当然getElementById是更快,但与jQuery你可以做很多事情。

为了testing,你可以尝试循环10k次,并比较前后的时间戳。

原生getElementById更快。 jqueryselect器引擎只是包装这个任何#xselect器。

使用萤火虫控制台,您可以通过以下方式来configurationjquery。 不知道它适用于像getElementById这样的native API调用。

 console.profile(); $('#eleId'); console.profileEnd(); 

嘿。 研究这个问题,我发现这个优秀的职位。 还有一个关于这个最新进入JQuery的学习网站的具体提示,以优化速度!

值得注意的是,根据最新的DOM规范,你可能不需要担心一般的性能。 只有当你创造(或发现)一个瓶颈。

优化select器

由于在这个页面中链接的其他性能testing似乎被打破了,并且还包括了这个问题中没有被问到的东西(即自定义jQuery方法),于是我决定制定一个新的性能基准来回答问题,其中包括确切的等效(返回DOM元素)在jQuery,而不是一个自定义的方法:

https://jsperf.com/jquery-get-0-vs-get-element-by-id

当我在我的Chrome中运行它时,它显示了一个直的jQuery

 $('#foo').get(0) 

比标准JavaScript中的等效操作慢92%

 document.getElementById('foo') 

我也尝试了目前被认为是被接受的答案,这被认为是“快得多”,但是它仍然比标准的JavaScript等效率慢了89%

 $( document.getElementById("foo") ).get(0); 

随意为自己运行它,看看你在浏览器中得到了什么,以及我所做的性能基准 。 没有jQuery的版本似乎要快得多。