#优质博文 #前端 #CSS #SVG #性能优化 #动画
Replace Your Animated GIFs with SVGs
author John Rhea
Replace Your Animated GIFs with SVGs
AI 摘要:文章介绍了使用 SVG 动画 作为 GIF 动画 替代方案的优势。与 GIF 相比,SVG 动画文件体积更小、分辨率无损放大、与部分 CSS 媒体查询兼容,还可以直接嵌入 img 标签或作为背景图使用。但也存在局限:如不支持 prefers-reduced-motion、无法触发交互事件(hover/click)、限制 JavaScript 等。整体上,SVG 动画是 GIF 的现代替代,尤其适用于形状移动或变换类动画,性能和画质优势明显。
author John Rhea
Frontend Masters
Replace Your Animated GIFs with SVGs
No one loves dancing hamster GIFs more than I do. But all those animated frames can add up to files so large you don’t even see the dancing hamster. Your other tab has already loaded and you’ve followed the dopamine hits down another social media rabbit hole.
#优质博文 #CSS #新特性 #前端
非常全的 CSS 新特性合集。
你需要知道的现代 CSS(2025版)
[以下是方便搜索索引的大纲(AI 生成),请读原文]
author Chris Coyier
非常全的 CSS 新特性合集。
你需要知道的现代 CSS(2025版)
AI 摘要:本文梳理了 2025 年现代 CSS 的最新进展,包括动画到 auto、@function、if()、text-wrap、linear() easing、 shape()、增强的 attr()、reading-flow 等特性。这些新功能大多提升了样式抽象能力、响应式设计的灵活性和排版的可控性,同时展现了 Chrome 为主、Safari/Firefox 跟进的支持现状,并给出 Polyfill 和渐进增强的可行性建议。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 动画与尺寸控制
- Animate to Auto:首度支持从固定数值过渡到 `auto`、`min-content` 等关键字,解决了长久以来无法动画到内在高度的问题。
- field-sizing:表单元素可根据内容自动扩展,高度自适应不再依赖 JS。
2. HTML 与交互增强
- Popovers & Invokers:新增 `popover` 和 `invoker` 属性,原生支持弹出层及控制呼叫,提升可访问性与无 JS 支持的友好性。
- Custom Selects:允许开发者完全自定义 `<select>` 的 UI,不再局限于操作系统原生样式。
3. 函数与逻辑能力
- @function:允许开发者在 CSS 内自定义函数,提升逻辑复用与避免重复代码。
- if():原生条件语法,类似 `switch`,用于条件性的样式应用。
- linear() easing:支持更复杂的动画缓动效果,可实现多点定义的动态曲线,而非仅限于 `cubic-bezier()`。
- shape():改良版路径函数,用 CSS 单位定义 `clip-path`、`offset-path` 等,实现复杂图形与路径动画。
- random()(预览特性):Safari 已支持,用于随机化样式值(实验性)。
4. 属性与排版优化
- text-wrap:新增 `balance`、`pretty`,提升文字换行的美观性与可读性,特别优化标题与段落排版。
- 增强的 attr():可将 HTML 属性值解析为数字、颜色等数据类型,提升数据驱动的 CSS 表达能力。
- reading-flow:重新映射视觉顺序与键盘导航顺序,避免因布局重排导致的 Tab 键焦点错乱。
5. 值得关注的趋势
- Masonry 布局:提案逐步接近规范化,用于实现瀑布流布局。
- margin-trim:Safari 首发,期待跨浏览器可用。
- sibling-index() / sibling-count():有助于顺序动画和灵活选择。
- View Transitions:Firefox 正在实现,进一步统一页面过渡体验。
- calc() 扩展:将支持单位间的乘除运算。
6. 经典与延续
- Container queries / container units:继承 `media queries` 的伟大进步。
- :has() 伪类:极大强化选择器能力。
- 滚动驱动动画 / Anchor Positioning / View Transition:现代 CSS 交互特性逐步进入主流支持。
- 额外视口单位(如 dvh) 已进入 baseline。
author Chris Coyier
Frontendmasters
What You Need to Know about Modern CSS (2025 Edition)
If you thought 2024 was packed with amazing new CSS, well, you're right. But so is 2025 and it keeps looking bright. Check out our list of the best stuff with easy-to-reference examples.
Forwarded from 余弦&妲喵の养喵日常🐱 (Hyacine🦄)
cos 昨天语重心长跟我这个北方人科普台风有多可怕,拉着我把山竹历史战绩的视频刷了一遍,然后又打算囤点自热食品防停水停电。
(我内心os:馋了就直说
然后刚才拆完海底捞自热锅的包装,俩猫就把箱子占了
(我内心os:馋了就直说
然后刚才拆完海底捞自热锅的包装,俩猫就把箱子占了
🥰2
#优质博文 #前端 #依赖管理 #React #工程化
当然是选择 node-modules-inspector 啦!
How to keep package.json under control
[以下是方便搜索索引的大纲(AI 生成),请读原文]
author Tom MacWright
当然是选择 node-modules-inspector 啦!
How to keep package.json under control
AI 摘要:本文结合 Val Town 的实际开发经验,探讨了在复杂 React 应用中如何避免依赖臃肿、保证 package.json 的可控性。作者强调理解依赖、避免不必要引入、分析依赖大小、借助工具管理更新与清理,并推荐学习优秀开发者的模块。核心观点是:依赖管理是前端开发的必修课,需在技术现实和理想简洁之间找到平衡。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 理解依赖与选择
• 在引入新依赖时应阅读源码和 README,而不是盲目安装
• 小型依赖可直接 vendor(复制进项目)而非整个 npm 安装
• 需要权衡依赖体积与使用场景,避免冗余引入
2. 工具与方法论
• 使用 npm ls、package-lock.json、pnpm why 等追踪依赖树与冗余
• 分析依赖的实际体积(开发环境 node_modules 和生产构建大小双维度)
• 借助 rollup-plugin-visualizer、Next.js bundle analyzer 等工具可视化构建产物
3. 模块评估标准
• 好的模块:有维护历史、TypeScript 类型支持、完整测试、文档清晰
• 坏的模块:不符合实际问题、缺乏维护或质量低劣
• 重点在于理解问题本身与模块实现的契合度
4. 清理与升级
• 借助 Renovate 持续更新依赖,避免积压
• 借助 Knip 清理未使用的依赖和文件,保持项目整洁
• 渐进式更新比“年度大升级”风险更低
5. 社群与开发者生态
• 推荐关注优秀开发者如 Sindre Sorhus、isaacs、Matteo Collina、Mafintosh、wooorm、unjs、Rich Harris 等
• 持续追踪他们的作品,有助于找到高质量依赖
6. 哲学与实践
• 依赖不可避免,是现代 Web 开发的本质
• 需要在“必要复杂性”与“依赖治理”之间找到平衡
• 依赖管理是一种长期的“gardening”(园艺)工作
author Tom MacWright
GitHub
GitHub - antfu/node-modules-inspector: Interactive UI for local node modules inspection
Interactive UI for local node modules inspection. Contribute to antfu/node-modules-inspector development by creating an account on GitHub.
👍2
#优质博文 #CSS #前端 #动画 #新特性
The Big Gotcha With @starting-style
author Josh W. Comeau
The Big Gotcha With @starting-style
AI 摘要:本文介绍了 CSS 的新特性 @starting-style,它允许使用 transition 实现入场动画,但作者指出该特性存在严重的 specificity(优先级)陷阱,使得动画常常无法按预期运行。作者对比了 @starting-style 与传统的 keyframes,分析了具体问题案例,并提出三类解决方案:使用 !important、借助 CSS custom properties(变量)、退回到 keyframes。整体结论是:虽然 @starting-style 看似简化了写法,但 keyframe 动画依然更稳定、通用且易于维护。
author Josh W. Comeau
Joshwcomeau
The Big Gotcha With @starting-style • Josh W. Comeau
CSS has been on fire lately, with tons of great new features. @starting-style is an interesting one; it allows us to use CSS transitions for enter animations, something previously reserved for CSS keyframe animations. But is the juice worth the squeeze?
#碎碎念
话说有没有人笑一笑这个,昨天点进小米的直播间,开幕雷击。
这个我是真服了,手持小米 14pro 感觉还能再苟一年,换哪家好呢 🥺 要不考虑考虑 ov 系?
(PS:iPhone 有了,主力机还是安卓)
话说有没有人笑一笑这个,昨天点进小米的直播间,开幕雷击。
这个我是真服了,手持小米 14pro 感觉还能再苟一年,换哪家好呢 🥺 要不考虑考虑 ov 系?
(PS:iPhone 有了,主力机还是安卓)
👍2
#优质博文 #AI #PromptEngineering
GPT-5-Codex Prompting Guide | OpenAI Cookbook
[以下是方便搜索索引的大纲(AI 生成),请读原文]
author OpenAI Cookbook Team
GPT-5-Codex Prompting Guide | OpenAI Cookbook
AI 摘要:本文介绍了 GPT-5-Codex 的特点与最佳提示实践,强调该模型在交互式与代理型编程任务中的独特优化。与通用 GPT-5 相比,其提示设计遵循“少即是多”,减少额外指令和冗余说明。文档详细说明了 CLI 环境下的开发者消息规范、工具权限设置、代码审查方法,以及避免过度提示的反向调优策略,帮助开发者更高效利用 GPT-5-Codex 进行真实世界的软件工程。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 模型介绍与定位
• GPT-5-Codex 并非 GPT-5 的直接替代品,而是为 agentic coding 与交互式任务优化。
• 在 Responses API 下支持使用,但不支持 verbosity 参数。
• 专注于真实软件工程场景:快速交互与长时段独立任务皆擅长。
2. 模型核心优势
• 改进的可控性(steerability):在功能开发、调试、测试、重构和代码评审中更高效。
• 自适应推理(adaptive reasoning):根据任务复杂度调整响应速度与深度。
• 出色的代码评审能力:能检查代码库并运行测试以验证正确性。
3. 提示词设计原则
• 遵循“less is more”策略:提示词应尽量简洁。
• 移除不必要的序言(preambles),避免模型提前中止输出。
• 工具使用应限制在 terminal tool 与 apply_patch,并保持描述简洁。
• Codex CLI 的开发者提示比 GPT-5 标准提示精简约 40%。
4. Codex CLI 使用规范
• Shell 调用规范:推荐使用 bash -lc,设置 workdir 参数,优先使用 rg。
• 编辑约束:默认 ASCII,谨慎处理非 ASCII 字符,避免回退用户未要求的改动。
• 规划工具使用:非简单任务才使用,避免生成单步骤计划。
• 沙箱(sandbox)与权限策略:详细定义了文件系统、网络与命令权限的审批机制。
5. 特殊请求处理
• 简单查询用 shell 命令直接解决(如 date)。
• 代码评审流程:先列出问题、风险与缺陷,再简要总结。
• 呈现结果时避免冗余输出,注重可读性与协作感。
6. 输出与风格规范
• 输出为纯文本,适当使用代码块、斜体、行内代码。
• 遵循简洁、协作的语气;优先逻辑清晰而非机械化格式。
• 文件路径引用需独立,遵循特定格式(src/app.ts:42)。
7. Anti-Prompting(避免额外提示的策略)
• 自适应推理已内置,无需额外提示“思考更深”或“快速回答”。
• 长任务规划能力已训练,不需额外计划引导。
• 不生成 preamble,只有必要时才总结。
• 前端默认采用现代最佳实践,可通过短指令指定框架与库(如 React + TypeScript + Tailwind CSS)。
author OpenAI Cookbook Team
Openai
GPT-5-Codex Prompting Guide | OpenAI Cookbook
Important details about GPT-5-Codex and this guide: This model is not a drop-in replacement for GPT-5, as it requires significantly diffe...
#优质博文 #安全 #npm #开源
Our plan for a more secure npm supply chain
[以下是方便搜索索引的大纲(AI 生成),请读原文]
Our plan for a more secure npm supply chain
AI 摘要:GitHub 针对 npm 供应链近年来遭受的攻击(如基于账户劫持和自我复制恶意软件的事件),提出一系列安全强化措施,包括推进 Trusted Publishing、强制 2FA、多层次 Token 管理以及渐进式改造工作流。这些举措旨在提高整个开源生态系统的韧性,重塑开发者与社区对 npm 的信任。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 开源软件与供应链风险
• 开源是现代软件的基石,但规模庞大的生态也带来攻击面扩大与安全风险。
• 最近持续发生基于账户劫持的攻击,导致恶意代码通过知名 npm 包传播。
2. Shai-Hulud 攻击事件回顾
• 2025 年 9 月发生的自我复制蠕虫攻击,利用维护者被攻破的账号传播。
• 注入恶意 post-install 脚本,可窃取多类敏感信息。
• GitHub 与社区紧急响应,移除 500+ 受影响包,并封锁 IoCs 传播链。
3. npm 安全加固路线图
• 引入更严格的身份验证与发布策略:
• 本地发布需强制 2FA。
• Granular Token(细粒度令牌)有效期缩至 7 天。
• 推行 Trusted Publishing(可信发布)。
• 废弃旧的 classic token 和 TOTP 式 2FA,推广 FIDO 2FA。
• 默认禁止基于 token 的发布,要求使用可信发布或强制 2FA。
• 扩展可信发布支持的生态与厂商。
4. Trusted Publishing 与行业协作
• Trusted Publishing 免去在构建流程中管理 API token,被 OpenSSF 推荐。
• 已在 PyPI、RubyGems、crates.io、npm、NuGet 等平台逐步普及。
• GitHub 强调应加快推广,避免攻击者利用过渡期漏洞。
5. npm 维护者可采取的行动
• 优先启用 npm Trusted Publishing,替代 token。
• 在账号、组织、包层面启用并强制 2FA。
• 使用 WebAuthn 替代 TOTP 以提升安全强度。
• 积极参与社区治理,共建韧性更强的供应链安全。
The GitHub Blog
Our plan for a more secure npm supply chain
GitHub is strengthening npm's security with stricter authentication, granular tokens, and enhanced trusted publishing.
#优质博文 #Chrome #DevTools #AI #MCP #前端 #CSS #浏览器
最近比较忙,这个发的有点晚了~不过大家应该都看到了~
Chrome DevTools (MCP) for your AI agent
[以下是方便搜索索引的大纲(AI 生成),请读原文]
author Mathias Bynens, Michael Hablich
最近比较忙,这个发的有点晚了~不过大家应该都看到了~
Chrome DevTools (MCP) for your AI agent
AI 摘要:本文介绍了 Chrome 新发布的 DevTools MCP 服务,它通过 Model Context Protocol (MCP) 将大型语言模型 (LLM) 与 Chrome DevTools 连接,使 AI 编程助手能够实时调试网页、诊断错误、模拟用户操作、分析性能问题等,从而提升生成代码的可用性和准确性。文章同时提供了使用场景示例、配置方法以及社区参与途径。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 背景与意义
• AI 编程助手生成代码时往往无法看到运行效果,相当于“蒙着眼睛编程”。
• Chrome DevTools MCP 服务解决了这一问题,直接让 AI 编程助手接入浏览器调试环境。
2. Model Context Protocol (MCP) 概述
• MCP 是一个开源标准,用于连接大型语言模型 (LLM) 与外部工具和数据源。
• Chrome DevTools MCP server 将调试与性能分析能力引入 AI agent。
• 示例工具:performance_start_trace,可自动启动 Chrome 并记录性能数据以供分析。
3. 应用场景与示例
• 实时验证代码修改:AI agent 可直接在浏览器中确认修改是否生效。
• 诊断网络与控制台错误:AI 可检查网络请求和日志,排查如 CORS 问题。
• 模拟用户行为:自动执行表单填写、点击测试,复现功能性 bug。
• 调试样式与布局问题:实时检查 DOM 和 CSS,解决复杂样式错误。
• 自动化性能审计:运行性能追踪,分析如 LCP (Largest Contentful Paint) 等指标。
4. 使用与配置方法
• 配置方式:在 MCP client 中添加 chrome-devtools 服务。
• 测试示例:运行 prompt "Please check the LCP of web.dev."。
• 更多工具参考:见 tool reference documentation。
5. 社区参与与后续发展
• 当前为公测版本,功能会逐步增加。
• 欢迎开发者与厂商反馈需求与问题。
• 参与方式:通过 GitHub issue 提交建议或 bug。
author Mathias Bynens, Michael Hablich
Chrome for Developers
Chrome DevTools (MCP) for your AI agent | Blog | Chrome for Developers
Public preview for the new Chrome DevTools MCP server, bringing the power of Chrome DevTools to AI coding assistants.
#优质博文 #编程语言 #AI #软件工程
有点子感慨呢,不过话说回来 JS 和 TS 是不是得看合起来的排行(x)
(这种榜单基本上图一乐,真用啥是无所谓的,语言都是相通的)
IEEE 发布了 2025 年顶级编程语言的榜单,Python 再次蝉联第一,JavaScript 和 TypeScript 分别位列第 6 和第 7。
The Top Programming Languages 2025
[以下是方便搜索索引的大纲(AI 生成),请读原文]
有点子感慨呢,不过话说回来 JS 和 TS 是不是得看合起来的排行(x)
(这种榜单基本上图一乐,真用啥是无所谓的,语言都是相通的)
IEEE 发布了 2025 年顶级编程语言的榜单,Python 再次蝉联第一,JavaScript 和 TypeScript 分别位列第 6 和第 7。
The Top Programming Languages 2025
AI 摘要:文章介绍了 2025 年最新的编程语言排行榜,并指出 Python 继续保持第一;与此同时,JavaScript 的影响力下降。作者进一步探讨了 AI(尤其是大型语言模型 LLM)的崛起如何改变了编程生态,使程序员更少依赖公共知识平台,导致传统衡量语言“流行度”的指标逐步失效。更深层次的趋势是:随着编程被 AI 辅助或部分取代,编程语言的差异性和重要性正在逐渐削弱,程序员未来的价值或将转向算法设计、系统架构与领域知识,而非语言本身。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 2025 年编程语言排行榜与现状
• Python 再次蝉联第一,且在 Jobs 排名中超越 SQL 位列首位
• JavaScript 从第三名跌至第六,或受 AI 辅助网站开发的影响
• SQL 技能依然是职场硬通货
2. 流行度测量的困境
• 排行使用多源指标:Google 搜索、Stack Exchange、GitHub 开源活跃度、论文提及等
• AI 助手 (Claude, ChatGPT, Cursor) 改变了程序员获取知识的方式
• Stack Exchange 提问量锐减至去年同期的 22%,公开数据信号衰弱
3. AI 对语言的重要性削弱
• AI 承担语法、结构甚至函数编写,弱化了语言细节的意义
• 未来选择语言可能等同于选择 CPU 指令集般无关紧要
• 新语言难以获取足够的训练数据支撑,不易突破 AI 劣势
4. 新语言诞生的障碍
• 过去依靠书籍、教程与社区 evangelism 推动采用
• LLM 需要海量样本,小众语言表现不佳
• AI 消融了过去促使新语言诞生的“语言痛点”
5. 编程语言的未来角色
• 高级语言本质是抽象与防止“自废武功”,历史源于结构化编程运动
• 硬件层仍然是“Go To”逻辑,AI 或直达中间表示 (intermediate representation)
• 未来可能不需要传统高级语言,转向 prompt → 中间语言 → 编译
6. 程序员角色与教育转变
• 程序员未来关注点转向算法选择、软件架构、系统接口
• 计算机科学教育因注重基本原理而更具价值,相对高于短期 bootcamp 培训
• 未来衡量流行度需探索全新指标
IEEE Spectrum
The Top Programming Languages 2025
Python reigns supreme again, but is AI changing the game for programming languages? Find out how coding is transforming.
#优质博文 #React #工程化 #前端
好东西啊。
NickvanDyke/eslint-plugin-react-you-might-not-need-an-effect
[以下是方便搜索索引的大纲(AI 生成),请读原文]
好东西啊。
NickvanDyke/eslint-plugin-react-you-might-not-need-an-effect
AI 摘要:这是一个 ESLint 插件,用来帮助开发者发现并避免在 React 项目中错误或不必要使用 useEffect 的场景。通过提供多条规则,它能让代码逻辑更清晰、性能更高、Bug 更少,尤其对初学者有帮助,同时对有经验的开发者也可能带来新的启发。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 插件介绍与背景
• 核心思想是减少不必要的 React useEffect 使用
• 改善代码可读性,提高性能,减少逻辑错误
• 推荐新手使用,同时对老手也有价值
2. 安装与配置
• 提供 npm 和 yarn 的安装方法
• 支持 .eslintrc 旧版配置与 eslint.config.js 新版配置
• 可与 eslint-plugin-react-hooks 一起使用以获得更精准的依赖分析
3. 核心规则(Rules)
• no-derived-state:禁止在 effect 中存储衍生 state
• no-chain-state-updates:禁止在 effect 中链式更新 state
• no-event-handler:禁止用 effect 来做事件处理逻辑
• no-adjust-state-on-prop-change:禁止在 prop 改变时用 effect 调整 state
• no-reset-all-state-on-prop-change:禁止在 prop 改变时通过 effect 重置所有 state
• no-pass-live-state-to-parent & no-pass-data-to-parent:禁止在 effect 中向父组件传递 state 或数据
• no-initialize-state:禁止在 effect 中初始化 state
• no-manage-parent:禁止纯依赖 props 的 effect
• no-empty-effect:禁止空的 effect 定义
• 默认推荐配置会启用全部规则作为 warning
4. 测试与实践
• 项目中包含 (in)valid 例子用于规则验证
• 强调插件并非覆盖所有情况,但尽量减少误报
5. 社区与反馈
• 鼓励开发者提出问题和改进建议
• 插件以减少 false positives(误报)为设计目标,即时存在偶发的漏报 (false negatives)
6. 学习资源
• React useEffect 官方文档
• You Might Not Need an Effect
• Synchronizing with Effects
• Separating Events from Effects
• Lifecycle of Reactive Effects
GitHub
GitHub - NickvanDyke/eslint-plugin-react-you-might-not-need-an-effect: Catch unnecessary React useEffect hooks to make your code…
Catch unnecessary React useEffect hooks to make your code simpler, faster, and safer. - NickvanDyke/eslint-plugin-react-you-might-not-need-an-effect
#优质博文 #JavaScript #ES2023 #前端 #新特性
虽然但是,传统是这么做的吗(?)
Stop using .reverse().find(): meet findLast() - Matt Smith
author Matt Smith
虽然但是,传统是这么做的吗(?)
Stop using .reverse().find(): meet findLast() - Matt Smith
AI 摘要:本文介绍了 JavaScript 新增的 findLast() 与 findLastIndex(),它们能高效地从数组末尾开始查找元素,解决传统 .slice().reverse().find() 的性能与可读性问题。文章展示了实际应用场景(如日志查找、消息列表、React 组件状态管理等),并详细说明了使用注意事项、最佳实践和浏览器支持情况。
author Matt Smith
Allthingssmitty
Stop using .reverse().find(): meet findLast() - Matt Smith
Learn how Array.prototype.findLast() and findLastIndex() let you search JavaScript arrays from the end—no .reverse() required. Cleaner, safer, and perfect for UI logic.
#优质博文 #React #JavaScript #前端 #course #SSR
当你用 useEffect + useState 写订阅逻辑时,其实可能应该用 useSyncExternalStore 来避免客户端渲染抖动 (jank)。
You may be looking for a useSyncExternalStore
[以下是方便搜索索引的大纲(AI 生成),请读原文]
author Swizec
当你用 useEffect + useState 写订阅逻辑时,其实可能应该用 useSyncExternalStore 来避免客户端渲染抖动 (jank)。
You may be looking for a useSyncExternalStore
AI 摘要:作者通过对常见的 React 状态订阅写法 (useEffect + useState) 进行剖析,指出该模式在服务端渲染 (SSR) 下可能引发抖动 (jank),并介绍了 useSyncExternalStore 的优势:它提供了更简洁的 API,支持订阅机制和服务端默认值,从而提升 SSR 渲染体验并减少 UI 闪烁。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 常见的 useEffect + useState 订阅模式
• 使用 useEffect 在组件挂载时订阅事件源 (event source)。
• 更新 useState 来触发组件重渲染,卸载时清理订阅。
• 常见于绑定 ResizeObserver、DOM 引用、外部事件等场景。
2. 该模式在服务端渲染 (SSR) 下的问题
• 初始渲染使用默认值,SSR 时无法订阅浏览器事件。
• 浏览器接管 (hydration) 后才启动订阅并更新状态。
• 导致界面多次渲染,出现 UI 闪烁、过渡不平滑的现象 (jank)。
3. 使用 useSyncExternalStore 的改进方案
• 提供显式的 subscribe 函数实现监听与取消订阅。
• 第二个参数为获取当前值的方法,确保 UI 与外部状态同步。
• 第三个参数允许定义服务端默认值,提升 SSR 初始化体验。
• 案例对比表明,useSyncExternalStore 渲染更平稳,减少 UI 抖动。
4. 开发实践与思考
• 在涉及外部状态订阅 (API、事件、可观察对象) 场景下,应优先考虑 useSyncExternalStore。
• 默认值的设计影响 SSR 渲染体验,可以通过合理设置来降低不适感。
• 对数据可视化、实时 UI 交互等高频场景尤其重要。
author Swizec
Swizec
You may be looking for a useSyncExternalStore | Swizec Teller
When you see a `useEffect` that updates a `useState` and returns a value, you might be looking for a `useSyncExternalStore`. This is my current vendetta.
👍1
#Newsletter #前端 #周刊更新
周刊第 9 期~ 呜呜呜呜忙死了忙死了。
快到国庆假期了捏,周刊停更一期!
于是愉快的又立个 Flag 争取在十一假期里把专门的周刊网站整出来~
FE Bits Vol.9|Chrome DevTools 推出 MCP,Nuxt UI Pro 开源免费
周刊第 9 期~ 呜呜呜呜忙死了忙死了。
快到国庆假期了捏,周刊停更一期!
于是愉快的又立个 Flag 争取在十一假期里把专门的周刊网站整出来~
FE Bits Vol.9|Chrome DevTools 推出 MCP,Nuxt UI Pro 开源免费
news.cosine.ren
FE Bits Vol.9|Chrome DevTools 推出 MCP,Nuxt UI Pro 开源免费 | FE Bits 前端周周谈
本期速览:Chrome 推出 DevTools MCP 赋能 AI,Nuxt UI v4/Pro 开源免费;Cloudflare 发布 Email Service 私测;npm 强化供应链安全;Webflow 赞助 Astro;Wasm 3.0 发布。精选图片优化、findLast、Subgrid/@st...站开工。
#优质博文 #CSS #前端 #Web标准 #浏览器兼容
蛮有意思的。
The Web’s Most Tolerated Feature - Bocoup
[以下是方便搜索索引的大纲(AI 生成),请读原文]
author Mike Pennisi
蛮有意思的。
The Web’s Most Tolerated Feature - Bocoup
AI 摘要:本文讲述了 CSS zoom 属性如何从 IE 5.5 的非标准功能开始,被开发者滥用、误解、依赖,进而导致兼容性困境。随着 CSS transform 出现,zoom 一度被各浏览器忽略或不一致实现。但由于其在布局层面的独特作用,开发者持续呼声使其最终被纳入 W3C 规范,并在 Interop 2025 得到统一支持。这段历程反映了 Web 标准在兼顾创新与兼容中如何形成共识。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 非标准的起点
• 2000 年 IE 5.5 引入 zoom,允许元素放大或缩小,但缺乏正式规范。
• 各浏览器厂商竞相差异化实现,造成碎片化问题,开发者不得不写兼容代码。
2. 替代与取舍
• Mozilla 坚持标准化,未支持 zoom,转而推动 CSS transform。
• Safari 同时实现 transform 与 zoom,导致实现差异与兼容问题。
• zoom 因缺乏标准,处于既流行又边缘的尴尬位置。
3. 使用误区与“伪流行”
• 后续研究发现 zoom 使用率虚高,原因多是用 zoom:1 修复 IE 的 layout bug。
• 通过 HTTP Archive 数据分析,排除 zoom:1 后,实际真实使用率下降约 94%。
• 意味着 zoom 的高排名不过是兼容遗留问题,而非开发者真正需求。
4. 开发者诉求与再度回归
• 部分高流量 Web 应用(如 Excel Web、Gmail 移动端)需要 zoom 的布局影响特性。
• 2023 年 CSS Working Group 提出重新定义 zoom,简化并规范化语义。
• 2025 年进入 Interop 计划,获得主要浏览器支持,终于成为标准化功能。
5. 经验与启示
• Web 的共识虽慢,但能孕育开放与长期可持续的方案。
• 避免依赖专有技术,因短期便利可能导致长期维护成本与兼容困境。
• Web 标准的推进常与社区反馈、开发者需求紧密相关。
author Mike Pennisi
Bocoup
A Worker-Owned Tech Consultancy - Bocoup
Web Platform Consulting Services