javascript - (为什么)使用类似 jQuery 的选择器并执行其中一个方法比查找命名函数更快?

标签 javascript jquery function object methods

我想知道在您自己的 native 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 with simple replace & with classList回答这个问题

什么更快?根据jsPerf I made ,原生 JS 实现速度慢了 100% 以上。

那么为什么使用 $ 并返回 jQuery.fn.init 对象的新实例会更快,执行大量的查找和过滤测试以及大量的其他操作(jQuery 实际上做了什么),然后执行它的方法之一而不是查找命名函数?

最佳答案

我在您的 jsperf 中看到两个错误,正如评论中指出的那样:

  • jQuery 经过大量优化。 .addClass 只会在尚未添加时添加它。

  • 您不检查它。您只是使用 += 附加它,它会在运行 10,00 次左右时创建大量字符串实例,这甚至使我的浏览器崩溃 ;)

    /li>

Dr.Molle 的修改 jsperf表明通过修复上述内容,它是最快的。

啊! Niet the Dark Absol 提供了更快的速度here .它速度很快,因为它使用原生 classList 并且不会手动检查类的可用性。

关于javascript - (为什么)使用类似 jQuery 的选择器并执行其中一个方法比查找命名函数更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23611492/

相关文章:

jquery - 使用 JQuery 进行全局事件注册

javascript - 使用事件绑定(bind)的回车键将焦点从按钮切换到文本框

php - 展开/折叠 div

javascript - 如何在 PhantomJS 中跟踪 document.location.reload?

javascript - jQuery 的 .delay 方法是如何工作的?

javascript - 如何在同一页面一键刷新两个表单

python - 异常后重启程序

javascript - Jquery href() 悬停时不触发

javascript - 编写一个函数,返回 4 个数字中最大的一个

C++ 从 get 函数中访问和操作二维指针数组