当前位置: 首页 > 面试题库 >

使用$ this代替$(this)是否可以提高性能?

彭海阳
2023-03-14
问题内容

假设我有以下示例:

例子一

$('.my_Selector_Selected_More_Than_One_Element').each(function() {
    $(this).stuff();
    $(this).moreStuff();
    $(this).otherStuff();
    $(this).herStuff();
    $(this).myStuff();
    $(this).theirStuff();
    $(this).children().each(function(){
        howMuchStuff();
    });
    $(this).tooMuchStuff();
    // Plus just some regular stuff
    $(this).css('display','none');
    $(this).css('font-weight','bold');
    $(this).has('.hisBabiesStuff').css('color','light blue');
    $(this).has('.herBabiesStuff').css('color','pink');
}

现在,可能是:

例子二

$('.my_Selector_Selected_More_Than_One_Element').each(function() {
    $this = $(this);
    $this.stuff();
    $this.moreStuff();
    $this.otherStuff();
    $this.herStuff();
    $this.myStuff();
    $this.theirStuff();
    $this.children().each(function(){
        howMuchStuff();
    });
    $this.tooMuchStuff();
    // Plus just some regular stuff
    $this.css('display','none');
    $this.css('font-weight','bold');
    $this.has('.hisBabiesStuff').css('color','light blue');
    $this.has('.herBabiesStuff').css('color','pink');
}

关键不是实际的代码,而是使用$(this)一次以上,两次/三次或三次以上的时间。

上午我更好的性能,明智使用 例如两个例如一个 (也许与解释为什么或者为什么不)?

编辑/注意

我怀疑两个更好。$this当我不可避免地忘记将$this事件处理程序添加到事件处理程序时,我有点担心的是在添加代码,而不是无意中引入了一个潜在的难以诊断的错误。那么我应该使用var$this = $(this)还是$this = $(this)为此?

谢谢!


问题答案:

是的,绝对可以使用$this

每次使用时$(this),都必须构造一个新的jQuery对象,同时$this保留相同的对象以供重用。

一个性能测试表明,$(this)是显著慢$this。但是,由于两者都每秒执行数百万个操作,因此它们都不大可能产生任何实际影响,但是无论如何,重用jQuery对象是一种更好的做法。当真正的性能影响出现是当一个选择,而不是一个DOM对象,反复传递给jQuery的构造-如$('p')

至于的使用var,再次 始终 使用var来声明新变量。这样,该变量将只能在声明其的 函数中 访问,并且不会与其他函数冲突。

更好的是,jQuery设计为可与链接一起使用,因此请尽可能利用这一点。与其声明一个变量并多次调用该函数,不如说:

var $this = $(this);
$this.addClass('aClass');
$this.text('Hello');

…将函数链接在一起,以不必要地使用附加变量:

$(this).addClass('aClass').text('Hello');


 类似资料:
  • 问题内容: Kotlin是否可以提高性能?有基准测试吗?Kotlin比Java快吗?我在Kotlin网站上找到了这个。https://kotlinlang.org/docs/reference/comparison- to-java.html 谈论语言功能而不是性能。 问题答案: Kotlin生成的字节码与Java非常相似,因此Kotlin代码的性能在大多数情况下与等效Java代码的性能相同。 内

  • 本文向大家介绍vue中全局路由守卫中替代this操作(this.$store/this.$vux),包括了vue中全局路由守卫中替代this操作(this.$store/this.$vux)的使用技巧和注意事项,需要的朋友参考一下 全局路由守卫this.$vux.loading.hide()报错,访问不到this 解决办法 申明变量代替this main.js文件方法 if判断防止第一次初始化报错

  • 问题内容: 在Java中,我们看到了很多可以使用该关键字但很少使用的地方。 例如: 在上述情况下,可以,但是通常不这样做。 当一个方法永远不会被覆盖时,我们可以使用关键字。类似地,对于不会被继承的类。 在任何或所有这些情况下使用final关键字是否真的可以提高性能?如果是这样,那又如何?请解释。如果对性能的正确使用确实很重要,那么Java程序员应该养成什么习惯来充分利用关键字? 问题答案: 通常不

  • 介绍 在这篇文章里,我们将讨论跟执行上下文直接相关的更多细节。讨论的主题就是this关键字。实践证明,这个主题很难,在不同执行上下文中this的确定经常会发生问题。 许多程序员习惯的认为,在程序语言中,this关键字与面向对象程序开发紧密相关,其完全指向由构造器新创建的对象。在ECMAScript规范中也是这样实现的,但正如我们将看到那样,在ECMAScript中,this并不限于只用来指向新创建

  • 如果我只运行几个线程,其中一些线程调用静态函数,而另一些线程创建新实例。我希望在每次对的调用中获得当时实例的实际数量。 代码中的两个选项有区别吗? 如果我锁定“”,这是否意味着在构造函数退出synchronized块之前,我不能调用(假设我没有在getCount()上编写synchronize)。 如果我在代码中的某个地方执行同步块,它是只锁定同步块还是锁定所有“”代码? 从这里开始编辑:谢谢大家

  • 问题内容: 题 Java 8 MIME编码器和解码器是否可以 _ 替代_ 不支持的内部Java API 和? 编辑(澄清):通过直接 _ 替换,_ 我的意思是我可以使用或透明地将任何其他现有客户端代码的Java 8 MIME Base64编码器/解码器切换为旧代码。 我到目前为止的想法以及原因 根据我的调查和快速测试(请参见下面的代码), _ 它应该是直接替代品,_ 因为 基于其JavaDoc的是