呜啦!日常碎碎念,偶尔掉落优质前端博文推荐、学习资源等
网页:https://tg.cosine.ren
本频道的搜索Bot 来辣 👉 @cosSearchBot
私聊直接发消息就可以搜索啦~
🔖tags
#优质博文 #资源推荐 #博客更新 #碎碎念 #项目更新 #手工 #书摘 #阮一峰的科技周刊 #新动态

图频:Cosine 🎨 Gallery @CosineGallery
猫片: @cosine_cat
#优质博文 #webgl #r3f #性能优化 #react
Three.js Instances: Rendering Multiple Objects Simultaneously

AI 摘要:本文详细介绍了在 Three.js 中使用实例化(Instancing)技术来优化性能,同时渲染多个对象。通过实例化,可以将多个共享相同几何形状和材质的对象合并为一个绘制调用(Draw Call),显著减少 CPU 到 GPU 的通信开销,从而提升渲染效率。文章结合 React Three Fiber 和 drei 库,提供了从基础实例化到复杂场景(如森林渲染)的完整教程,涵盖了自定义着色器、实例属性调整以及多种实例集的实现方法。

1. 引言:介绍了实例化的基本概念及其性能优势。实例化允许在一次绘制调用中渲染多个共享几何形状和材质的对象,例如渲染森林中的树木、岩石和草地时,可以大幅减少绘制调用次数,提升性能。
2. 基础实例化:以渲染一千个盒子为例,展示了传统方法与使用 drei/instances 的实例化方法的对比。传统方法需要一千次绘制调用,而实例化方法仅需一次,显著优化了性能。
3. 多组实例化:讨论了如何使用 drei 的 createInstances() 函数创建多个实例集,例如同时渲染盒子和球体(一千个盒子与一千个球体),最终仅需两次绘制调用。
4. 自定义着色器的实例化:讲解了如何为实例化对象创建自定义着色器材料,包括顶点动画(如 blob 效果)。通过 instanceMatrix 属性解决位置重叠问题,确保每个实例有独立的变换。
5. 调整实例属性:介绍了如何通过 InstancedAttribute 为每个实例设置自定义属性,例如为 blob 动画添加时间偏移(timeShift),实现独立动画效果。
6. 创建森林场景:以渲染一千棵树为例,展示了如何加载 3D 模型并应用实例化技术,最终仅用三次绘制调用完成整个森林场景(包括天空盒和地面)。还通过随机位置、高度和旋转增加场景多样性。
7. 进一步阅读:提及了未深入探讨但值得关注的主题,如批量网格(Batched Meshes)、骨骼动画(Skeletons)以及变形(Morphing)与批量网格的结合。


author Matias Gonzalez Fernandez
#工具推荐 #Git #任务管理 #开源 #tools
Backlog.md - 在 git 仓库中用 .md 生成并管理项目看板 | GitHub
AI 摘要: Backlog.md 是一款面向 git 用户的本地项目看板工具,通过将任务以 Markdown 文件形式存储在 git 仓库中,实现项目管理和代码管理的无缝结合。它支持命令行和网页两种操作模式,无需云端和账号,注重数据隐私和本地协作,适合对安全性和离线工作有需求的开发者或团队。同时,它集成了 AI 助手、跨平台支持等功能,开源且免费。
Backlog.md - 在 git 仓库中用 .md 生成并管理项目看板 - 小众软件
#优质博文 #chrome #webgl #性能优化 #浏览器 #新动态
Introducing Skia Graphite: Chrome's Rasterization Backend for the Future

AI 摘要:本文详细介绍了 Chrome 在 Apple Silicon Macs 上推出的 Skia 新光栅化后端 Graphite。Graphite 是一个面向未来的图形渲染技术,显著提升了 Chrome 在 Motionmark 1.3 测试中的表现,同时为未来的图形改进奠定了基础。通过支持现代图形 API(如 Metal、Vulkan 和 D3D12)、多线程设计以及深度测试等创新技术,Graphite 不仅提高了渲染性能,还优化了用户体验,减少了滚动卡顿和页面加载等待时间。

