Performance :最后一个子选择器是否对性能有害?

Performance :最后一个子选择器是否对性能有害?,performance,css,css-selectors,Performance,Css,Css Selectors,我使用了很多次:最后一个孩子选择器,主要是在我使用边框:无的列表中使用边框底部用于最后一个子项,或在使用页边距时。因此,我的问题是,从性能的角度来看,:最后一个子项选择器是否糟糕 另外,我听说它已从CSS2规范中删除,因为使用:first child很容易被浏览器检测到,但是对于检测:last child它需要循环返回。我相信这仍然是获取最后一个孩子的最简单、低性能的方法。 我的意思是,所有其他获得最后一个孩子的方法对性能来说都会更糟,因为W3C社区以前不会做任何工作。如果出于性能考虑从CSS2

我使用了很多次
:最后一个孩子
选择器,主要是在我使用
边框:无的列表中使用
边框底部
用于最后一个子项,或在使用页边距时。因此,我的问题是,从性能的角度来看,
:最后一个子项
选择器是否糟糕


另外,我听说它已从CSS2规范中删除,因为使用
:first child
很容易被浏览器检测到,但是对于检测
:last child
它需要循环返回。

我相信这仍然是获取最后一个孩子的最简单、低性能的方法。
我的意思是,所有其他获得最后一个孩子的方法对性能来说都会更糟,因为W3C社区以前不会做任何工作。

如果出于性能考虑从CSS2推迟,但在选择器3中重新引入,我怀疑这是因为性能不再像以前那样是一个问题

请记住,
:last child
是选择父母的最后一个孩子的确定的唯一的方法(显然,除了
:n个最后一个孩子(1)
)。如果浏览器实现者不再关心性能问题,我们作为作者也不应该这样做


我能想到的用
:first child
替代边框样式而不是
:last child
的唯一令人信服的原因是允许与IE7和IE8兼容。如果这能提高性能,那就让它成为副作用吧。如果您不需要IE7和IE8支持,那么您就不必被迫使用
:first child
而不是
:last child
。即使浏览器性能是绝对关键的,您也应该通过测试和基准测试,而不是过早的优化,以正确的方式解决它。

一般来说,核心CSS选择器的性能足够好,我们大多数人都不必担心使用它们。是的,有些网站的表现确实比其他网站差,但即使是表现最差的网站也不太可能成为网站的主要瓶颈

除非你已经把其他一切都优化到了极致,否则我建议你不要担心这个问题。使用像YSlow这样的分析工具来发现站点上的真正性能问题并解决这些问题


在任何情况下,即使给定的CSS选择器(或任何其他浏览器功能)有明显的性能影响,我想说的是,修复它是浏览器制造商的责任,而不是你的责任。如果
:最后一个子项只需要从列表的最后一个子项中删除底部边框,您可以添加上边框并将其从
第一个:子项中删除。当然,它可能不符合您的要求。您已经读过了吗@t、 niese:CSS4可能会引入父选择器,:last child也在规范中:(但当然,实现可能会有性能问题,如文章所示)@buli那么更多的是关于IE花了这么长时间才得到:last child的部分support@Mr.Alien我也是。还有一个信息:
Firefox将加载的最后一个元素视为最后一个元素,直到它得到一个新元素。
在Safari、Chrome和Opera[…]中,这些浏览器在关闭父元素之前不会将任何元素视为最后一个元素。
只是认为这一观察可能是出于兴趣,为什么会有人担心业绩不佳。无论如何,我不认为这是一个真正的问题,因为如果你看动态页面,js一次又一次地创建和删除元素。我不认为问题出在
:最后一个孩子
。不,但由于它是规范中的一项功能,而且由于W3C将其作为一个完全文档化的选择器,我们只能假设他们确实在使用它。规范和实现是两件不同的事情。选择器是否正式成为CSS规范的一部分并不重要。仅仅声称没有问题,因为一群人考虑了它应该做什么,这并不是一个非常有力的论点。这群人几乎是互联网编程的所有规则的制定者,其中一些人是设计浏览器的人。我相信,如果他们选择实现最后一个孩子,那一定有原因,因为这也是他们的工作,在以后的工作中阅读这个CSSbrowsers@FelixKling:无论如何,它们是密切相关的——如果可互操作的实现太少,规范会删除或推迟特性,据说这就是发生在这里的
:最后一个孩子
。也就是说,您的上一条语句仍然有效-尤其是在没有任何引用来支持此类声明的情况下。如果您可以控制页面在服务器上的呈现,那么
last child
并不是选择另一个元素的最后一个子元素的唯一方法。您可以添加一个类并使用该类选择它。