呜啦!日常碎碎念,偶尔掉落优质前端博文推荐、学习资源等
网页:https://tg.cosine.ren
本频道的搜索Bot 来辣 👉 @cosSearchBot
私聊直接发消息就可以搜索啦~
🔖tags
#优质博文 #资源推荐 #博客更新 #碎碎念 #项目更新 #手工 #书摘 #阮一峰的科技周刊 #新动态
图频:Cosine 🎨 Gallery @CosineGallery
猫片: @cosine_cat
联系频道主:@cosine_yu
网页:https://tg.cosine.ren
本频道的搜索Bot 来辣 👉 @cosSearchBot
私聊直接发消息就可以搜索啦~
🔖tags
#优质博文 #资源推荐 #博客更新 #碎碎念 #项目更新 #手工 #书摘 #阮一峰的科技周刊 #新动态
图频:Cosine 🎨 Gallery @CosineGallery
猫片: @cosine_cat
联系频道主:@cosine_yu
#优质博文 #React #前端 #工程化 #SSR #组件设计 #course
Building Bulletproof React Components:一位 Vercel 资深工程师分享如何构建能应对真实复杂场景的健壮 React 组件。
[以下是方便搜索索引的大纲(AI 生成),请读原文
author Shu Ding
Building Bulletproof React Components:一位 Vercel 资深工程师分享如何构建能应对真实复杂场景的健壮 React 组件。
AI 摘要:本文系统性地提出了构建 React 组件的十大原则,涵盖服务端渲染(Server Rendering)、水合(Hydration)、多实例、并发渲染(Concurrent Rendering)、组合(Composition)、Portal、View Transition、Activity、数据泄露防护及未来兼容性等现代 React 应用中的关键挑战。作者通过具体代码示例,展示了常见陷阱及其解决方案,强调组件应具备在不可预测环境中稳定运行的能力,而非仅满足“理想路径”下的功能实现。
[以下是方便搜索索引的大纲(AI 生成),请读原文
1. 服务端与水合兼容性
• Server-Proof:避免在组件顶层直接调用浏览器专属 API(如 localStorage),应将相关逻辑移至 useEffect 中,确保服务端渲染(SSR)不崩溃。
• Hydration-Proof:防止水合过程中的视觉闪烁(FOUC),可通过内联 <script> 在 React 水合前同步设置 DOM 状态,确保服务端与客户端初始渲染一致。
2. 多实例与上下文隔离
• Instance-Proof:使用 React 的 useId Hook 为每个组件实例生成唯一 ID,避免多个同类型组件因共享硬编码 ID 而相互干扰。
• Portal-Proof:监听事件时应基于组件所在 DOM 的 ownerDocument.defaultView 获取正确 window 对象,确保在 iframe、弹窗或 createPortal 场景下仍能正常工作。
3. 并发与异步渲染适配
• Concurrent-Proof:在 Server Component 中使用 React.cache 包装数据获取逻辑,避免同一请求内多次重复调用相同异步操作。
• Transition-Proof:配合 React 19 的 <ViewTransition> 实现平滑 UI 切换时,状态更新需通过 startTransition 触发,以启用过渡动画。
4. 组合性与副作用管理
• Composition-Proof:优先使用 Context 而非 React.cloneElement 向子组件传递数据,以兼容 Server Component、lazy 加载和异步 children 等现代 React 特性。
• Activity-Proof:对于通过 <style> 注入全局 CSS 变量的组件,在被 <Activity> 隐藏时应通过 useLayoutEffect 动态设置 media="not all" 来禁用样式,防止副作用残留。
5. 安全与未来兼容性
• Leak-Proof:利用 experimental_taintUniqueValue 或 experimental_taintObjectReference 标记敏感数据(如 token),防止其意外序列化并泄露至客户端。
• Future-Proof:当组件行为依赖值的持久性时(如随机色生成),应使用 useState 而非 useMemo,因为后者仅为性能提示,React 可能在 HMR 或未来优化中丢弃缓存。
author Shu Ding
#优质博文 #前端 #CSS #可视化 #WCAG
Trying to Make the Perfect Pie Chart in CSS 这是真 CSS 魔法师(探索如何仅用 CSS(辅以极少量 JavaScript)构建语义化、可定制且无障碍的饼图。
author Juan Diego Rodríguez
Trying to Make the Perfect Pie Chart in CSS 这是真 CSS 魔法师(探索如何仅用 CSS(辅以极少量 JavaScript)构建语义化、可定制且无障碍的饼图。
AI 摘要:本文作者 Juan Diego Rodríguez 试图在尽量不依赖 JavaScript 的前提下,用纯 CSS 构建一个“完美”的饼图,需满足三大目标:语义化(屏幕阅读器可读)、HTML 可定制(仅改 HTML 即可更新图表)、JavaScript 最小化。文章首先指出 conic-gradient() 虽能快速绘制饼图,但缺乏语义且难以动态定制;随后提出基于 <figure> + <ul> 的语义化结构,利用 data-percentage 和 data-color 属性驱动样式,并通过 CSS 自定义属性(--radius、--percentage、--bg-color 等)结合 attr() 函数提取数据。由于 CSS 无法在兄弟元素间累积状态,作者借助极简 JavaScript 计算每个扇形的起始角度(--accum),再通过 conic-gradient(from var(--offset)) 实现正确旋转。最后,利用 CSS Grid 叠放扇形,并借助 cos() 与 sin() 函数将标签沿圆周精准定位。最终成果兼具视觉美观与无障碍支持,但仍留有改进空间,如自动计算百分比、自动生成配色等。
author Juan Diego Rodríguez
#优质博文 #CSS #性能优化 #Safari #前端 #AI #调试
A Broken Heart 太有乐子了,一个表情符号导致页面加载速度变慢 100 倍的调试故事,Safari 又是 Safari(
[以下是方便搜索索引的大纲(AI 生成),请读原文]
author Allen Pike
A Broken Heart 太有乐子了,一个表情符号导致页面加载速度变慢 100 倍的调试故事,Safari 又是 Safari(
AI 摘要:作者讲述了一次离奇的前端性能调试经历,网页仪表板在 Safari 下的加载时间从 1 秒激增至 10 秒。通过性能分析和 AI 辅助的二分查找法,最终定位问题根源为一个使用了 Noto Color Emoji 字体的心形表情符号(❤️)。该字体在 Safari 上的特定渲染路径导致了极高的布局耗时,文章对此进行了技术复盘并给出了临时解决方案。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 问题发现与初步排查
• 作者发现网页仪表板加载时间异常增加,初步怀疑是 React 框架的性能问题。
• 使用 Safari 性能分析器排查后,发现 CPU 时间主要消耗在 Layout 阶段,而非 JavaScript 执行或网络请求。
• 排除了服务器延迟、第三方脚本等因素,确认问题具有浏览器特异性。
2. 定位核心故障点
• 利用 Claude(AI 编程助手)进行代码二分查找,迅速隔离出导致性能下降的代码段。
• 发现“发送反馈”按钮中新增的一个 ❤️ 表情符号是罪魁祸首。
• 测试显示,移除该表情后布局仅需 2ms,保留则需 1600ms,性能差距达百倍。
3. 技术深度解析
• 问题源于项目引入了 Google 的 Noto Color Emoji 字体,旨在解决 Linux 环境下的表情渲染一致性。
• 该字体依赖 COLRv1 标准,在 Safari 中回退到 SVG 渲染时触发了 CoreSVG 层面的性能 Bug。
• 创建最小复现案例证实:仅引入该字体并渲染单个字符即可导致 Safari 26.2 出现严重卡顿。
4. 解决方案与反思
• 临时解决方案:在 CSS 中将 Apple Color Emoji 优先级置于 Noto Color Emoji 之前,避免在苹果平台触发该 Bug。
• 对 AI 编程工具的辩证思考:AI 虽然极大加速了 Bug 定位和复现过程,但其建议引入的字体库也是导致该问题的根源,体现了 AI 工具的高效与风险并存。
author Allen Pike
#优质博文 #前端 #React #tools
TanStack 团队发布新库 TanStack Hotkeys,解决键盘快捷键开发中常见的跨平台、作用域冲突、输入框聚焦忽略等“小坑”,提供类型安全(Type-safety)、快捷键序列识别、状态追踪及 React 等框架适配器,并集成 Devtools 插件提升开发体验。
author TANSTACK(Twitter@tan_stack)
TanStack 团队发布新库 TanStack Hotkeys,解决键盘快捷键开发中常见的跨平台、作用域冲突、输入框聚焦忽略等“小坑”,提供类型安全(Type-safety)、快捷键序列识别、状态追踪及 React 等框架适配器,并集成 Devtools 插件提升开发体验。
AI 摘要:TanStack 团队发布新库 TanStack Hotkeys,致力于简化 Web 应用中键盘快捷键的实现。该库解决了开发者常遇到的跨平台修饰键差异、event.key 与 event.code 的选择、快捷键冲突与作用域管理、在文本输入框聚焦时自动忽略快捷键、以及注册与清理逻辑等复杂问题。它提供类型安全的模板字符串 API、支持快捷键序列检测与按键状态追踪,并为 React 等主流框架提供适配器。此外,官方还推出配套的 TanStack Devtools 插件,可实时查看已按下的按键、注册的快捷键及其作用域和配置,显著提升调试效率。
author TANSTACK(Twitter@tan_stack)
Sanity 团队开发了 React 组件
<LogoSoup /> 解决网页中多品牌 Logo 排列时因尺寸、比例与视觉重量不一致导致的“Logo Soup”混乱问题。The logo soup problem (and how to solve it
AI 摘要:文章深入剖析了在网页或应用中展示多个合作方 Logo 时常见的“Logo 汤”问题——即不同 Logo 因原始尺寸、宽高比(aspect ratio)、视觉密度(visual weight)和内边距(padding)差异,导致排版混乱、视觉失衡。作者指出,手动调整既耗时又不可持续,提出通过数学公式(Proportional Image Normalization Formula)结合图像分析技术,实现 Logo 的自动视觉比例归一化。为此,Sanity 团队开发了 React 组件 <LogoSoup />,能自动处理 Logo 的尺寸缩放、内容裁剪、密度补偿与光学对齐(optical alignment),并支持与 CMS(如 Sanity)集成,使非技术人员也能轻松维护 Logo 列表。
author Rostislav Melkumyan
#优质博文 #前端 #HTML #WCAG
You might not need role="presentation"
author Steve Frenzel
You might not need role="presentation"
AI 摘要:本文通过规范解读与真实代码案例,指出开发者常误将 role="presentation" 当作 aria-hidden="true" 使用,从而错误地移除语义却保留内容,导致可访问性问题。作者强调该属性仅在极少数场景(如布局表格、标签页组件、菜单模式)中合理,并建议优先使用语义化 HTML 或 aria-hidden 替代。多数误用可通过删除该属性并优化结构解决。
author Steve Frenzel
#优质博文 #JavaScript #新特性 #前端
It’s about to get a lot easier for your JavaScript to clean up after itself
author Mat Marquis
It’s about to get a lot easier for your JavaScript to clean up after itself
AI 摘要:本文介绍了 JavaScript 的“显式资源管理”(Explicit Resource Management)提案,该提案旨在标准化资源清理流程。作者 Mat Marquis 以幽默风格阐述了当前资源释放方式的混乱现状,并指出新特性 [Symbol.dispose] 和 using 关键字如何提供统一、可预测的清理机制。前者为对象定义标准清理方法,后者在变量作用域结束时自动调用该方法,从而避免资源泄漏。该提案已进入 TC39 Stage 3,在除 Safari 外的主流浏览器中已可试用。
author Mat Marquis
#碎碎念
说实在的,很久没有这种大脑完全放空的什么都不想的生病的几天了,得珍惜。
不用思考 AI 又出了什么新东西,不用思考这业界又发生了什么大变动,不用思考还有额度没用完,不用思考今天 github 还没有提交,不用思考我的图频还没更新、小项目还有 issue 没解决……是什么时候变成这样的呢😢
不过我也很喜欢思考的感觉就是了,头还在晕,嗓子还在疼,继续睡觉去了(发烧太坏了)
说实在的,很久没有这种大脑完全放空的什么都不想的生病的几天了,得珍惜。
不用思考 AI 又出了什么新东西,不用思考这业界又发生了什么大变动,不用思考还有额度没用完,不用思考今天 github 还没有提交,不用思考我的图频还没更新、小项目还有 issue 没解决……是什么时候变成这样的呢😢
不过我也很喜欢思考的感觉就是了,头还在晕,嗓子还在疼,继续睡觉去了(发烧太坏了)
#优质博文 #前端 #移动端 #性能优化
Mobile performance: How to make your website mobile friendly:本文探讨了网站在移动端性能低下的深层原因,并提供了针对图片、JavaScript、CSS 及第三方脚本的实战优化方案。
author Jakub Andrzejewski
Mobile performance: How to make your website mobile friendly:本文探讨了网站在移动端性能低下的深层原因,并提供了针对图片、JavaScript、CSS 及第三方脚本的实战优化方案。
AI 摘要:文章指出移动设备由于硬件性能(Processing Power)、内存限制及不稳定的网络环境,面临比桌面端严峻得多的性能挑战。即使通过了桌面端的性能审计,移动端仍可能因为 JavaScript 阻塞、大型图片资源及布局偏移等问题导致用户流失。作者建议通过实验室数据(Lab Data)与现场数据(Field Data)结合的方式进行监控,并详细介绍了使用响应式图片(Responsive Images)、延迟 JavaScript 执行、提取关键 CSS(Critical CSS)以及对第三方脚本进行节流(Throttling)等具体优化手段,以提升用户的感知速度(Perceived Speed)。
author Jakub Andrzejewski
#优质博文 #前端 #JavaScript #国际化
A Percise Parser:本文介绍了一个因硬编码地区数值格式(Locale Formatting)并使用拙劣的字符串操作,导致国际化失效的 JavaScript 解析器(Parser)案例。
[以下是方便搜索索引的大纲 (AI 生成),请读原文]
author Remy Porter
A Percise Parser:本文介绍了一个因硬编码地区数值格式(Locale Formatting)并使用拙劣的字符串操作,导致国际化失效的 JavaScript 解析器(Parser)案例。
AI 摘要:文章讲述了一家德国公司在国际化扩张过程中遭遇的技术故障,其根源是一个名为 handleInput 的 JavaScript 数值解析函数。该函数不仅硬编码了德国本地的数字格式(如用点号作为千分位、逗号作为小数点),还通过一系列极其混乱的字符串分割(Split)、拼接和隐式类型转换来处理精度。这种缺乏通用性且逻辑脆弱的代码最终被具有区域感知(Locale-aware)的标准解析器所取代。
[以下是方便搜索索引的大纲 (AI 生成),请读原文]
1. 背景与问题发现
• 一家德国公司在业务向国际市场扩张时,系统在其他地区(Locale)频繁崩溃。
• 工程师 Thomas 追踪到问题核心是一个处理数值输入的“精确”解析器。
2. 拙劣的代码逻辑分析
• 格式清理:函数首先手动剥离正号(+),并将点号(.)作为千分位符直接删除,这在非德语区会导致错误。
• 混乱的精度处理:代码通过 indexOf(',') 寻找小数点,然后进行复杂的字符串分割与整数解析(parseInt)。
• 隐式类型转换陷阱:利用 JavaScript 的特性,将字符串类型的整数与数值类型的整数相加,导致了非预期的字符串拼接(Concatenation),最后再除以 100 来恢复数值。
• 输出不一致:根据输入条件的不同,函数有时返回数值类型,有时却保留为字符串,缺乏一致性。
3. 解决方案与反思
• 修复工作本身并不复杂:Thomas 删除了冗余逻辑,改用支持区域感知的标准数值解析器。
• 真正的挑战在于理解原始开发者编写这段奇葩代码的初衷和逻辑。
author Remy Porter
#优质博文 #前端 #Vite #Rolldown #工程化 #新动态
What’s New in ViteLand: January 2026 Recap
VoidZero 2026 年 1 月回顾
What’s New in ViteLand: January 2026 Recap
VoidZero 2026 年 1 月回顾
1. 品牌与设计统一(Unified Design)
• 实现了 VoidZero 旗下所有项目(Vite, Vitest, Rolldown, Oxc)的视觉身份统一,发布了全新的官网和 Logo。
• 更新了 Vite 的启动模板(Starter Templates),将新品牌标识内置其中。
• 强调了工具链的深度集成:Vite 8 在底层直接使用 Rolldown 和 Oxc,实现了一致的开发者体验。
2. 核心项目进展(Project Updates)
• Vite:自 2020 年发布以来,累计下载量超过 30 亿次;React 服务端组件(React Server Components, RSC)插件进行了优化,以支持 TanStack Start 等框架。
• Vitest:启动 4.1 测试版(Beta),引入测试标签(Test Tags)功能,并支持通过禁用 viteModuleRunner 选项在脱离 Vite 的情况下运行。
• Rolldown:正式达成候选发布版(Release Candidate, RC)里程碑,API 进入稳定阶段;推出“Lazy Barrel Optimization”,在 AntDesign 等场景下可减少 92% 的模块编译,提速 2 倍。
• Oxc:Oxlint 支持 oxlint.config.ts 动态配置;Oxfmt 实现了与 Prettier 100% 的一致性(Conformance),并新增了 Tailwind CSS 类名排序功能。
3. 社区动态与生态(Community & Events)
• 榜单表现:在 2025 JavaScript Rising Stars 榜单中,Vite、Oxc、Rolldown 和 tsdown 均名列前茅。
• 生态迁移:Hugging Face、Turborepo 和 Lichess 等知名项目宣布从 ESLint/Prettier 迁移至 Oxlint/Oxfmt。
• 周边工具:社区推出了基于 Oxc 的代码体积优化工具 jsshaker 以及 Oxlint 的终端用户界面工具 oxlint-tui。