1. Skia 在 Chrome 中的历史
• 介绍了 Skia 作为 Chrome 图形渲染核心的历史,从最初的性能问题到引入 GPU 加速后端 Ganesh。
• Ganesh 虽性能优异,但因其以 OpenGL 为中心的设计,难以充分利用现代图形 API 的优势,因此团队开发了 Graphite。

2. Graphite 的成果
• 在 Macbook Pro M3 上,Motionmark 1.3 得分提升近 15%。
• 优化了真实世界指标,如交互到下一帧时间(INP)、最大内容绘制时间(LCP)、图形流畅度(掉帧百分比)以及 GPU 内存使用等。

3. Graphite 与 Ganesh 的区别
现代图形 API:Graphite 利用 Chrome 的 WebGPU 实现 Dawn,支持 Metal、Vulkan 等现代 API,减少维护负担并提升多线程和 GPU 计算能力。
2D 深度测试:通过深度测试减少过度绘制(overdraw),优化不透明和半透明对象的渲染顺序,提升性能并降低移动设备功耗。
多线程设计:Graphite 的 API 支持多线程,利用独立记录器(Recorders)在多线程上生成记录(Recordings),减轻主线程负担,减少卡顿和延迟。
性能悬崖与管线编译:Graphite 减少渲染管线数量,避免因管线编译导致的卡顿,确保复杂内容与简单内容渲染效率一致。

4. 未来计划
多线程光栅化:计划将光栅化任务分配到多线程,进一步提升性能。
减少简单内容的 GPU 内存:通过重新发布记录(Recordings)优化滚动,减少不必要的 GPU 内存分配。
GPU 计算路径光栅化:探索 GPU 计算路径光栅化技术,提升视觉质量和性能,替代传统的 MSAA 和 CPU 光栅化。


author Claire Charron
#demo #前端 #webgl #r3f
Animations with React-Three-Fiber
Demo | GitHub
Bring static visuals to life with rotating textures, 3D geometry, and smooth motion powered by React Three Fiber.
使用旋转纹理、3D 几何图形和由 React Three Fiber 驱动的平滑运动,将静态视觉效果赋予生命力。
Media is too big
VIEW IN TELEGRAM
#demo #前端 #css #动画 #设计
经典键盘的实现!很酷

jhey ʕ•ᴥ•ʔ (@jh3yy):keypad w/ CSS + <img> layers 🧑‍🍳
.key { mask: url(keycap.png); }
.key:active img { translate: 0 20%; }
use keycap images as a mask for the container that they translate in
bonus: clip-path to clip the hit area + filter to style the keys 🤙


https://fixupx.com/jh3yy/status/1943132402315886934

不过这个没给demo链接,只是给了思路和展示。
代码什么的可以看看这个类似的。
Twitter | Github
#碎碎念 #美食
每次回家吃到妈咪做的石锅鸡蛋就是最幸福的!!太好吃了!!太下饭了
#优质博文 #前端 #JavaScript #编码问题 #字符串处理
JavaScript string slice() considered harmful | Attio

AI 摘要:本文探讨了 JavaScript 中 string.slice() 方法在处理 Unicode 字符串时可能导致的问题,特别是在处理包含表情符号等复杂字符时会意外截断代码单元,导致数据传输和解码错误。通过一个实际案例(Attio 的 CSV 导入工具与 Google Spanner 数据库交互时出现的 gRPC 错误),作者深入分析了 JavaScript 字符串的 UTF-16 编码机制、代码点和代码单元的区别,以及如何使用更安全的方法(如基于代码点的迭代)来避免这类问题,最终提供了解决方案并修复了错误。

1. 引言:CSV 导入工具的背景与问题
• 讲述了 Attio 的 CSV 导入工具每月处理大量数据,数据来源多样且不可预测,容易遇到边缘情况。
• 发现了一个 gRPC 错误,涉及 Google Spanner 数据库,错误提示请求协议无效。

2. 问题复现与初步分析
• 通过日志查询和客户提供的 CSV 文件复现了问题。
• 在调试过程中,注意到一个字符串截断函数 truncateSortableValue ,使用 slice() 方法截断字符串。
• 发现当 slice() 截断到表情符号(如 🇬🇧)中间时,得到的是不完整的代码单元,导致后续错误。

