明智的性能document.getElementById('elementId')
或$('#elementId')
有什么更好? 我该如何计算自己的速度?jquery,performance-wise更快getElementById或jQuery选择器是什么?
回答
如果你关心性能,原生的getElementById是非常非常快,但jQuery的为您提供了很多的东西,非常方便访问。所以,你可能想用类似的东西:
$(document.getElementById("some_id")).jQueryCall();
这会给你一个更好的性能,同时,允许你使用jQuery。
getElementById更快,因为它使用本机代码。 jQuery选择器也将使用getElementById,但它首先需要对文本进行大量测试和比较。
+1。另外,速度差异取决于你如何使用它。如果只是对其中一个人的单一呼叫,那么几乎没有任何区别。如果调用在循环内或递归地进行数百次或数千次,您可能会注意到jQuery选择器有点慢。 – 2009-12-06 09:29:43
当然getElementById更快,但使用jQuery你可以做很多事情。
要测试这一点,您可以尝试循环10k次,并比较前后的时间戳。
原生getElementById更快。 Jquery选择器引擎只是包装这个任何#x选择器。
使用萤火虫控制台,您可以通过以下方式配置jquery。 不确定它适用于getElementById等本机API调用。
console.profile();
$('#eleId');
console.profileEnd();
使用http://jsperf.com/如果你想测试jquery和dom之间的任何类型的性能 但jQuery的速度通常比任何事情都慢,因为它基于dom。
http://jsperf.com/jquery-sharp-vs-getelementbyid – 2012-08-27 00:52:17
你的链接被破坏,这个url有一个等价物:http:// jsperf。 com/getelementbyid-vs-jquery-id/44 – TyrionGraphiste 2015-03-27 18:13:27
@TyrionGraphiste对不起,今天你的链接也没有做测试。它说$没有定义。 – Haradzieniec 2017-01-18 08:48:14
我刚刚偶然发现了这篇文章,同时想知道同样的问题......所以决定敲一个快速测试脚本......运行它,自己试一下,吹响我的心!
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毫秒
我不能相信的区别!只需分享一下!
和平!
嘿。研究这个问题,我发现这个优秀的帖子。还有一篇关于这方面的文章,最新进入了JQuery的学习网站,并提供了特定提示以优化速度!
值得注意的是,使用最新的DOM规范,您可能无需担心通常的性能问题。只有当你创造(或发现)一个瓶颈。
因为这是在本页面链接的其他性能测试似乎被打破,也包括一些没有在这个问题(即定制的jQuery方法)询问,于是我决定使一个新的性能基准来回答,其中包括在jQuery的准确当量(返回的DOM元素)的问题,而不是一个自定义的方法:
https://jsperf.com/jquery-get-0-vs-get-element-by-id
当我在我的浏览器中运行它,它表明一个直截了当的jQuery
$('#foo').get(0)
比同等操作慢于标准的JavaScript 92%
document.getElementById('foo')
我也尝试了什么是当前被标记为在这里接受的答案,据称“非常非常快”,但它仍然是89 %,比标准的JavaScript相当于慢:
$(document.getElementById("foo")).get(0);
随意运行它自己,看看你在你的浏览器中得到,与performance benchmark我犯。没有jQuery的版本似乎要快得多。
- 1. 什么是正确的jQuery选择器?
- 2. 什么是最好的jQuery选择器进行此更改?
- 3. 什么是jQuery选择的YUI2替代选择“*”(或)YUI事件/选择问题
- 4. jQuery/JavaScript选择器或||
- 5. jQuery CSS'或'选择器
- 6. jQuery多个'或'选择器
- 7. 什么是更快 - replaceWith或insertAfter(并隐藏旧元素)在jQuery
- 8. 为什么jQuery选择器不工作?
- 9. jQuery的.html函数的更快选择?
- 10. jquery选择器和js选择器有什么区别?
- 11. 更好的jQuery选择器
- 12. JQuery或Javascript筛选器选择选项
- 13. 请告诉我更快当使用jQuery选择.classname或div.classname
- 14. jQuery:不是选择器
- 15. jQuery选择快捷方式
- 16. 为什么这jQuery选择器不选择textarea?
- 17. jquery选择器
- 18. jquery选择器
- 19. JQuery选择器
- 20. jQuery选择器
- 21. jquery选择器
- 22. jquery选择器
- 23. jquery:[]选择器?
- 24. jQuery选择器
- 25. jquery选择器
- 26. jquery选择器
- 27. 选择器jquery
- 28. jquery选择器
- 29. jQuery选择器
- 30. jQuery选择器
两全其美! – 2012-08-29 03:39:37
我不知道我会永远不会停止精神上感谢你让我看看...... :) – VoidKing 2013-05-13 21:46:18
我知道这是旧的,但你会照顾详细吗?我无法在任何地方找到这个jQueryCall()方法。谢谢 – victor 2014-11-24 19:44:28