性能:纯CSS与jQuery

时间:2013-05-21 17:24:39

标签: jquery css performance css3 dom

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

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

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

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

3 个答案:

答案 0 :(得分:32)

  •   

    CSS不必由浏览器评估

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

  •   

    jQuery必须由浏览器进行评估

    是的,因为 ...

  •   

    jQuery使用脚本语言

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

  

是否必须通过浏览器评估CSS并使用脚本语言?

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

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

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

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

答案 1 :(得分:3)

这里有许多有用的信息:

How browsers work - Behind the scenes of modern web browsers

看看这一节: http://taligarsiel.com/Projects/howbrowserswork1.htm#CSS_parsing

并且:http://taligarsiel.com/Projects/howbrowserswork1.htm#Parsing_scripts

来自链接:

脚本

  

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

样式表

  

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

答案 2 :(得分:0)

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