明智的性能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