与 CSS-in-JS 分手

JS 中的 CSS

css-in-js”是一个从样式组件开始并在 javascript 中定义样式的流程。

样式组件、Emotion、Mantine 等

优点

适用范围小。您可以通过使用 css 模块来缩小 CSS 范围与组件定义在同一位置。 (并置)可以使用Javascript变量。

坏处

存在运行时开销需要下载Css in JS库文件。情感是7.9KB。Mantine 是 134KB!

巨大的缺点

频繁插入CSS规则会导致大量的计算工作。比较 Emotion 和 CSS使用 CSS 时性能提升约 50%。使用SSR时,会出现各种各样的问题。如果你查看 Emotion 仓库,就会发现有很多问题。

真实世界的性能比较

我们通过使用生产中实际使用的代码比较 CSS-in-JS 和 Tailwind 来测量性能。

设置

CSS-in-JS 使用 Mantine(基于 Emotion)。性能测量使用 React 开发工具。性能测量目标是一个30 * 5的Table(组件名称:SheetTable)。

屏幕

与 CSS-in-JS 分手

实验进展

按下按钮时,会呈现上面的屏幕。在 React Profiler 中打开录制功能,按下按钮即可录制屏幕渲染。测量SheetTable的渲染时间。总共执行5次并计算平均值。

CSS-in-JS (Mantine)

与 CSS-in-JS 分手

立即学习“前端免费学习笔记(深入)”;

顺风

与 CSS-in-JS 分手

结果

渲染时间减少了约 36%。即使只更改一个单元格代码,性能也能显着提高。 (当然,大部分都是细胞)在60Hz显示器上,1帧是16ms,但是3帧->变成2帧

与 CSS-in-JS 分手

结论

使用静态生成的 CSS 在性能方面要好得多。除非需要使用 JS 变量,否则请使用 Tailwind。引入(额外的)SSR,方便放弃CSS-in-JS。

参考号

[1] https://dev.to/srmagura/why-were-writing-up-with-css-in-js-4g9b

以上就是与 CSS-in-JS 分手的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1490182.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 13:00:19
下一篇 2025年12月19日 13:00:32

