小编典典

!important 对性能有害吗?

all

我讨厌它们,它违背了 CSS 的级联特性,如果你不小心使用它们,你最终会陷入添加更多!important.

但我想知道它们对性能有害吗?

编辑
从(快速)回复中,我可以得出结论,它不会对性能产生(显着)影响。但很高兴知道,即使它只是作为劝阻他人的额外论据;)。

EDIT 2
BoltClock 指出,如果有 2 个!important声明,规范会选择最具体的一个。


阅读 77

收藏
2022-07-07

共1个答案

小编典典

它不应该对性能产生任何明显的影响。看到 Firefox 的 CSS
解析器,/source/layout/style/nsCSSDataBlock.cpp#572
我认为这是相关的例程,处理CSS
规则的 覆盖

这似乎只是对“重要”的简单检查。

  if (aIsImportant) {
    if (!HasImportantBit(aPropID))
      changed = PR_TRUE;
    SetImportantBit(aPropID);
  } else {
    // ...
  }

另外,评论在
source/layout/style/nsCSSDataBlock.h#219

    /**
     * Transfer the state for |aPropID| (which may be a shorthand)
     * from |aFromBlock| to this block.  The property being transferred
     * is !important if |aIsImportant| is true, and should replace an
     * existing !important property regardless of its own importance
     * if |aOverrideImportant| is true.
     * 
     * ...
     */

  1. Firefox 使用手动编写的自顶向下解析器。在这两种情况下,每个 CSS 文件都被解析为一个 StyleSheet 对象,每个对象都包含
    CSS 规则。

  2. Firefox 然后创建包含最终值的样式上下文树(在以正确的顺序应用所有规则之后)

CSS 解析器 Firefox

来自:http://taligarsiel.com/Projects/howbrowserswork1.htm#CSS_parsing

现在,您可以很容易地看到,在使用上述对象模型的情况下,解析器可以!important轻松地标记受影响的规则,而无需太多后续成本。性能下降 并不是
反对!important.

但是,可维护性确实会受到影响(如其他答案所述),这可能是您反对它们的唯一论据。

2022-07-07