性能:纯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
肯定必须由浏览器评估。