Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on null in /var/www/tgoop/function.php on line 65
2930 - Telegram Web
Telegram Web
Forwarded from 余弦&妲喵の养喵日常🐱 (Hyacine🦄)
cos 昨天语重心长跟我这个北方人科普台风有多可怕,拉着我把山竹历史战绩的视频刷了一遍,然后又打算囤点自热食品防停水停电。
(我内心os:馋了就直说
然后刚才拆完海底捞自热锅的包装,俩猫就把箱子占了
🥰2
#优质博文 #前端 #依赖管理 #React #工程化
当然是选择 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
👍2
#demo #codepen #CSS #动画
这个是真的酷!
Gallery Button:纯 CSS 相册预览动画,具备折叠展开的纸张效果
#优质博文 #CSS #前端 #动画 #新特性
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
#碎碎念
话说有没有人笑一笑这个,昨天点进小米的直播间,开幕雷击。
这个我是真服了,手持小米 14pro 感觉还能再苟一年,换哪家好呢 🥺 要不考虑考虑 ov 系?
(PS:iPhone 有了,主力机还是安卓)
👍2
#优质博文 #AI #PromptEngineering
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
#优质博文 #安全 #npm #开源

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 以提升安全强度。
• 积极参与社区治理,共建韧性更强的供应链安全。
#优质博文 #Chrome #DevTools #AI #MCP #前端 #CSS #浏览器
最近比较忙,这个发的有点晚了~不过大家应该都看到了~
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
#优质博文 #编程语言 #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 培训
• 未来衡量流行度需探索全新指标
#优质博文 #React #工程化 #前端
好东西啊。
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
#优质博文 #JavaScript #ES2023 #前端 #新特性
虽然但是,传统是这么做的吗(?)
Stop using .reverse().find(): meet findLast() - Matt Smith

AI 摘要:本文介绍了 JavaScript 新增的 findLast() 与 findLastIndex(),它们能高效地从数组末尾开始查找元素,解决传统 .slice().reverse().find() 的性能与可读性问题。文章展示了实际应用场景(如日志查找、消息列表、React 组件状态管理等),并详细说明了使用注意事项、最佳实践和浏览器支持情况。


author Matt Smith
#优质博文 #React #JavaScript #前端 #course #SSR
当你用 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
👍1
#优质博文 #CSS #前端 #Web标准 #浏览器兼容
蛮有意思的。
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
#优质博文 #React #CSS #前端 #动画 #course
是一篇不错的 Framer Motion 简明教程。
Animating Elements through framer motion with React.js

AI 摘要:本文详细展示了使用 Framer Motion 在 React 项目中实现动画的方式,对比了传统 CSS 实现与 Framer Motion 的简洁 declarative(声明式)方式,并通过 Fade-In、Hover、List Staggering、Drag-and-Drop、Sortable List 等实例演示其强大功能。文章强调了 Framer Motion 的生产级特性(如 gestures、physics、variants、Reorder 等),并给出了初学和进阶的使用方向。

[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 为什么选择 Framer Motion
• 提供生产级动画解决方案,语法简洁,学习成本低
• 完美兼容 React 与 TypeScript,支持 declarative 宣告式写法
• 强大特性:drag 拖拽、spring 物理动画、scroll 动效、shared layouts

2. 开发环境准备与安装
• 使用 Vite 初始化 React + TypeScript 项目
• 使用 npm install framer-motion 安装依赖
• 提供 Demo 链接 便于快速试验

3. 动画实例逐步讲解
基本 Fade-In:对比 CSS keyframes 与 motion.div(initial/animate/transition)
Hover 动画:对比 Tailwind hover/active 与 whileHover whileTap 的简洁写法
List Staggering:传统 nth-child + 延迟 VS variants + staggerChildren 的声明式方案
Drag-and-Drop:利用 drag、dragConstraints 等 props 快速实现拖拽,不需手写 DOM 监听
Sortable List:利用 Reorder.Group 与 Reorder.Item 实现可排序列表的流畅交互

4. 总结与进阶提示
• Framer Motion 让复杂动画开发更直观和简洁
• 初学者可从 motion.div、animate、transition 入门
• 进阶可使用 AnimatePresence、Reorder、useMotionValue 等更高级功能
• 动画开发核心思想:声明式描述交互,而非命令式逻辑


author Sukanta Biswas
#优质博文 #前端 #CSS #架构思考
We Keep Reinventing CSS, but Styling Was Never the Problem

AI 摘要:文章认为业界对 CSS 的频繁重塑,并非因为 CSS 本身不足,而是由于现代前端框架的组件化理念与 CSS 天性(全局、层叠、继承)的不匹配。各种工具和方法只是不同痛点的权衡解法,并不存在“银弹”。真正重要的是清楚认知权衡,选择能接受的复杂度和限制,而非不断寻求完美替代方案。


[以下是方便搜索索引的大纲(AI 生成),请读原文]

1. CSS 的设计初衷与现今差异
• CSS 最初为文档排版而生,适合全局样式、继承和层叠
• 现代前端应用已高度组件化和动态化,而 CSS 并非为此而设计
• 大量的“额外策略”试图弥补这种错位

2. 技术选项与权衡
BEM:命名可预测,但选择器冗长
CSS Modules:提供作用域隔离,但在运行时主题化方面有限
Utility-first CSS(如 Tailwind):迭代快速,但标记冗杂
CSS-in-JS:灵活且贴近逻辑,但带来运行时开销与复杂度
Cascade Layers 与 :where():更细粒度控制,但团队需要学习投入
• 每项工具仅解决部分问题,不能一劳永逸

3. 问题的真正根源
• 前端框架(React / Vue / Svelte 等)强调组件作用域
• CSS 的全局特性与组件化逻辑发生冲突
• 长期以来开发者试图让 CSS 充当模块系统,但它从未被设计成那样

4. 核心思考:面对取舍
• 选择 CSS Modules,意味着局限的运行时灵活性
• 选择 Utility-first CSS,则要接受模板冗长
• 选择 CSS-in-JS,要谨慎监控性能和打包体积
• 没有完美解法,只有根据上下文作选择

5. 结论:接受“不完美”
• CSS 的问题不存在彻底解法
• 放弃寻找银弹,接受权衡
• “足够好可以上线”的 CSS,才是最终目标


author Den Odell
#优质博文 #前端 #性能优化 #图片优化 #CSS #course
很好很详细的一篇文章。
Your Images Are (Probably) Oversized

AI 摘要:本文指出大多数开发者在前端实现中无意间给用户加载了远大于实际需求的图片,这浪费了带宽与计算资源。作者以 NextJS <Image> 组件为例,解释 sizes 属性在响应式图片 (responsive images) 中的重要性,并系统讲解了 srcset、sizes、图片加载策略 (lazy vs eager loading)、设备像素比 (DPR) 等概念,最终提供完整的 “Cheat Sheet” 实用总结,帮助开发者高效地为不同屏幕设备提供最佳尺寸的图片。


[以下是方便搜索索引的大纲(AI 生成),请读原文]

1. 现实检视 (Reality Check)
• 使用高分辨率原图在小屏幕设备上会导致带宽浪费
• 即使使用 NextJS <Image> ,若缺少 sizes 属性,仍会传输超大图

2. sizes 属性的核心作用
• 明确规定图片渲染尺寸,帮助浏览器选择最佳匹配
• 设置 sizes="100vw" 显著压缩文件大小(最高可减少 25 倍)

3. 响应式图片的基本概念
• 像素限制**:超过屏幕物理限制的像素冗余无意义
• 引入 srcset 与 sizes:提供多种分辨率图片并让浏览器选择最优版本

4. 在复杂布局中的使用
• 当图片宽度并非等于屏幕宽度时,必须结合 sizes 指定实际渲染逻辑
• 支持多断点 (media queries),可为不同 viewport 设置不同加载策略
• sizes="auto" 仅在懒加载 (lazy loading) 模式下生效,且浏览器兼容性有限

5. 图片加载策略
• loading="eager":默认立即加载,适合首屏关键图片 (FCP)
• loading="lazy":延迟加载,推荐用于非关键图片,高效节省资源

6. 设备像素比 (Device Pixel Ratio, DPR)
• 区分 **CSS pixel 与 device pixel
• 对应关系由 DPR 决定,例如 DPR=2 需要两倍分辨率图片
• srcset 支持 w 单位(推荐)和 x 单位(DPR 描述符),前者更适合响应式

7. 实用指南 (Cheat Sheet)
固定尺寸图片(如 icon):设置固定 sizes,srcset 使用 DPR 描述符即可
响应式图片
• 若为首屏内容:指定具体 sizes
• 若非首屏内容:加上 loading="lazy" 并优先用 sizes="auto, ...fallback"

8. 参考资料
MDN Responsive Images
HTML Living Standard
Use density descriptors (web.dev)


author Henrique Yuji Rossetti Inonhe
2025/10/23 21:13:35
Back to Top
HTML Embed Code: