性能:纯CSS与jQuery

我已经看到了纯CSS和等效的jQuery之间的一些代码比较。 但我正在寻找有关为什么纯CSS比jQuery明确更快的细节。

这是我见过的一些原因,但这些描述并不深入。 我不确定它们是否真实。

  • CSS不必由浏览器评估
  • jQuery必须由浏览器进行评估
  • jQuery使用脚本语言

CSS是否必须由浏览器进行评估并且还要使用脚本语言? CSS不像jQuery那样走DOM,还是CSS有优势呢?

  • CSS不必由浏览器评估

    不是.CSS是您编写样式表的语言,然后必须由浏览器加载,解析和评估; 见下文。

  • jQuery必须由浏览器进行评估

    是的, 因为 ……

  • jQuery使用脚本语言

    是。 jQuery是用JavaScript编写的,与CSS一样,它是一种必须由浏览器解析和评估的语言; 再见,见下文。

CSS是否必须由浏览器进行评估并且还要使用脚本语言?

它必须由浏览器进行评估,但作为一种语言本身,它在本机代码中实现,类似于布局引擎的其他核心语言function,如HTML解析器和JavaScript引擎。 CSS实现不是通过脚本语言实现的(当然,除非布局引擎本身是一个编写的)。

CSS样式通过CSSOM暴露给脚本语言,这不是CSS实现本身,只是一个脚本API,您可以将其视为与HTML的DOM等效的CSS。

jQuery是用JavaScript编写的,然后由浏览器的JavaScript实现运行。 如果你使用jQuery来应用CSS,那么jQuery必须访问DOM和CSSOM,它们再次用JavaScript实现,浏览器必须运行它。

这与使用jQuery选择器和原生Selectors API类似。 jQuery选择器在JavaScript选择器库Sizzle中实现,而document.querySelector()是一种DOM方法,允许您直接从脚本使用浏览器本机实现的选择器引擎。

这里有很多有用的信息:

浏览器的工作原理 – 现代Web浏览器的幕后故事

请看这一部分: http : //taligarsiel.com/Projects/howbrowserswork1.htm#CSS_parsing

这个: http : //taligarsiel.com/Projects/howbrowserswork1.htm#Parsing_scripts

来自链接:

脚本

网络模型是同步的。 作者希望在解析器到达标记时立即解析和执行脚本。 解析文档会暂停,直到执行脚本为止。 如果脚本是外部的,则必须首先从网络中获取资源 – 这也是同步完成的,解析将暂停,直到获取资源。 这是多年来的模型,并且还在HTML 4和5规范中指定。 作者可以将脚本标记为“延迟”,因此它不会停止文档解析并在解析后执行。 HTML5添加了一个选项,将脚本标记为异步,因此它将被另一个线程解析和执行。

样式表

另一方面,样式表具有不同的模型。 从概念上讲,似乎由于样式表不会更改DOM树,因此没有理由等待它们并停止文档解析。 但是,在文档解析阶段要求样式信息的脚本存在问题。 如果尚未加载和解析样式,脚本将得到错误的答案,显然这会导致很多问题。 这似乎是一个边缘案例,但很常见。 当有一个仍在加载和解析的样式表时,Firefox会阻止所有脚本。 Webkit仅在尝试访问可能受卸载样式表影响的某些样式属性时阻止脚本。

我认为CSS更快的主要原因是它可以比javascript更优化,因为它不那么复杂,代码只是一系列规则而且没有太多自己的逻辑(除了选择器和偶尔的calc()function)BTW, CSS肯定必须由浏览器评估。