javascript - 如果函数被多次调用,在函数中缓存选择器是否性能更高?

标签 javascript jquery performance caching

好的,我想我知道这个问题的答案,希望确认一下。所以我有一个只使用一次的选择器,但它在一个被调用多次的函数中使用。从性能的 Angular 来看,由于每次调用该函数时都会重新搜索该选择器,因此缓存该选择器可能(尽管略微)更好?

换句话说,下面...

function testFunction() {
  alert($("#input").val())
}

$("#a").click(function() {
  testFunction()
})

$("#b").click(function() {
  testFunction()
})

$("#c").click(function() {
  testFunction()
})

...性能不如下面

input = $("#input")

function testFunction() {
  alert(input.val())
}

$("#a").click(function() {
  testFunction()
})

$("#b").click(function() {
  testFunction()
})

$("#c").click(function() {
  testFunction()
})

最佳答案

显然,jQuery() 调用完成的总时间少于对 jQuery 对象的变量引用。上次运行记录

  • jQuery():16.580 毫秒
  • 缓存的 jQuery() 对象:22.885 毫秒

(function() {

  function testFunction() {
    $("#input").val()
  }

  console.time("jQuery()");

  for (let i = 0; i < 10000; i++) {
    testFunction()
  }
  
  console.timeEnd("jQuery()");
  
})();

(function() {

  let input = $("input");

  function testFunction() {
    input.val()
  }

  console.time("cached jQuery() object");

  for (let i = 0; i < 10000; i++) {
    testFunction()
  }
  
  console.timeEnd("cached jQuery() object");
  
})();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>
<input>

关于javascript - 如果函数被多次调用,在函数中缓存选择器是否性能更高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44427606/

相关文章:

c++ - 在 C++ 中实现长方程时,如何通过高级方法提高性能

javascript - IE8 及更低版本的 RequireJS shim 问题

javascript - 获取父div的属性

javascript - 使用 React 和 webpack 4 拆分项目; html 标签是意外的标记

javascript - 如何更改 amcharts 饼图主题?

javascript - 使用 val ('' ) 清除文本区域

javascript - 自动测量浏览器端性能时间

python - 为什么 joblib 并行执行会使运行时慢很多?

javascript - 隐藏弹出框功能 恢复打开弹出框功能

javascript - Angularjs ng-repeat with Object key value filter ng-model name 不起作用