范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

我们为何选择弃用cssjs?

  大家好,很高兴又见面了,我是" 前端进阶 ",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!
  CSS-in-js
  emotion 排名第二的维护者 Sam 所在公司弃用了 css-in-js 方案,引起了不小的讨论。 1.概述 & 精读
  原文很有条理,先从 css-in-js 优点说起,再转而谈到缺点,说明了 css-in-js 这个新事物拥有明显的优点与缺点;然后从性能问题作为切入点,说明自己所在的公司为什么不得不抛弃 css-in-js;最后告诉读者目前自己的解决方案是 css-modules。
  编译时 css-in-js 方案
  之后还有一点儿延展性思考,即目前还诞生了一批编译时 css-in-js 方案,但面对性能问题时依然徒劳。让我们花点儿时间了解下作者的具体思路吧。 2.css-in-js 的优缺点
  css-in-js 作为一个理念较新的开发思路,拥有如下几个明显的优缺点。 2.1 优点无全局样式冲突 :就像 js 文件天然支持模块化的好处一样,原生 css 因为没有模块化能力,天然容易导致全局样式污染,如果不是特意用 BEM 方式命名,想要避免冲突就只能借助 css-in-js 了。(css-modules 也一样能做到) 与 js 代码合在一起 :天然融合进 js 代码方便模块化管理,使 css 可以与某个局部模块绑定。(css-modules 也一样能做到,只是必须单独拆一个样式文件) 能将 js 变量应用到样式上 :虽然 css 变量也能解决这个问题,但不如 css-in-js 那么直观,inline-style 也能解决这个问题,但会产生大量重复的局部样式,且这个优势 css-modules 做不到。 2.2 缺点css-in-js 运行时解析的实现版本增加了运行时性能压力,尤其在 React18 调度机制模式下,存在无法解决的性能问题(运行时插入样式会导致 React 渲染暂停,浏览器解析一遍样式,渲染再继续,然后浏览器又解析一遍样式)。 增加了包体积。相比原生或者 css-modules 方案来说,增加了运行时框架代码 8kb 左右。 让 ReactDevTools 结构变得复杂,因为 css-in-js 会包裹额外的 React 组件层用来实现样式插入。
  除了上述缺点外,css-in-js 还有三点深度使用后才能察觉的坑: 多个不同(甚至是相同)版本的 css-in-js 库同时加载时可能导致错误 。笔者用 styled-components 就遇到了类似问题,甚至语法会产生不兼容的情况,虽然这些问题都可以被解决,但花费的额外时间需要计算一样,相比 css-in-js 得到的收益是否值得。 样式插入优先级无法自定义 :这就导致产生样式覆盖时,业务对样式覆盖的优先级无法产生稳定的预期。class 优先级由 header 定义顺序决定,而非 className 的字符顺序决定,而 header 定义顺序又由资源加载与 css-in-js 插入执行时机决定,导致业务几乎不可能有稳定的样式覆盖顺序。这里产生的问题就是业务代码不断增多的 !important 定义。 不同 React 版本的 SSR,css-in-js 需要适配不同的实现 ,这对框架作者不太友好。
  除了性能问题以外,其他问题都可以忍,但偏偏在性能问题上,css-in-js 遇到了无解的场景。3.无解的性能问题
  css-in-js无解的性能问题
  第一条缺点提到的运行时解析,是 css-in-js 方案永远跨不过去的困境,即便对于编译时 css-in-js 方案来说,也免不了在渲染时做额外的逻辑执行拖慢渲染速度: function App() {   return ;     // 就是这种代码导致了性能问题 }
  原因是当 React 重渲染组件时,需要 重新解析样式定义,并序列化 className ,当渲染非常频繁时会导致明显的性能瓶颈,而解决方法是把样式定义抽出来,但这样就损失了第三个优点,即无法读取 js 变量了: const myCss = css({   backgroundColor: "blue",   width: 100,   height: 100, });
  不得不说 React 的渲染机制实在是太有问题了,如果换成 SolidJS 这个问题就好办了,因为运行时的样式代码仅会运行一次,组件重渲染也不会导致这段解析代码被重复执行,此时 css-in-js 在样式变化时再做一次精确样式更新,性能问题就可以被解决了。 4.换成 css modules
  css modules
  css-modules 同时支持优点一和二,而优点三可以通过一些特定语法糖绕过:通过 :import :export 伪类做 css 变量的导入导出,用 webpack-loader 实现 js 中引用 css 变量,用 css variable 实现 css 引用 js 变量。
  所以当性能问题是绕不过去的话题,而 css-modules 在性能最优的情况下,有一些曲线方案可以同时支持 css-in-js 的优点,也就能理解为什么作者要弃用 css-in-js 了。 5.包体积真的变大了吗
  原文谈到的 css-in-js 增加了 8~16kb 其实是在强行堆缺点了,除非你的项目只有一行 css 定义。如果我们只考虑传输时的包体积与 HTML 中样式定义数量,而忽略运行时产生的性能负担,那么 css-in-js 在大型项目无疑是最优的。
  打包体积
  原因就是 css-in-js 样式是按需插入的,没有渲染的组件就不会插入样式。甚至渲染了的组件也不一定会插入样式,因为 css-in-js 可以对包含相同样式定义的场景做 className 合并,类似于 webpack 打包时,可以把不同模块公共代码抽到一个 chunk 里。 6.编译时 css-in-js 方案是出路吗
  理论上是出路,但限制了 css-in-js 的灵活性。从 vanilla-extract 等编译时 css-in-js 框架来看,确实解决了运行时 css-in-js 性能问题,但带来了更多语法限制,比如必须预先定义样式再使用: import { style } from "@vanilla-extract/css" const myStyle = style({   display: "flex",   paddingTop: "3px" }) const App = () =>
  编译时 css-in-js 想要做到通用性,只能提供一个 className,这样就不受任何框架和环境的限制了,但这样也限制了声明语法的灵活性,显然不可以用内联方式定义样式。
  而且这种编译时的方案本质上和 css-modules 是一样的,背后都是定义了一些静态样式名,只是说这些样式问题以 .sass 定义还是 .ts 定义,如果用 .ts 定义,配合编译工具可以使代码原生 import 的更加舒服。
  所以使用了编译时 css-in-js 方案,本质上还是抛弃了运行时 css-in-js,投向了变种的 css-modules 阵营。 7.总结
  css-in-js 本身方向是对的,即把 css 与 js 融合,但太过灵活的运行时 css-in-js 方案遇到了几乎不可解的性能问题,编译时的 css-in-js 方案可能是更好的出路。
  css-in-js 这个名字本身就表示它拥有 in js 的灵活性,而编译时 css-in-js 方案本质因为是 css-module,所以不可避免拥有一些比较奇怪的限制,如果 js 里的代码不能像真的 js 一样灵活,可能还不如回到 .scss 或者 .less 的后缀更好理解一些。 参考资料原文链接:https://github.com/ascoders/weekly
  原文作者:黄子毅

为什么权重蓝筹股一直在回调?今天大盘挺刺激的,上去下来跟闹着玩一样,一点儿庄重性都没有。早上由于昨晚离岸人民币跌破了7。27再破年内新低的负面消息影响,开盘三大指数就集体低开并快速杀跌,一时间引起大家恐慌。令中国开放的大门越开越大央视网消息(新闻联播)党的十八大以来,中国实行更加积极主动的开放战略,形成更大范围更宽领域更深层次对外开放格局。56。8,这是十年间(2012年2021年)我国贸易总额的增速!十年观察魏牌腰斩,哈弗下滑,掉队的长城汽车该如何自救?文懂车帝原创李帅飞懂车帝原创行业刚刚过去的金九,中国车市整体欣欣向荣,而长城汽车却掉队了。长城汽车从9月的销量成绩来看,长城汽车不仅未能借助整个中国汽车市场大盘的向上之力实现相应的10月起,部分退休人员额外收到两笔养老金,看看有你份吗?点击上方蓝色按钮,即可收听全文。10月起,部分退休人员额外收到两笔养老金,咋回事?看看有你份吗?时间进入10月中下旬,多地开始发放10月份的养老金,10月起,养老金的发放比较特殊,秋天的美超温柔请先说你好可爱其实所有纠结做选择的人,心里早就有答案的,咨询只是想得到内心所倾向的选择。最终的所谓命运,还是需要自己一步步走出来。你可爱有趣漂亮,如精灵被世俗所掩藏,你不是没人爱,我要为祥林嫂正名提到祥林嫂,人们总会联想到她喋喋不休地诉说自己的苦难,听得所有人都厌烦了。久而久之,祥林嫂成为爱抱怨的代名词,很多人也会在劝说别人的时候说不要整天跟祥林嫂一样抱怨这个抱怨那个。如果生活不易,努力工作世上没有一种工作是不辛苦的,没有一个人是不累的,不管什么工作都是苦于乐并存着,生活都很不容易,但是为了家人的生活来源,为了孩子的成长,为了父母的健康,一家人的幸福加油努力工作,虽然强者不言,善者不评,智者不辩说话是银,沉默是金。海明威说我们用三年学说话,却用一生学闭嘴。随着年岁渐长,你会悟到生活不需要夸夸其谈,妙语连珠,而是在沉静中自守,不因嘴巴招惹是非。强者不言,善者不评,智者不辩。以下是Sybil如何解决PlungeAptos(APT)价格问题Aptos基金会宣布向其早期测试网用户空投超过2000万个APT代币。然而,在Sybil地址在Binance上存入大量APT代币后,空投导致APT价格暴跌。根据Xexplore的数京东价格监控京东今日预售开启,商家该如何更好做准备?2022年京东双十一于10月20日20点开始售卖,即今晚8点,京东平台预售开启,由此拉开2022年双十一活动的帷幕。往年的双十一通过尾款喵糖购物金膨胀等烧脑的规则来考验着消费者的脑二手房市场观察多地推行带押过户新模式近段时间以来,全国多地推出带押过户的二手房交易新模式。有业内人士表示,各地热衷试水带押过户,主要源于这一模式可以大幅缩短交易时间,降低交易成本,提升交易效率和便利度,有利于激发二手
巨人网络加速海外战略布局,用互联网3。0技术做游戏3月23日,巨人网络于当地时间22日在旧金山宣布,正式推出基于海外市场所打造的全新品牌ZTimes。该品牌在2023游戏开发者大会(GDC)上正式亮相,致力于用互联网3。0技术做游(经济)努力打造互联网广告监管利剑解读互联网广告管理新规新华社北京3月24日电题努力打造互联网广告监管利剑解读互联网广告管理新规新华社记者赵文君市场监管总局近日修订发布互联网广告管理办法,将于2023年5月1日起施行。针对群众反映集中的尽管有SEC的压力,这7种山寨币的价格预计仍将暴涨!在本周初加密货币市场的涨势短暂停顿后,比特币(BTC)和山寨币似乎继续上涨。在本周初加密货币市场的涨势短暂停顿后,比特币(BTC)和山寨币继续上行。比特币(BTC)价格为28,20上交所恢复艾森股份科创板IPO发行上市审核下游客户涵盖长电科技通富微电等知名厂商智通财经APP获悉,3月24日,因发行人已完成财务资料更新,根据上海证券交易所股票发行上市审核规则第六十二条规定,上交所恢复江苏艾森半导体材料股份有限公司(简称艾森股份)发行上市审盐氧护孩子春困,真的是因为睡眠不足吗?昨天(3。21)是春分节气也是世界睡眠日春光明媚,气温回暖人们普遍精神疲倦,昏昏欲睡民间将这种现象称之为春困春困是这么来的春困其实是季节交替所带来的一种生理变化。从冬入春,气温逐渐女人生孩子,(鬼门关走了一趟)女人生孩子的分娩过程包括三个产程第一产程称之为宫颈扩张期,也就是我们俗称开十指的过程。第二产程称之为胎儿娩出期,也就是十指开全后,分娩出胎儿的全过程。第三产程称之为胎盘娩出期,也就故乡,年少故事自然主义文学大师岛崎藤村写给自己孩子的故事新书架封面新闻记者张杰实习生刘珈汐说起经典儿童文学,你会想到哪些书?长袜子皮皮丛林之书还是彼得潘?这些国际畅销书尽管出版年代久远,却在一代代孩子那里流传,为儿童成长起着独特而显著的功能。孩子的智商是遗传父亲还是母亲呢?孩子智商的高低,是以几个因素有关的。第一就是遗传,父母的智商高,那孩子的智商也不会低。这种遗传因素还表现在血缘关系之上,父母同是本地人,孩子的平均智商大概为102,而隔省结婚的父母强生医疗科技执行总裁被AdvaMed任命为新一任主席AdvaMed今天宣布,已任命强生医疗科技执行总裁麦克沃伊AshleyMcEvoy为新主席。该集团董事会在昨天的季度会议上一致选举麦克沃伊为董事长。她是第一位担任美国主要医疗技术贸心想事成总制片人梁振华回应质疑住四合院奋斗是一种误读来源环球时报环球时报特约记者杨柳姐妹俩住着价值上亿的四合院奋斗的说法,是一种误读。心想事成(海报如图)总制片人兼艺术总监梁振华21日接受环球时报采访时如此回应。这部讲述当下北京胡同声生不息宝岛季,马嘉祺连唱两首金曲,炸裂唱功,排名断层第一头条创作挑战赛湖南卫视继治愈音综时光音乐会2之后,再次推出了一档高质量音综节目声生不息宝岛季一经上线之后,口碑好评双丰收,不少网友都纷纷表示,看音综节目,还得是芒果出品,不论以什么