[英](Why) Is it faster to use a jQuery-like selector & execute one of its methods, rather than look up a named function?
我想知道在你自己的原生JS代碼中定義一些'速記'函數比使用jQuery(或任何其他返回對象的庫)更快。 例如,假設我想要為元素添加一個類。
在jQuery中我會這樣做:
$('#sammpleDiv').addClass('someClass');
在原生JS中,我可以這樣做:
// for simplicity's sake, the toElem parameter can only be an id
function addClass(toElem, classToAdd) {
document.getElementById(toElem).className += ' ' + classToAdd;
};
addClass('sampleDiv','someClass');
編輯:這些是正確的jsPerfs 與簡單替換和classList回答這個問題
什么更快? 根據我制作的jsPerf ,本機JS實現速度慢了100%。
那么為什么使用$
並返回jQuery.fn.init
對象的新實例更快,執行一堆查找和過濾測試以及許多其他操作(jQuery實際上做了什么),然后執行其中一個方法而不是查找命名函數?
做測試用例時,你需要確定
現在,我已經復制了jQuery用於添加類的完全相同的代碼,事實上,vanilla JS更快,100%:
之所以簡單,函數調用少,條件少。 使用jQuery時,使用函數調用來選擇id
: $('#id')
並在該函數內部,你有一些條件來檢查它是否需要創建一個DOM元素或使用查詢選擇器......你可以看到相關代碼在這里 。
之后,jQuery .addClass()
也有條件,因為可以使用函數作為參數。 在那些條件下,他們使用更多的函數調用,減慢了進程。 同樣,您可以在此處查看代碼。
現在,JavaScript已經發展,它現在有一個內置函數來添加刪除類。 Niet the Dark Absol用它制作了一個JSPerf 。 這是添加類的最快方法,但為什么jQuery不使用它? 僅僅因為瀏覽器的兼容性
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.