呜啦!日常碎碎念,偶尔掉落优质前端博文推荐、学习资源等
网页:https://tg.cosine.ren
本频道的搜索Bot 来辣 👉 @cosSearchBot
私聊直接发消息就可以搜索啦~
🔖tags
#优质博文 #资源推荐 #博客更新 #碎碎念 #项目更新 #手工 #书摘 #阮一峰的科技周刊 #新动态
图频:Cosine 🎨 Gallery @CosineGallery
猫片: @cosine_cat
网页:https://tg.cosine.ren
本频道的搜索Bot 来辣 👉 @cosSearchBot
私聊直接发消息就可以搜索啦~
🔖tags
#优质博文 #资源推荐 #博客更新 #碎碎念 #项目更新 #手工 #书摘 #阮一峰的科技周刊 #新动态
图频:Cosine 🎨 Gallery @CosineGallery
猫片: @cosine_cat
#优质博文 #webgl #r3f #性能优化 #react
Three.js Instances: Rendering Multiple Objects Simultaneously
author Matias Gonzalez Fernandez
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
Backlog.md - 在 git 仓库中用 .md 生成并管理项目看板 | GitHub
AI 摘要: Backlog.md 是一款面向 git 用户的本地项目看板工具,通过将任务以 Markdown 文件形式存储在 git 仓库中,实现项目管理和代码管理的无缝结合。它支持命令行和网页两种操作模式,无需云端和账号,注重数据隐私和本地协作,适合对安全性和离线工作有需求的开发者或团队。同时,它集成了 AI 助手、跨平台支持等功能,开源且免费。
#优质博文 #chrome #webgl #性能优化 #浏览器 #新动态
Introducing Skia Graphite: Chrome's Rasterization Backend for the Future
author Claire Charron
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 #前端 #css #动画 #设计
经典键盘的实现!很酷
https://fixupx.com/jh3yy/status/1943132402315886934
不过这个没给demo链接,只是给了思路和展示。
代码什么的可以看看这个类似的。
Twitter | Github
经典键盘的实现!很酷
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
author Attio 团队 James Mulholland
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
#优质帖子 #前端 #Node #工程化 #可扩展性 #DDD #模块化 #Nest
Best Scalable File Structure for unopinionated Node frameworks?
Best Scalable File Structure for unopinionated Node frameworks?
AI 摘要:本文讨论了在无特定意见的 Node.js 框架(如 Express、Hono 等)中,如何设计一个可扩展且适合生产环境的文件结构。作者和评论者围绕领域驱动设计(DDD)、模块化单体架构(Modular Monolith)以及文件结构对代码库可维护性的影响展开了激烈讨论。部分人认为文件结构对团队协作和代码库扩展至关重要,而另一些人则认为其重要性被夸大,强调不应过于纠结于目录布局。
#优质博文 #云计算 #数据成本
让我们谢谢成本侠!(x
Data Egress: What is it and how much does it cost?
author anthonynsimon
让我们谢谢成本侠!(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
#Newsletter #前端 #node #tools
Node Weekly Issue #585
author Node Weekly Team
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
#碎碎念 #前端
https://fixupx.com/yuxiyou/status/1941079033049162012
草,等一下,难道说这个是早有预兆。
那确实是很心情复杂了。
https://fixupx.com/yuxiyou/status/1941079033049162012
草,等一下,难道说这个是早有预兆。
那确实是很心情复杂了。
尤雨溪 (@yuxiyou):人生第一笔一级市场投资退出,基本没赚钱,心情有点复杂
没亏钱我很满意,当时本来就没准备能拿回来。心情复杂的原因估计过段时间了解前端生态的人就明白了
#碎碎念 #前端 #新动态
吃完烤肉回来看到,虽然大家都知道了但是还是发一哈。
是的是的, vercel 收购了 NuxtLab 喵。(fixed)
https://fixupx.com/vercel/status/1942575687761813910
https://vercel.com/blog/nuxtlabs-joins-vercel
吃完烤肉回来看到,虽然大家都知道了但是还是发一哈。
是的是的, 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
author Bjango Team
讲究,太讲究了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
#Newsletter #前端 #动画 #css #tools #新特性
Smashing Newsletter #514: New CSS Techniques
author Cosima Mielke (cm), Vitaly Friedman (vf), and Iris Lješnjanin (il)
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)
#Newsletter #前端 #css #svg #新特性
Web Weekly #162
author Stefan Judis
Web Weekly #162
AI 摘要:本文内容涵盖了前端开发的最新动态、技术技巧和资源分享。文章重点介绍了 CSS 自定义高亮 API、表单控件样式的未来改进、ARIA 辅助技术的使用、TypeScript 的 satisfies 关键字、SVG 滤镜效果等多个技术话题。此外,还分享了有趣的项目、工具以及作者对代码注释和工作恐惧的思考,旨在为读者提供有价值的行业资讯和学习资源。
author Stefan Judis
#优质博文 #前端 #css #course #新特性
Better CSS Shapes Using shape() — Part 4: Close and Move
author Temani Afif
Better CSS Shapes Using shape() — Part 4: Close and Move
AI 摘要:本文是关于 CSS shape() 函数系列的第四篇文章,重点介绍了两个较少使用但非常实用的命令:close 和 move 。作者详细解释了 close 命令如何用于闭合形状,以及在特定情况下如何优化代码;同时,move 命令被用于在单一 shape() 定义中创建多个不连续的形状部分,极大地扩展了设计可能性。通过具体的代码示例和应用场景(如切出形状和重复形状),文章展示了如何利用这两个命令实现复杂的 CSS 形状设计。
author Temani Afif