WebKit 浏览器具有用于样式渲染的内置优化技术,“这导致页面上大约 60% 的元素甚至不必匹配样式。”
+
但是,如果“在样式表中的任何地方遇到任何同级选择器......这包括选择器和像:first-child
and之类的选择器”,则整个页面的优化将完全关闭:last-child
。
有谁知道禁用此优化的选择器类型的完整列表?
--
更多信息
Tali Garsiel 关于浏览器内部的研究中讨论了优化:浏览器的工作原理。
这是Dave Hyatt对兄弟选择器的完整引用,他显然是浏览器代码的作者:“根本不能使用兄弟选择器。当遇到任何兄弟选择器时,WebCore 会简单地抛出一个全局开关,并禁用整个文档的样式共享当它们出现时。这包括 + 选择器和选择器,例如 :first-child 和 :last-child。"
这句话似乎来自凯悦在 2005 年写的一篇文章。下面他更详细地讨论了它(与之前的来源相同):
“WebCore(在即将发布的 Safari 版本中)有一个非常酷的优化,我想出了它甚至不必计算应用于元素的声明集。实际上,这种优化甚至不需要匹配页面上大约 60% 元素的样式。优化背后的想法是识别页面中的两个元素何时运行通过 DOM(和其他状态)检查具有相同的样式,并尽可能简单地在这两个元素之间共享前端样式信息。”Nate Koechley的这篇文章更详细地讨论了该算法。他总结道:
“在 Web 开发中,通常有 6 种不同的相似方法来做同样的事情。优秀的 Web 开发人员不断选择几乎无法区分的最佳路径。凯悦的这些内幕技巧为我们提供了更完整的了解浏览器的本质,并将帮助我们选择最佳方法。”凯悦还讨论了此W3C 邮件列表存档中的优化
它还在 Ryan Kinal 的Stack 聊天中简短地出现:“哇。哇。我再也不会使用另一个兄弟选择器了。”
我特别想知道:
子选择器是否也关闭优化
Trident/IE 是否使用任何类似的优化
是否存在任何测试表明它对渲染性能有多大影响