子组合器与级联:哪个性能更好,效率更高

Child combinator vs Cascading: Which is better performant and efficient?

本文关键字:更好 性能 效率 组合 级联      更新时间:2023-09-26

子组合器:

#main-navigation-wrapper > .main-navigation > .top-nav > .top-menu > .in {
    /* some styling */
}

同样的事情可以用不太具体的方式表示,就像这样(级联,还是称为其他东西??

#main-navigation-wrapper .main-navigation .in {
    /* some styling */
}

从理论上讲,根据给定的示例,两者中哪一个的性能和效率更高?(请不要说它可以忽略不计。

我的使用案例

由于社区成员一直建议我在我的问题中描述我想要实现的目标,所以在这里。

我使用Twitter Bootstrap来实现一些JavaScript效果,这是我使用的片段:

!function ($) {
  "use strict"; // jshint ;_;

 /* COLLAPSE PUBLIC CLASS DEFINITION
  * ================================ */
  var Collapse = function (element, options) {
     this.$element = $(element)
     this.options = $.extend({}, $.fn.collapse.defaults, options)
     if (this.options.parent) {
       this.$parent = $(this.options.parent)
     }
     this.options.toggle && this.toggle()
  }
  Collapse.prototype = {
     constructor: Collapse
  , dimension: function () {
       var hasWidth = this.$element.hasClass('width')
       return hasWidth ? 'width' : 'height'
     }
  , show: function () {
       var dimension
         , scroll
         , actives
         , hasData
       if (this.transitioning) return
       dimension = this.dimension()
       scroll = $.camelCase(['scroll', dimension].join('-'))
       actives = this.$parent && this.$parent.find('> .main-navigation > .top-nav > .top-menu > .in')
       if (actives && actives.length) {
         hasData = actives.data('collapse')
         if (hasData && hasData.transitioning) return
         actives.collapse('hide')
         hasData || actives.data('collapse', null)
       }
  /* and the code goes on... */
}(window.jQuery);

在代码中查找此内容 - > .main-navigation > .top-nav > .top-menu > .in

现在,我应该使用它,还是这个> .main-navigation .in?这是我的问题,推理应该基于哪个会提供更好的性能,哪个更有效率。

如果我不够清楚,请告诉我。

我的猜测?

我认为这(#main-navigation-wrapper > .main-navigation > .top-nav > .top-menu > .in)既高效又高性能,因为我相信它可以帮助浏览器快速识别元素。不过我可能是错的,这就是我问的原因。

所有评论都是正确的,效果可以忽略不计。

此外,重要的是 2 条规则不同。在某些情况下,它们可能会给出非常不同的结果。所以,选择一个或另一个不是表现的问题,而是得到你真正想要的东西的问题。

说了这么多,你是对的,如果子规则是正确的,它会更有效率。

如果您正在编写规则,并且您知道您的 DOM,并且规则不会过于具体,则效率更高。 编写过于具体的规则是一个你可以避免的问题,因为你知道你的 DOM,但框架编写者无法避免。

真正与众不同的是,当你里面有很多内容时

#main-navegation-wrapper not(.main-navigation)
第一条规则

甚至不处理,第二条规则必须