3. 深入理解 JavaScript 字符串与 UTF-16 编码
• 介绍了 JavaScript 字符串基于 Unicode 和 UTF-16 编码,解释了代码点(code point)和代码单元(code unit)的概念。
• 指出 UTF-16 使用 16 位代码单元存储字符,常见字符占一个单元,复杂字符如表情符号可能占两个单元。
• 讨论了字形簇(grapheme cluster),如表情符号由多个代码点组合而成,截断时需特别注意。
• 强调 string.slice() 是基于代码单元操作,而非代码点,可能导致截断不完整字符,影响数据编码(如传输到数据库时的 UTF-8 编码问题)。

4. 问题根源:编码与解码失败
• 分析了将不完整代码单元编码为 UTF-8(如使用 Buffer.from 或 protobufjs)时,解码端无法正确还原字符串,导致错误。
• 虽然无法直接调试 Google Spanner 的闭源代码,但通过示例证明了这种编码失败是问题的根本原因。

5. 解决方案:基于代码点的安全截断
• 提出了使用 [Symbol.iterator]() 或扩展运算符来基于代码点而非代码单元进行字符串操作。
• 提供了一个新函数 safeHead(),安全地获取字符串前 n 个代码点,避免中途截断代码单元。
• 修改了原截断函数 truncateSortableValue,使用新方法解决问题,最终通过拉取请求修复了导入工具的错误。


author Attio 团队 James Mulholland
JavaScript string slice() considered harmful | Attio
#碎碎念 #前端 #AI
今天终于加入 Claude Code 让他帮忙重构屎山项目,一个虽然小但是状态逻辑复杂、有俩状态系统还跟 localStorage 耦合要迁移的小应用,这块简直如有神助,太好用了,理解这个话了

不过好在 ai 基本上都能帮我 vibe 掉我不喜欢写的业务逻辑,且能写的很健壮,而我自己写 UI 则能写的很快乐,整体来说还是非常提效的。


评价是,好评!20 刀的月费 pro 目前看太值了!等再用用在说新的感想。

https://fixupx.com/arvin17x/status/1942855734028558379

压榨 AI 也太爽了,cursor 没有这种感觉
#优质帖子 #前端 #Node #工程化 #可扩展性 #DDD #模块化 #Nest
Best Scalable File Structure for unopinionated Node frameworks?

