呜啦!日常碎碎念,偶尔掉落优质前端博文推荐、学习资源等
网页: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
#前端 #JavaScript #存储 #TypeScript #tools
unadlib/localspace:现代化的
localForage 的使用者看了看感觉不错,mark 一下(
unadlib/localspace:现代化的
localForage 替代方案,提供简单的浏览器存储封装。localForage 的使用者看了看感觉不错,mark 一下(
AI 摘要:localspace 是一个旨在替代 localForage 的现代化存储工具包。它在完全兼容 localForage API 的基础上,利用现代 TypeScript 和异步架构重写,解决了原版在类型定义、IndexedDB 性能瓶颈、以及多平台(Node.js、React Native、Electron)一致性上的长期痛点。其核心亮点包括:支持将高频写入合并为单次事务的合并写入(Coalesced Writes)技术,可提升 3-10 倍性能;内置了强大的插件系统,提供 TTL(Time-to-Live)过期、透明加密、数据压缩、多标签页同步及配额管理(LRU 淘汰)等高级功能;同时保留了极简的 API,方便开发者从旧项目无缝迁移。
#优质博文 #CSS #SVG #前端 #动画 #course
How to animate SVG with CSS: Tutorial with examples
很详细的 svg 动画教程。
How to animate SVG with CSS: Tutorial with examples
很详细的 svg 动画教程。
AI 摘要:文章深入探讨了使用 CSS 动画化 SVG 的基础知识与进阶技巧。作者 Hope Armstrong 首先解释了 SVG 的优势及多种嵌入方式,指出内联(Inline)方式是实现 CSS 控制的最佳选择。随后展示了如何通过 transition 和 keyframes 属性操作 SVG 特有的属性(如 fill、stroke 等),并重点解析了路径绘制动画(Line drawing animation)的实现原理。最后,文章强调了在制作动画时需兼顾无障碍访问(Accessibility)以及选择合适工具的重要性。
#优质博文 #Node #后端 #工程化
Dynamic Configuration in Node.js: Beyond Environment Variables
Node.js 应用如何从传统的静态环境变量转向动态配置,以实现无需重新部署即可实时调整系统行为。
author Dmitry Tilyupo
Dynamic Configuration in Node.js: Beyond Environment Variables
Node.js 应用如何从传统的静态环境变量转向动态配置,以实现无需重新部署即可实时调整系统行为。
AI 摘要:文章深入分析了在 Node.js 中使用静态环境变量的局限性,特别是在需要快速响应生产环境变化(如调整频率限制、切换特性开关等)时。作者对比了实现动态配置的三种主流技术方案:轮询 (Polling)、Webhooks 和服务器发送事件 (SSE / Server-Sent Events),并强调了将“代码部署”与“配置更改”解耦的重要性。通过使用动态配置工具,开发者可以实现更快的事故响应、更安全的灰度发布以及更清晰的权责分离。
author Dmitry Tilyupo
#优质博文 #前端 #CSS #JavaScript #视图转换
探讨在视图过渡 (View Transitions) 过程中如何保持视频和音频的播放状态,并区分了同页面与跨页面两种场景下的实现差异。
Astro 的持久化过渡效果很好用的。
View Transitions & Playing Video
[以下是方便搜索索引的大纲 (AI 生成),请读原文]
author Chris Coyier
探讨在视图过渡 (View Transitions) 过程中如何保持视频和音频的播放状态,并区分了同页面与跨页面两种场景下的实现差异。
Astro 的持久化过渡效果很好用的。
View Transitions & Playing Video
AI 摘要:本文主要研究了在 Web 视图过渡 (View Transitions) 期间保持视频/音频播放的技术细节。作者指出,单页面视图过渡 (Same-Page View Transitions) 能够原生支持 (Just Works™) 状态保持,类似于 .moveBefore() 的效果;而多页面视图过渡 (Multi-Page View Transitions) 由于页面卸载则无法直接维持状态。不过,通过利用 pageswap 和 pagereveal 事件配合 sessionStorage 存储视频进度,可以“伪造”出一种近乎无缝的过渡体验。文章还提到了 Astro 框架在此方面的实现以及未来浏览器原生支持跨页面状态保存的可能性。
[以下是方便搜索索引的大纲 (AI 生成),请读原文]
1. 同页面视图过渡 (Same-Page View Transitions)
• 在单页面环境下,使用 document.startViewTransition 操作 DOM 时,浏览器会自动保留 <video>、<audio> 甚至 <iframe> 的播放状态。
• 这种机制与新兴的 moveBefore() 方法类似,能够确保视频在元素变换位置或样式时持续播放而不中断。
2. 多页面视图过渡 (Multi-Page View Transitions) 的挑战
• 在传统的多页面架构 (MPA) 中,当页面卸载并加载新页面时,所有状态都会丢失,即便新旧页面包含相同的视频元素也无法自动衔接。
• 讨论了 Astro 等框架的实现原理,它们通常通过将页面导航转化为类似单页面应用 (SPA) 的体验来避开这一限制。
• 引用了 Chrome 团队关于跨页面状态保存的讨论,指出这不仅是视图过渡的需求,更是更通用的页面导航状态持久化方案。
3. 手动实现跨页面的“状态伪造”方案
• 使用 CSS 的 @view-transition { navigation: auto; } 启用多页面过渡。
• 为新旧页面的视频元素指定相同的 view-transition-name。
• 利用 JavaScript 监听 pageswap (页面离开前) 和 pagereveal (新页面显示时) 事件,通过 sessionStorage 存取视频的当前播放时间 (currentTime)。
• 虽然在切换瞬间会有轻微的音频/视频停顿 (Blip),但视觉和逻辑上能达到较好的衔接效果。
4. 扩展应用与工具
• 该技术同样适用于 YouTube 等第三方 <iframe> 嵌入视频,只需结合相应的 Iframe 播放器 API (Iframe Player API) 提取和还原数据。
• 推荐参考 Chrome 官方演示和作者提供的 CodePen 示例进行深度学习。
author Chris Coyier
#优质博文 #前端 #WCAG #HTML
介绍在使用原生
There is No Need to Trap Focus on a Dialog Element
[以下是方便搜索索引的大纲 (AI 生成),请读原文]
author Zell Liew
介绍在使用原生
<dialog> 元素时,为什么开发者不再需要手动实现复杂的焦点陷阱(Focus Trap)逻辑。There is No Need to Trap Focus on a Dialog Element
AI 摘要:文章探讨了在使用原生 HTML 的 <dialog> 元素时,关于焦点陷阱(Focus Trap)观念的转变。传统的无障碍(Accessibility)建议认为模态框必须将焦点限制在其内部,但作者通过研究发现,原生 <dialog> 的 showModal() 方法允许用户通过 Tab 键切换到浏览器地址栏等界面,这并非缺陷而是被 W3C 认可的有意设计。这种设计为用户提供了更好的逃逸机制和操作灵活性,因此在使用现代原生 API 时,手动编写焦点陷阱代码已成为过时的做法。
[以下是方便搜索索引的大纲 (AI 生成),请读原文]
1. 核心发现与观念转变
• 作者在测试原生 <dialog> 的 showModal 方法时,发现焦点可以从对话框移动到浏览器地址栏,这挑战了传统的焦点陷阱(Focus Trap)原则。
• 经过深入研究 GitHub 相关讨论,确认如果使用原生 <dialog> 元素,手动实现焦点陷阱已被视为过时的建议。
2. 历史背景与规范误区
• Scott O’Hara 指出 WCAG 规范并未强制要求焦点必须锁定在对话框内。
• 传统的焦点陷阱建议主要针对早期的自定义脚本对话框,当时 inert 属性和原生 <dialog> 尚未得到广泛支持。
• ARIA 创作实践指南(APG)中的旧做法是为了在没有原生特性的情况下模拟行为,其复杂性远高于现在的原生实现。
3. 专家观点与无障碍优势
• 无障碍专家 Léonie Watson 认为,用户在对话框上下文中应拥有与普通页面相同的权利,即能够通过 Tab 键离开当前内容进入浏览器功能区(如地址栏、菜单等)。
• W3C 的 APA(Accessible Platform Architectures)工作组达成共识,维持原生 <dialog> 现有的行为。
• 允许焦点移出对话框有助于用户在不关闭模态框的情况下,打开新标签页查询信息或更改浏览器设置,提供了一种自然的“逃逸机制(Escape Mechanism)”。
4. 开发者结论
• 只要正确使用原生 Dialog API 的 showModal 方法,开发者无需再为焦点管理(Focus Management)感到焦虑,这极大简化了现代 Web 组件的开发难度。
author Zell Liew
#tools #前端 #组件库 #react
一个能够根据 React 组件实际 DOM 结构自动生成像素级精确骨架屏(Shimmer Skeleton)的工具库,原理是运行时自动分析组件 DOM。
darula-hpp/shimmer-from-structure
[以下是方便搜索索引的大纲 (AI 生成),请读原文]
author darula-hpp
一个能够根据 React 组件实际 DOM 结构自动生成像素级精确骨架屏(Shimmer Skeleton)的工具库,原理是运行时自动分析组件 DOM。
darula-hpp/shimmer-from-structure
AI 摘要:该项目解决了前端开发中需要手动维护两套代码(业务组件与骨架屏组件)的痛点。通过在运行时(Runtime)分析真实组件的 DOM 结构,shimmer-from-structure 能够自动测量元素尺寸、获取 CSS 圆角属性,并生成与之完美契合的扫光动画效果。它支持动态数据注入、全局配置(Context API)、以及与 React Suspense 的无缝集成,极大地降低了 UI 加载态的维护成本。
[以下是方便搜索索引的大纲 (AI 生成),请读原文]
1. 核心价值与功能特性
• 自动适配结构:无需预定义骨架屏,运行时自动分析组件 DOM。
• 零维护成本:组件布局改变时,骨架屏自动更新,无需手动同步。
• 像素级精确:通过测量实际元素尺寸生成占位块。
• 样式自动提取:自动检测 CSS 中的 border-radius(圆角),确保头像等圆形元素正确显示。
• 感知优化:加载时保留容器背景色和边框,仅对文本和图片内容进行遮盖。
2. 使用模式与 API
• 静态内容包裹:简单的组件直接使用 <Shimmer loading={true}> 包裹即可。
• 动态数据支持:通过 templateProps 属性注入模拟数据,使组件在无真实数据时也能撑开正确的布局结构。
• Suspense 集成:可直接作为 Suspense 的 fallback,利用 React 的生命周期自动处理挂载与卸载。
• 全局配置:提供 ShimmerProvider,允许在应用顶层统一配置扫光颜色、背景色及动画时长等
3. 技术实现原理
• DOM 测量:利用 useLayoutEffect 同步测量所有叶子元素的 getBoundingClientRect()。
• 属性捕获:通过原生 API 获取计算后的 CSS 样式,确保骨架块与原元素形状一致。
• 动画注入:基于测量数据创建绝对定位的扫光层,并应用线性渐变动画。
• 透明处理:加载状态下将真实内容的 color 设为 transparent,从而隐藏文字但保留容器布局。
4. 最佳实践与局限性
• 细粒度控制:建议为不同的业务模块分别包裹 Shimmer,以实现独立的加载状态。
• 性能建议:尽量保持 templateProps 简单,避免在测量阶段进行复杂逻辑运算。
• 已知限制:无法深入捕获 SVG 内部的路径形状;对于异步渲染(如某些 Canvas 图表)需要显式指定容器高度。
author darula-hpp
#优质博文 #数据库 #系统架构 #后端 #运维
探讨了传统“软删除”模式(如 archived_at 列)带来的长期复杂性,并对比分析了触发器、应用层事件和 WAL 等更优的替代方案。
对于新项目,作者优先推荐基于触发器的方案,因为它部署简单、不引入额外基建,且有效隔离了活跃数据与归档数据。
The challenges of soft delete
[以下是方便搜索索引的大纲 (AI 生成),请读原文]
author Atlas9
探讨了传统“软删除”模式(如 archived_at 列)带来的长期复杂性,并对比分析了触发器、应用层事件和 WAL 等更优的替代方案。
对于新项目,作者优先推荐基于触发器的方案,因为它部署简单、不引入额外基建,且有效隔离了活跃数据与归档数据。
The challenges of soft delete
AI 摘要:本文深入分析了在数据库中直接使用 archived_at 字段实现软删除(Soft Delete)的弊端,指出这种做法会导致数据膨胀、索引效率下降、查询逻辑复杂化以及数据迁移困难等问题。作者对比了三种替代方案:应用层异步归档、数据库触发器(Triggers)记录 JSON 快照以及基于 WAL 的变更数据捕获(CDC)。作者认为,对于大多数新项目,使用触发器将删除的数据转移至独立的归档表是平衡简洁性与实用性的最佳选择。
[以下是方便搜索索引的大纲 (AI 生成),请读原文]
1. 传统软删除模式的弊端
• 数据膨胀与性能损耗:99% 的已删除数据永不被读取,却占用了昂贵的存储,导致数据库备份与恢复耗时剧增。
• 查询与索引复杂化:应用代码必须在每个查询中过滤已删除记录,索引也需要额外关注这些“死数据”,增加了误读风险。
• 数据迁移(Migration)难题:旧的归档数据可能不符合新的 Schema 约束或校验规则,导致数据库迁移变得棘手。
• 恢复逻辑不一致:恢复记录往往不只是修改一个状态位,还可能涉及外部系统调用,重复编写创建逻辑容易滋生 Bug。
2. 替代方案一:应用层归档 (Application Level Archiving)
• 机制与优势:在删除记录时发送事件(Event)到消息队列(如 SQS),由另一个服务将其序列化为 JSON 并存储至 S3 等对象存储中。
• 优点:主库结构保持纯净,处理异步化提高性能。
• 缺点:增加了基础设施复杂度,且 S3 中的归档数据难以直接通过 SQL 查询进行检索
3. 替代方案二:数据库触发器 (Triggers)
• 实现方式:利用 PostgreSQL 触发器在执行 DELETE 前,将行数据转换为 JSONB 格式并插入一个通用的 archive 归档表。
• 级联删除处理:通过会话变量(Session Variable)追踪根源,记录级联删除(Cascade Delete)是由哪个父表操作引起的。
• 优势:兼具性能与灵活性,主表无冗余数据,归档表易于清理(例如清理 90 天前的数据)且仍然支持 SQL 查询。
4. 替代方案三:基于 WAL 的变更数据捕获 (CDC)
• 技术栈:利用 Debezium、Kafka 或 pgstream 等工具读取 PostgreSQL 的预写日志(WAL),过滤删除事件并流转至外部存储。
• 优势:对主库性能几乎零影响,无需修改业务逻辑或添加触发器。
• 运维挑战:需要维护复杂的 Kafka 集群;需警惕 WAL 积压(Lag)导致主库磁盘写满,需合理配置 max_slot_wal_keep_size。
author Atlas9
#优质博文 #AI #前端 #开源
agentation:一款为 AI Agents 设计的视觉反馈工具,通过点击并添加标注,随后生成包含元素路径、CSS 选择器(Selectors)、位置等详细上下文的 Markdown 文本。
文档:https://agentation.dev/
Tweet:Introducing Agentation: a visual feedback tool for agents
agentation:一款为 AI Agents 设计的视觉反馈工具,通过点击并添加标注,随后生成包含元素路径、CSS 选择器(Selectors)、位置等详细上下文的 Markdown 文本。
文档:https://agentation.dev/
Tweet:Introducing Agentation: a visual feedback tool for agents
AI 摘要:Benji Taylor 发布的 Agentation 是一款创新的开源视觉反馈工具,旨在解决开发者向 AI 描述 UI 问题时的沟通障碍。通过 npm i agentation 即可集成,它允许用户直接在网页上点击元素并添加标注,随后生成包含元素路径、CSS 选择器(Selectors)、位置等详细上下文的 Markdown 文本。
#Newsletter #前端 #周刊更新
周刊第 24 期,这周也在肝项目,所以周刊短短的x
FE Bits Vol.24 | Rolldown 1.0 RC、Anime.js v4.3 自动布局与 Chrome 145 100vw 滚动条感知
周刊第 24 期,这周也在肝项目,所以周刊短短的x
FE Bits Vol.24 | Rolldown 1.0 RC、Anime.js v4.3 自动布局与 Chrome 145 100vw 滚动条感知