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

我们为何选择弃用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
  原文作者:黄子毅

中华裕固风情走廊汽车盘旋了大约十几里山路,到了山顶,突然眼前一亮,所有的人都兴奋起来,惊讶的喊道喔,好大好漂亮的草原啊。谁也不会想到,一路沿着不毛之地的山路上行,到达山顶,竟然是一望无际的大美草原秋风黄叶满山金(原创)一片红枫湖水赤,秋风黄叶满山金。霏微雨后霞光照,涤洗江山锦绣吟。注解一片红枫湖水赤在秋萧中,枫树的红叶会显得特别雅致,让人忧伤的情绪变得兴致盎然。尤其是在湖边看到一片红枫林倒映在水秋天的婺源,天堂跌落人间的画卷你是否曾为春季的婺源着迷是否正想出发,发现他已步入金秋!计划落空的你其实无需懊恼,因为秋季的婺源才是天神最得意的杰作从春末的金黄至被秋色渲染过的绚烂,全都泼洒在这2947。51平方铁人是我小时候就扎根脑海的英雄秋天的呼伦贝尔大草原是怎样的自驾游记风景中的溯望北疆行(一)2018年的十月一假期,我规划了向北沿边疆的自驾之行,此次经过了两处国门,到了中国的最北端穿越了呼伦贝尔大草原大兴安岭林区领略了最年轻的火山奇观。七广西百去不厌的地方,可以在秋天小住几日,山水如画,比成都安逸秋日生活打卡季广西的自然美景,几乎传遍了大江南北,原生态的风景,令人神清气爽,秋日的气候,更是舒适。广西有个百去不厌的地方,可以在秋天过来,小住几日,自然山水如诗画,每一幅都独一无1秒钟都不给上?林书豪更新社媒!短短11个字,说出了他的态度广州队的上赛季,在郭士强指导的带领下,打出了让人惊喜的表现。而新赛季,他们做了一些阵容天赋上的补充,以及外援上的调整,前两轮1胜1负,开局不敌青岛队后,紧接着击败了四川队。而第3轮科比去世2年半后,妻子高调晒接吻照对不起,不等了知乎上有个话题亲人离世是什么体验?下面有个高赞的回答遗憾。真正的道别没有长亭古道,没有劝君更进一杯酒,也许就在某个不经意的清晨,有的人就永远停留在了回忆里。转眼间,科比去世已经两年晚上7点!国足换帅闹剧结束,李霄鹏完成使命,足协新目标曝光10月17日消息,2022年的世界杯马上要开始了,中国男足却还处于困境之中。在彻底无缘世界杯之后,中国男足就像人间蒸发一样。在今天,男足终于又传来了新消息。据北京青年报消息,李霄鹏iPhone14Pro需求下降?发货周期低于上一代,出货量目标堪忧iPhone14Pro系列开售以来火爆异常,不仅第三方有着两到三千元的加价,官网发货周期也要67周时间最长延迟到45天左右。不过最新一份研究报告显示,其实新机的发货周期相较上代有所金山晓旭一一杭川十景之一志云,杭川琴岗横案于前,金山列屏于后,髻峰左峙,旗障右幡。在杭川北望,只因金山在阳光照耀下熠熠生辉,呈现一派紫铜色,故在杭川十景中称为金山晓旭。金山距杭城十五公里,远望孤峰兀立,实金秋十月,建议常吃4菜2汤,滋养身体,抵御寒冷,经济实惠又营养秋日生活打卡季金秋十月,是收获的季节,也是最繁忙的时候,十月的天气逐渐变得寒冷,很多人容易体质虚寒,身体容易缺乏各种营养,需要吃一些营养的菜肴,喝一些鲜汤温补身体。所以进入十月,建
王者荣耀曾经火热,如今冷门的4位英雄,有一位老婆还被抢了头条创作挑战赛文丨可儿游戏说原创王者荣耀中,一共有113个英雄,这么多的英雄,有的人气很高,比如貂蝉瑶这种,基本上每一把都可以看到这些英雄的影子。但是也有一些人气很低,只有在特定的你可能不知道的现实版塔防游戏盐灶拖神想必大家这几天在抖音里面经常刷到盐灶拖神的视频。一什么是盐灶拖神?盐灶拖神是潮汕地区澄海区盐鸿镇的盐灶村的传统春节民俗祭祀活动,潮汕人称神仙为老爷,祭祀称作为营大老爷,是祭祀过程中让玩家们暗自窃喜的BUG,多年后才发现是官方故意的在你的记忆中,有哪些游戏中出现过一些不费力就能发现的BUG呢?还记得当年第一次玩仙剑奇侠传时,我们总会将场景中所有的地方全都翻一遍,包括衣柜抽屉箱子野花坛子篮子药柜,树木只要看上去星际争霸2亚服转服方法,星际2如何转韩服亚服教学,战网转国际服近日,电竞选手李培楠在星际争霸2电竞比赛荣获世界冠军,这是中国选手在星际争霸2项目中的首个世冠,有里程碑式的意义。不少玩家想进入星际争霸2游玩,感受中国选手夺冠后炸服的快乐,但国服扎伊尔埃梅里成欧冠淘汰赛最年轻首发欧冠联赛八分之一决赛首回合比赛中,巴黎圣日耳曼主场0比1不敌老对手拜仁,大巴黎的欧冠淘汰赛前景并不乐观。但这场90分钟的争夺中,他们也绝非没有收获,比如身披33号的中场球员扎伊尔埃泰山队新赛季首签确定!广州队大将加盟,曾在国家队获高洪波重用中超冬季转会窗即将在本月20日正式开启,最近一段时间不少球队都传出了引进新援的消息,山东泰山就是其中的一个。上赛季结束后不久,很多正值当打之年的本土球员都与泰山队传出了绯闻,比如大种植牙如此新兴且热门,但是它可不是小年轻种植牙的前世今生古埃及,一个发源于尼罗河的著名文明,不仅有世界享誉盛名的胡夫金字塔,而且还是和美索不达米亚一起成为了希腊文明的老祖宗。至于在90年代才开始在我国广泛推行的种植牙,则落实二次全会部署在行动丨云南楚雄紧扣年轻干部成长规律擦亮履职清廉底色作为一名年轻纪检监察干部,我们要知敬畏存戒惧守底线,扣好人生第一粒扣子,努力在工作岗位上发光发热近日,在云南省楚雄彝族自治州武定县纪委监委举办的清风感悟座谈会上,一名90后纪检监察四大虚气虚血虚阴虚阳虚,5张图,讲清楚!大家好,我是中医妇科郭医生。说起中医的虚症,很多人不陌生,但是也分不清。今天我就用4张图给大家讲清楚,特别是在妇科方面的症状表现。气血虚弱气虚气虚的人就好比是轮胎胎气不足,那么车就山中寻玉分享历史五千年为使众生养生于良渚。圣父决定为此地赐一玉精灵,投入东海,长到山中。以让良渚国民得以谋生。霎时山谷皱,溪水自行,飞瀑急流,肆意而行。玉精灵得此先天自然滋润,随即茁壮成长辽代惕隐官职的职任涉及什么?教化职责的内容包括什么?辽代惕隐的职任官员的职任涉及到官职的完备与否,更关系到官员的能力能否胜任,秦圣临国,始定刑名,显陈旧章,初平法式,审别职任,以立恒常。因此只有职权明确,才能使国家的行政机构得以运行