我在纯CSS和等效的jQuery之间看到了许多代码比较。但我正在寻找有关为什么纯CSS明确比jQuery更快的细节。
以下是我见过的一些原因,但这些描述并不深入。我不确定它们是否真实。
是否必须通过浏览器评估CSS并使用脚本语言? CSS不像jQuery那样走DOM,还是CSS有优势呢?
答案 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
肯定必须由浏览器进行评估。