【发布时间】:2018-03-26 14:25:02
【问题描述】:
我遇到了一个 ReactJS 样板,它有很好的代表并且是社区驱动的。 样式部分更强调样式化组件 CSS,但从未停止切换到传统的 CSS 样式方法。虽然这引起了我的兴趣,但是是什么让 Styled-Component CSS 脱颖而出以及为什么需要采用它。
我对@987654321@的理解:
- 组件驱动的理念。您的 CSS 现在也是一个组件。 - 这很酷!
- 加载你需要的东西,在你需要的时候,有点懒惰的 CSS
- 主题提供程序、皮肤、模块化和动态 - 这也可以通过其他库实现
- 组件 DOM 的服务器端构造及其样式。
我的问题是:
浏览器已经进化为将 CSS 与 Javascript 分开解析 解析,为什么我们试图偏离这个并适应所有 Javascript?
-
Styled-component CSS 将其 javascript 库发送到客户端, 它实际上在运行时解析样式,并在每个组件按需加载时放入
<style />标签内。这意味着额外的负载 和逻辑最终有助于浏览器上的执行周期。 为什么需要这个?(通过上述问题,我的意思是对于加载的每个组件,通过
style标签/多个样式标签 - 重新发明 CSS 解释器来计算、创建和插入相应的 CSS) p> 是否通过
<style />在 head 标签导致浏览器重排/重绘?我从中获得了哪些性能优势?
使用附加库/选项,如 Post-CSS 和 SCSS classname hashing 用于动态类名,这几乎解决了每个人所说的问题。为什么 SC 还在?
社区,如果我错了,请为我清理空气或纠正我。
一些很好的文章讨论了重绘或 DOM 重流如何在修改 CSS 样式时对浏览器造成性能损失。
- https://developers.google.com/speed/articles/reflow
- http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/
- https://www.sitepoint.com/10-ways-minimize-reflows-improve-performance/
- https://www.phpied.com/rendering-repaint-reflowrelayout-restyle/
- https://developer.mozilla.org/en-US/docs/Web/API/CSS_Object_Model/Using_dynamic_styling_information
【问题讨论】:
-
在样式化的组件中添加 CSS 失去了它的 C - Cascading 是很好的
-
@MatthewBarbara - 它可以被视为增益,因为关键是将组件的样式彼此隔离。在内部,每个组件,它仍然是纯 CSS(带有级联)
标签: css reactjs sass styled-components reflow