相关推荐

  • 利用超链接优雅地提交HTML表单

    本文详细介绍了如何将传统的HTML表单提交按钮替换为自定义的超链接,同时保持其提交表单的功能。通过在超链接的onclick事件中嵌入JavaScript代码,我们可以模拟点击隐藏的提交按钮,从而实现表单的正常提交流程。这种方法适用于需要高度定制表单提交外观的场景。 定制化表单提交的需求与挑战 在现代…

    2025年12月20日
    000
  • 将超链接用作表单提交按钮的JavaScript实现指南

    本文详细介绍了如何利用JavaScript将一个普通的HTML超链接转换为功能性的表单提交按钮。通过在超链接的onclick事件中调用隐藏或现有提交按钮的click()方法,并结合return false阻止默认链接行为,可以实现灵活的自定义表单提交界面,同时保持表单的正常提交机制。 在现代Web开…

    2025年12月20日
    000
  • JS如何实现下拉菜单

    答案:通过JavaScript控制显示隐藏、ARIA属性提升无障碍访问、监听点击与键盘事件实现用户交互。具体包括用aria-expanded同步菜单状态,点击外部或按Esc关闭菜单,确保焦点管理正确,支持键盘导航,并通过CSS过渡优化视觉体验,提升可用性与性能。 JavaScript实现下拉菜单,核…

    2025年12月20日
    000
  • js怎么动态创建dom元素

    动态创建dom元素的核心是使用document.createelement()创建元素,再通过appendchild()或insertbefore()将其添加到dom树中;2. 设置元素的文本内容可用textcontent或innerhtml(需注意xss风险),属性可通过element.setat…

    2025年12月20日
    000
  • 通过超链接触发HTML表单提交:一种JavaScript实现方法

    本文详细介绍了如何将HTML5表单的提交功能集成到超链接中,实现点击超链接即可提交表单。核心方法是利用JavaScript的onclick事件,通过document.getElementById().click()模拟触发一个隐藏的或样式化的提交按钮的点击,同时使用return false;阻止超链…

    2025年12月20日
    000
  • js 如何用pullAll移除数组中的多个值

    lodash的pullall方法可高效移除数组中多个特定值,它直接修改原数组,接受一个待操作数组和一个包含需移除值的数组作为参数,例如_.pullall(fruits, [‘apple’, ‘banana’])会从fruits中移除所有匹配项;与pul…

    2025年12月20日
    000
  • 通用HTML元素事件禁用策略:模拟disabled行为

    本文探讨了如何为任意HTML元素实现类似input元素disabled属性的事件禁用效果。针对pointer-events: none无法阻止键盘事件等局限性,文章提出了一种核心策略:通过自定义disabled属性作为状态标识,并结合JavaScript的选择器过滤或事件委托机制,确保事件监听器仅作…

    2025年12月20日
    000
  • 通过超链接触发表单提交的教程

    本教程详细阐述了如何利用HTML超链接(标签)来模拟点击提交按钮,从而实现表单的提交功能。通过在超链接的onclick事件中执行JavaScript代码,我们可以精确地触发页面上指定ID的隐藏或可见提交按钮的点击事件,同时阻止超链接的默认跳转行为,为表单提交提供了更灵活的UI设计选项。 概述 在网页…

    2025年12月20日
    000
  • 通过超链接触发HTML表单提交的实现方法

    本文详细阐述了如何利用HTML超链接(标签)模拟并触发表单提交功能。通过在超链接的onclick事件中嵌入JavaScript代码,程序化地模拟点击页面上一个实际存在的提交按钮,从而实现表单数据的提交。这种方法尤其适用于需要高度自定义表单提交样式,而又希望保持原生表单提交行为的场景,并提供了具体的代…

    2025年12月20日
    000
  • JS动画如何实现

    JS动画通过控制元素属性变化实现动态效果,主要方式包括:1. 使用setInterval或setTimeout定时改变属性,但易卡顿;2. 采用requestAnimationFrame与屏幕刷新同步,更流畅高效;3. 利用CSS Transitions和Animations,借助硬件加速性能更优;…

    2025年12月20日
    000
  • 如何在模板字符串中使用空格?

    本文旨在解决在 JavaScript 模板字符串中插入空格的问题。通过介绍 u00A0 (不间断空格) 和 u0020 (普通空格) 的 Unicode 表示,提供在模板字符串中灵活控制空格的方法,确保输出文本的格式符合预期。 JavaScript 的模板字符串(Template Literals)…

    2025年12月20日
    000
  • 如何为 Material UI DatePicker 设置主题色

    DatePicker 组件是 Material UI 中常用的日期选择器,它基于 TextField 组件构建。直接为 DatePicker 组件设置 color 属性是无效的,因为 DatePicker 组件本身并没有直接暴露 color 属性。但我们可以通过修改其内部 TextField 组件的…

    2025年12月20日
    000
  • 输出格式要求:禁用任何HTML元素使其不响应任何事件

    本教程旨在提供一种通用的方法,禁用任何HTML元素,使其不再响应任何事件,类似于input元素的disabled属性。我们将探讨如何通过结合HTML属性和JavaScript事件监听器管理,实现动态禁用元素并阻止其触发事件,从而有效控制页面交互行为。本文将提供详细的步骤和示例代码,帮助开发者理解和应…

    2025年12月20日
    000
  • 输出格式要求:禁用任何HTML元素的所有事件响应:专业教程

    禁用任何HTML元素的所有事件响应:专业教程 本文旨在提供一种通用的方法,禁用任何HTML元素(例如 span 元素)的所有事件响应,使其行为类似于禁用的 input 元素。我们将探讨如何利用 disabled 属性结合JavaScript来阻止事件监听器处理禁用的元素,并讨论动态启用/禁用元素时的…

    2025年12月20日
    000
  • 输出格式要求:禁用HTML元素的所有事件响应:专业教程

    本教程旨在提供一种通用的方法,禁用任何HTML元素(例如 span 元素)的所有事件响应,使其行为类似于禁用的 input 元素。我们将探讨如何利用 disabled 属性结合JavaScript来实现这一目标,并讨论动态禁用/启用元素时需要考虑的因素。 在Web开发中,有时需要禁用某个HTML元素…

    2025年12月20日
    000
  • js怎么判断页面是否加载完成

    判断页面加载完成的核心方法有三种:使用domcontentloaded事件、load事件和document.readystate属性;2. domcontentloaded事件在html文档解析完成、dom树构建完毕时触发,适合需要操作dom的场景,执行时机早于load事件;3. load事件在页面…

    2025年12月20日
    000
  • JS如何添加和删除元素

    在javascript中,创建和插入新元素的常用方法包括:使用document.createelement()创建元素,通过textcontent或innerhtml设置内容(注意xss风险),利用appendchild()添加到父元素末尾,insertbefore()插入到指定元素前,以及inse…

    2025年12月20日
    000
  • JS如何实现缓存?缓存的策略

    JS实现缓存的核心是利用浏览器存储机制减少网络请求,提升性能。1. LocalStorage/SessionStorage适合存储少量字符串数据,前者持久化,后者仅限会话;2. IndexedDB适用于大量结构化数据,支持事务和索引,但API复杂;3. Cache API可缓存网络响应,常用于静态资…

    2025年12月20日
    000
  • JS如何实现轮播图

    轮播图性能优化需从图片资源、加载策略、dom操作和硬件加速入手,首先压缩图片并使用合适格式以减小体积,其次实现懒加载仅加载可视区域图片,然后通过css3的transform代替left/top修改来提升动画性能,最后可启用gpu硬件加速;无缝轮播通过在图片列表首尾复制最后一张和第一张图片实现,js中…

    2025年12月20日 好文分享
    000
  • JS如何改变元素样式

    答案是:通过直接操作style属性或修改className来控制CSS样式,结合classList API动态切换类,利用CSS变量实现主题变化,使用transition和@keyframes定义过渡与动画,并通过JavaScript触发类名变更以实现复杂动效,同时注意性能优化。 核心在于直接操作D…

    2025年12月20日
    000

发表回复

登录后才能评论
关注微信