AI 摘要:本文讨论了在无特定意见的 Node.js 框架(如 Express、Hono 等)中,如何设计一个可扩展且适合生产环境的文件结构。作者和评论者围绕领域驱动设计(DDD)、模块化单体架构(Modular Monolith)以及文件结构对代码库可维护性的影响展开了激烈讨论。部分人认为文件结构对团队协作和代码库扩展至关重要,而另一些人则认为其重要性被夸大,强调不应过于纠结于目录布局。
From the node community on Reddit: Best Scalable File Structure for unopinionated Node frameworks?
#优质博文 #云计算 #数据成本
让我们谢谢成本侠!(x
Data Egress: What is it and how much does it cost?

AI 摘要:本文详细探讨了云计算中常常被忽视的一项成本——数据出口(Data Egress),即从云服务提供商的网络向公共互联网传输数据所产生的费用。文章列举了多家主流云服务提供商的免费额度和超出免费额度后每 1 TB 数据的出口费用,价格从免费到数百美元不等,旨在帮助用户了解并对比不同提供商的成本差异,强调了根据实际需求选择云服务的重要性。

1. 云服务提供商数据出口费用对比(AI 总结的,需在文中验证)
免费且无限制的提供商:包括 UpCloud、Runpod、Civo、Contabo、DataCrunch、Green AI Cloud、Hostinger、Hyperstack、Lambda Labs、OVHcloud、Paperspace、The Cloud Minders 和 Wasabi,用户使用这些服务无需担心数据出口成本。
部分免费的提供商:Cloudflare 和 Scaleway 提供大部分服务的免费出口流量,但具体取决于服务类型。
有免费额度但超额收费的提供商
• Hetzner(1-60 TB 免费额度,超额 1 TB 收费 $1.17)
• Linode(1-20 TB 免费额度,超额 1 TB 收费 $5.00)
• Oracle Cloud(10 TB 免费额度,超额 1 TB 收费 $8.50)
• Backblaze、Bunny CDN、DigitalOcean、Entrywan、Vultr(免费额度不同,超额 1 TB 收费 $10.00)
• Nebius(100 GB 免费额度,超额 1 TB 收费 $15.00)
• Cloudways、Database Mart、Exoscale、Fly.io、Koyeb(免费额度不同,超额 1 TB 收费 $20.00)
• Railway(无免费额度,1 TB 收费 $50.00)
• Alibaba Cloud(10 GB 免费额度,1 TB 收费 $74.00)
• Microsoft Azure(100 GB 免费额度,1 TB 收费 $87.00)
• AWS(100 GB 免费额度,1 TB 收费 $90.00)
• Supabase(5-250 GB 免费额度,1 TB 收费 $90.00)
• Sevalla、Zeabur(100 GB 或 10-100 GB 免费额度,1 TB 收费 $100.00)
• Google Cloud(视服务而定,1 TB 收费 $120.00)
• Vercel(100 GB-1 TB 免费额度,1 TB 收费 $150.00)
• Render(100 GB-1 TB 免费额度,1 TB 收费 $300.00)
• Netlify(100 GB-1 TB 免费额度,1 TB 收费 $550.00)
价格说明:价格可能因地区和其他因素而异,文章以北弗吉尼亚(美国)或法兰克福(德国)地区为基准,并基于若干假设进行估算,建议用户查阅提供商的最新定价页面。

2. 理解云数据传出:介绍了数据传出作为云计算中常被忽视的成本,开发者在使用云服务时需关注此费用,因为大量数据传输可能导致费用快速增加。
3. 什么是数据传出:为数据离开云服务提供商网络到公共互联网的过程,可能包括用户下载数据或数据在不同云提供商之间的传输,通常按 GB 或 TB 计费。
4. 数据传出与传入的对比(Data Egress vs Ingress): 区分了数据传入(通常免费)和数据传出(通常收费)的概念,以文件上传和下载为例说明了两者的实际应用场景。
5. 为何云服务商对数据传出收费? - 解释了云服务商因基础设施和带宽成本而对数据传出收费的原因,同时指出收费也可能用于限制网络饱和或频繁的大量数据转移行为。
5. 降低数据传出成本的策略 - 提供了多种降低成本的方法,包括利用免费额度、使用内容分发网络(CDN)缓存静态资源、数据压缩、监控使用量、以及利用私有网络传输数据。


author anthonynsimon Data Egress: What is it and how much does it cost?
#Newsletter #前端 #node #tools
Node Weekly Issue #585

AI 摘要: 本期 Node Weekly(#585,2025年7月8日)涵盖了 Node.js 生态系统的最新工具、教程和资讯,重点介绍了处理无效 JSON 数据的工具 jsonrepair、修复 Node 中 emoji 切片问题的技术、以及多个实用工具和框架如 Bruno 和 grammY。此外,还包括 Node.js 官方 API 文档设计改进的进展、AI 驱动的颜色搜索引擎开发教程,以及 JavaScript 生态系统中的其他动态,如 Deno 2.4 发布和 Rust 在 JS 工具链中的应用趋势。

1. 核心内容与工具
jsonrepair: 介绍了一个修复无效 JSON 文档的工具,适用于处理 LLM 或不合规软件输出的异常 JSON,可通过 Node、CLI 或在线版本使用。
Codepoint–Safe Truncation: 针对 Node 中 CSV 导入因 emoji 导致的错误,James Mulholland 展示了如何通过代码点感知的 spread 方法解决切片问题。
Bruno: 一个基于 Node 和 Electron 的开源 HTTP API 测试 IDE,作为 Postman 的轻量级替代品,支持复杂和简单的请求测试。
Poolifier 5.0: 实现 worker_threads 和 cluster 的工作池,支持可中止任务。
grammY: 一个最新的 Telegram 机器人框架,简化机器人开发,支持最新的 Telegram Bot API。 【这个好用的喵】
0x 6.0: 一款单命令生成 Node 进程交互式火焰图的性能分析工具。
• 其他工具更新:包括 Babel 7.28.0(支持原生 TS 配置和 ES2026 资源管理)、Inquirer.js 12.7(命令行交互 UI)、Secretlint 10.2(防止凭据泄露)、Faker 9.9(生成伪造数据)等。

2. 教程与资源
What’s the Difference Between Ordinary Functions and Arrow Functions?: James Sinclair 探讨普通函数与箭头函数的区别。
Am I Online?: Anton Zhiyanov 介绍一种通过检查特定 Google URL 判断应用是否在线的方法。

3. Node.js 社区动态:
• API 文档改进:Node.js 团队正在通过 api-docs-tooling 工具重塑 API 文档的设计和构建流程,并分享了初步进展。
数据出口成本比较:对比了 Vercel、AWS 等约 40 个流行云服务的数据出口费用。
Node 应用文件结构讨论:Reddit 的 /r/node 社区就 Node 应用文件结构展开了有趣讨论。

4. JavaScript 生态系统其他资讯:
Rust 在 JS 工具中的应用:Oliver Stenbom 讨论 JavaScript 工具链逐渐被 Rust 重写的趋势。 【锈化!】


author Node Weekly Team GitHub - josdejong/jsonrepair: Repair invalid JSON documents
#碎碎念 #前端 #新动态
吃完烤肉回来看到,虽然大家都知道了但是还是发一哈。
是的是的, vercel 收购了 NuxtLab 喵。(fixed)

https://fixupx.com/vercel/status/1942575687761813910

NuxtLabs, creators of Nuxt and Nitro, are joining Vercel.

Same license, roadmap, and open governance, but now in a joint mission to build the best web.


https://vercel.com/blog/nuxtlabs-joins-vercel
#优质博文 #前端 #设计还原 #css #设计 #兼容性
讲究,太讲究了www
Matching drop shadows across CSS, Android, iOS, Figma, and Sketch

AI 摘要:本文详细探讨了在 CSS、Android、iOS、Figma 和 Sketch 等多个平台和设计工具中实现一致的阴影效果(drop shadow)的问题。作者通过对比不同平台的阴影渲染差异,指出模糊半径(blur radius)的处理方式是导致不一致的主要原因,并提供了具体的缩放因子(scale factors)来调整模糊半径,以实现跨平台的视觉一致性。文章还深入分析了各平台的渲染机制和技术细节,为设计师和开发者提供了实用的转换公式和指导。

1. 引言与问题背景
• 介绍了跨平台阴影效果不一致的问题,通过图片对比展示了 CSS、Android 和 iOS 渲染相同阴影参数时的差异(例如 Y 偏移 24px,模糊半径 24px 的阴影在各平台呈现不同)。
• 指出 Android 使用 setShadowLayer 而非 Material elevation,CSS 和 Android 阴影虽接近但仍有细微差异(Android 更模糊)。

2. 浏览器间的阴影一致性
• 讨论了 CSS 阴影在不同浏览器(Safari、Firefox、Chrome)中的表现,发现 box-shadow 在这些浏览器中渲染效果基本一致,截图以 Safari 为主。

3. 设计工具与 CSS 的对比
• 指出 CSS、Sketch 和 Figma 的阴影效果一致,但背景模糊(background blur)不在本文讨论范围内,仅聚焦于阴影效果。

4. 模糊半径的差异分析
• 阴影的参数中,位置偏移和颜色在各平台表现一致,唯独模糊半径的处理方式不同。
• 作者通过重新排列模糊测试结果,发现模糊半径存在 1×、2× 和 3× 的缩放模式,阴影主要集中在 1× 和 2× 范围内。

5. 缩放因子与技术细节
• 解释了 CSS 规范中模糊半径的标准差为模糊半径的一半,而 iOS 的模糊半径是 CSS 的两倍,因此 CSS 到 iOS 的缩放因子为 0.5×。
• Android 使用 Skia 渲染,模糊半径缩放涉及 1 / sqrt(3) 的因子,与 CSS 不完全一致(部分原因是早期 Safari 的影响)。
• 提供了详细的缩放因子表格,用于在 CSS、Sketch、Figma、Android 和 iOS 之间转换模糊半径,例如 CSS 到 Android 为 0.866×,iOS 到 CSS 为 2.0×。
• 通过调整后的对比图和色调分离(posterising)结果,展示了缩放后的阴影效果非常接近,尽管由于渲染方法和代码差异无法完全一致。

6. 应用与结论
• 研究目的是为 Pinwheel 工具导出 Android 和 iOS 阴影代码时提供正确的缩放因子,确保跨平台一致性。
• 总结了实现近似一致阴影的可行性,并感谢 Kit Grose 在审稿中提供的 Skia 代码注释支持。


author Bjango Team Matching drop shadows across CSS, Android, iOS, Figma, and Sketch
#Newsletter #前端 #动画 #css #tools #新特性
Smashing Newsletter #514: New CSS Techniques

AI 摘要: 本期 Smashing Newsletter #514 聚焦于 CSS 的最新技术和工具,介绍了多项创新功能和实用资源,包括 CSS 中的 if() 函数、锚点定位 API、缓动函数工具、阴影匹配技巧以及 CSS 渐变效果等。

1. CSS 新特性(Chrome 137):
• 介绍了 if() 函数,支持基于自定义属性值和样式查询编写逻辑样式,增强了 CSS 的逻辑控制能力。
• reading-flow 属性通过声明预期的焦点顺序提升键盘和屏幕阅读器的可访问性,解决视觉顺序与 DOM 源顺序不匹配的问题。

2. CSS 径向渐变创建 CSS 爆炸背景效果
• Chris Coyier 展示了如何仅用 CSS 创建爆发背景效果,利用 conic-gradient() 和硬性停止点的特性,结合径向渐变实现文本空间和视觉层次。

3. CSS 缓动函数工具(Easing Wizard)
• Matthias Martin 开发的 Easing Wizard 工具帮助开发者可视化和测试 CSS 缓动函数,支持多种类型(如 Bézier、弹簧、反弹等),并提供预设和代码导出功能。

4. 跨平台阴影匹配
• Marc Edwards 提供了一份阴影转换比例表,帮助开发者在 CSS、Android、iOS、Figma 和 Sketch 等平台间实现一致的阴影效果,尽管渲染差异无法完全消除,但可接近匹配。

5. CSS 锚点定位 API 工具
• Una Kravets 开发的 Anchor Position Tool 简化了锚点定位 API 的使用,通过可视化界面展示元素相对锚点的定位效果,并生成可直接使用的 CSS 代码。

6. HTML 输入图标样式修复
• Cassidy Williams 分享了一个解决暗模式下日期/时间输入图标不可见的技巧,利用 ::-webkit-calendar-picker-indicator 伪元素调整图标样式,支持滤镜、不透明度和自定义图像。


author Cosima Mielke (cm), Vitaly Friedman (vf), and Iris Lješnjanin (il) CSS Bursts with Conic Gradients
#Newsletter #前端 #css #svg #新特性
Web Weekly #162
AI 摘要:本文内容涵盖了前端开发的最新动态、技术技巧和资源分享。文章重点介绍了 CSS 自定义高亮 API、表单控件样式的未来改进、ARIA 辅助技术的使用、TypeScript 的 satisfies 关键字、SVG 滤镜效果等多个技术话题。此外,还分享了有趣的项目、工具以及作者对代码注释和工作恐惧的思考,旨在为读者提供有价值的行业资讯和学习资源。


author Stefan Judis Web Weekly #162
#优质博文 #前端 #css #course #新特性
Better CSS Shapes Using shape() — Part 4: Close and Move

AI 摘要:本文是关于 CSS shape() 函数系列的第四篇文章,重点介绍了两个较少使用但非常实用的命令:close 和 move 。作者详细解释了 close 命令如何用于闭合形状,以及在特定情况下如何优化代码;同时,move 命令被用于在单一 shape() 定义中创建多个不连续的形状部分,极大地扩展了设计可能性。通过具体的代码示例和应用场景(如切出形状和重复形状),文章展示了如何利用这两个命令实现复杂的 CSS 形状设计。


author Temani Afif Better CSS Shapes Using shape() — Part 4: Close and Move | CSS-Tricks
Back to Top