第2期:AI重塑前端开发格局

深度解析AI如何彻底改变前端开发生态,探讨RSC、新兴框架范式、浏览器原生能力演进等15个前沿技术话题,为开发者提供应对技术变革的实战指南和趋势洞察

对于所有的文章,我都会进行深度总结,可以先打开总结,如果看了总结之后,觉得有价值,再去看原文,因为原文可能会有很多细节,而总结会帮你过滤掉很多细节,只保留最重要的信息。

AI重塑前端开发格局

卷首语

不管你承认或者不承认,但是从去年开始,AI 已经重塑了编码界的格局,AI 影响最深的还是前端开发,因为很多 AI 工具是基于 vscode 的,而 vscode 是前端开发最常用的工具,所以前端开发往往不用在几个工具之间来回切换。

今年开始,也出现了很多所谓的“一人公司”,用AI辅助自己来完成之前需要一个团队才能完成的工作。

对于 AI 我是持积极态度的,我觉得暂时并不会取代相关的岗位,反而你掌握了 AI 还可以获得更多的机会。

所以作为一个开发者,不光要关注技术,还要关注 AI,因为 AI 已经成为了技术发展的重要驱动力。

本周头条

1、Cursor 更改 Pro 订阅计费方案,从500次快速请求改为无限量,但会动态限速,如果不喜欢这个方案,也可以在设置中(Dashboard > Settings > Advanced)点击退出新的计费方案。

2、Gemini 2.5 Pro、Flash正式版,2.5 Flash-Lite预览版推出,Gemini由于它在 AI Studio 上面可以免费使用而得到了极高的使用量和关注度。

image

3、Google正在将Gemini模型扩展为“world model”,目标是让AI具备理解、模拟现实世界的能力。这种模型不仅能处理文本、图像等多模态输入,还能像人脑一样推理、规划和想象新体验。例如,Gemini 2.5 Pro能够通过世界知识和推理,模拟自然环境,辅助机器人完成抓取、指令执行等任务。

4、Android 16 聚焦通知、辅助、桌面多窗与安全四大升级 会在2025年6月率先登陆Pixel设备,通知系统、辅助功能、安全性、多设备协同能力全面提升。

image

5、Dia浏览器开放测试,现在以前注册过 Arc 的用户都可以直接获得 Dia 浏览器的测试资格,并且还可以邀请新用户,Dia 浏览器拥有很多 AI 玩法,感兴趣的可以试试。

6、现在AI 也可以生成 ASMR 了,而且还十分火爆,一条切水果视频播放量破1650万。AI 的用途已经逐渐往各个领域渗透。

image

7、时隔1年多,anime.js 发布了 4.0 版本

8、苹果第一部用 iPhone 拍摄的电影上映,但实际上并不是用你我手中的 iPhone 拍摄的,而是一台经过改造的 iPhone——只保留了芯片组、摄像头等手机核心零部件,并运行 iOS 系统。

image

深度阅读

1、😮😮😮 我写出了被 Threejs 官推转发的项目🚀✨?!(中文)

image

本篇文章对于想要独立开发游戏的小伙伴来说,是一个非常不错的参考,作者通过自己的实践,总结了一套完整的开发流程,包括技术基础、资源获取、场景搭建、角色控制、碰撞检测、水体特效等关键环节,通过低成本,就可以获取一个完整的游戏所需要的所有资源。

深度总结

本篇内容系统梳理了如何利用 Three.js、Shader(GLSL)、AI生成资源、以及现代前端工具链,构建一个具有高度定制化的3D个人简历网站。文章不仅涵盖了技术实现细节,还对资源获取、场景搭建、角色控制、碰撞检测和水体特效等关键环节进行了深入剖析。

技术基础与前置条件

实现高质量3D场景,需具备 Three.js 基础,包括 Scene、Camera、Renderer、Geometry、Material、Mesh 等核心概念。Shader 编程(GLSL)同样不可或缺,需理解顶点着色器与片元着色器的作用及其在 Three.js 中的自定义实现方式。

2D与3D资源的获取与处理

3D资源

AI 3D生成技术已能满足小型Demo的需求。通过如 Blender 资源库结合文生图、图生图模型,可快速生成 lowpoly 风格模型。以 gpt-4o 等模型生成统一风格的2.5D lowpoly视图,再导入 AI 3D generation 平台(如混元3D V2.5)生成目标模型。此流程确保场景风格统一,避免模型风格杂乱。

2D资源

GPT-4o 在统一风格UI生成方面表现突出。通过明确的风格描述和提示词,可批量生成像素化UI图标。生成后,利用 Remove.bg 等工具去除背景,或用 Aspose PNG Splitter 拆分雪碧图,适用于数据可视化、游戏界面等场景。

场景搭建与建模辅助

场景搭建需掌握 Blender 基础操作。blender-mcp 工具通过 API 支持 Poly Haven 资产和 hyper3D,能批量放置、调整物体,并规范命名。其 generate_hyper3d_model_via_images/text 功能可直接通过图片或文本生成模型,适合快速搭建参考场景。

相机与后处理

为实现2.5D视觉效果,采用正交相机替代透视相机。通过 RenderPixelatedPass 实现像素化后处理,营造复古游戏机画面。OutputPass 用于提升曝光度和色调映射,进一步优化视觉效果。

角色控制与碰撞检测

四方向移动

为还原经典RPG的四方向移动体验,需对键盘输入进行物理键位映射,确保不同键盘布局(如AZERTY、QWERTY)下控制一致。移动逻辑采用离散方向切换,结合动画状态管理,实现流畅的角色行走与待机切换。

Octree碰撞检测

Octree 适用于稀疏三维空间的碰撞检测。建议为碰撞检测单独构建简化的 Object3D 网格体,降低性能消耗。角色使用胶囊体作为碰撞体,通过 Octree 的 capsuleIntersect 方法检测与场景的碰撞,利用法线和深度信息修正角色位置,防止穿模。

水体特效实现

蜂窝噪声水面

水面纹理采用蜂窝噪声(Cellular Noise)生成。通过 Signed Distance Field (SDF) 计算点到特征点的最小距离,形成水面基础纹理。灰度值作为混合因子,融合不同颜色,模拟水体深浅变化。

边缘浮沫

边缘浮沫通过 shader 中的 getEdgeGlow 函数实现。该函数基于像素到边缘的距离,利用 smoothstep 生成柔和的过渡效果,模拟水体边缘的白色浮沫。

Flowmap流动效果

Flowmap 通过编码2D向量场信息到纹理的 RG 通道,实现水体流动。片元着色器根据 flowmap 偏移 UV 坐标,动态采样纹理,模拟水流方向和速度。可用 cables.gl 或 FlowMap Painter 快速生成 flowmap 纹理。

技术趋势与社区

AI技术降低了3D开发门槛,3D generation 技术正在解决数字资产构建成本问题。前端开发者需关注交互方式和视觉效果的创新。推荐关注 Tresjs、TvTjs 等基于 Vue 的 Three.js 框架,参与社区交流,共同推动 Web3D 技术发展。

2、Rust vs Go(英文)

image

这篇文章从各个角度深度对比了 Rust 和 Go 的优缺点,以及它们在不同场景下的适用性。

Rust 近几年在前端圈获得了广泛的关注,因为它可以用来写编译器,它运行的速度极快,现在前端圈几乎知名的编译器都在用 Rust 来重写。比如 Tailwind、Turbopack 等。而最近微软发布了 TypeScript-Go 却选择了 Go 来实现,这引起了很大的争议,微软给出的回复是:他们使用 Rust 写了部分代码,速度确实比 Go 快,但使用 Rust 来重写工程量巨大,而使用 Go 语言比较好迁移。

深度总结

Rust 概述

Rust 由 Graydon Hoare 于 2006 年发起,2009 年由 Mozilla Research 赞助。Rust 的核心理念是实现无需垃圾回收的内存安全,并支持无数据竞争的并发。其“所有权”和“借用”机制在编译期强制执行,避免了空指针、悬垂指针和缓冲区溢出等常见系统级漏洞。Rust 追求零成本抽象和类型推断,既保证高性能,也提升开发效率。

典型应用场景

  • 系统编程:适用于操作系统、嵌入式系统等对硬件和资源控制要求极高的场景。Rust 的内存安全和并发能力提升了系统级软件的可靠性。
  • IoT:在资源受限且安全要求高的物联网设备中,Rust 的高效内存管理和健壮性尤为突出。
  • WebAssembly:Rust 可编译为 WebAssembly,适合对性能有极高要求的 Web 应用。
  • 区块链开发:Rust 的安全性和并发特性满足区块链对高可靠性和高效执行的需求。
  • 云基础设施:AWS、Azure、GCP 等云服务商采用 Rust 构建高性能、安全的云服务。
  • 网络编程:Rust 在高性能网络工具和系统开发中表现优异,适合低延迟、高吞吐的场景。
  • CLI 工具:Rust 编译生成高效二进制文件,适合开发跨平台命令行工具。

Go 概述

Go(Golang)由 Google 的 Robert Griesemer、Rob Pike 和 Ken Thompson 设计,2009 年发布。Go 旨在解决大型分布式系统开发中的构建速度慢、依赖管理复杂等问题。它结合了动态语言的易用性和静态语言的性能,强调简洁、高效和可读性。

典型应用场景

  • 云基础设施:Go 被广泛用于云服务和基础设施开发,Google、Dropbox、Docker 等公司大量采用。
  • Web 服务器与 API 服务:Go 的标准库和并发模型适合高并发 Web 服务和后端开发。
  • 网络编程:Go 的并发和网络库适合开发高性能网络工具,如数据库代理、消息队列等。
  • DevOps 工具:Kubernetes、Terraform 等主流 DevOps 工具均由 Go 编写,便于部署和维护。
  • CLI 工具:Go 可跨平台编译单一二进制文件,便于分发和使用。

性能对比

Rust

Rust 通过手动内存管理和无垃圾回收机制,实现了接近硬件的高性能。其零成本抽象让高层代码不牺牲运行效率。适合对延迟和吞吐有极高要求的系统级开发。例如,Mozilla 的 Servo 浏览器引擎和 Veloren 游戏引擎均利用 Rust 的并发和内存安全特性提升性能。

权衡:Rust 的学习曲线较陡,编译器要求严格,开发初期效率可能低于 Go。

Go

Go 采用高效的垃圾回收机制,适合需要管理大量并发任务的 Web 和云环境。Go 的 goroutine 和 channel 简化了并发编程,适合快速开发和部署。例如,Docker 依赖 Go 的并发模型高效管理微服务。

权衡:Go 在极端性能和底层控制方面不及 Rust,但开发效率和易用性更高。

易用性

Rust

Rust 的所有权和借用机制对新手不友好,编译器极为严格。开发者需理解 borrow checker 的工作原理,才能顺利编译和运行代码。掌握后,能极大减少运行时错误和安全漏洞。工具如 RustRover IDE 提供代码补全和调试支持,降低学习门槛。

Go

Go 设计极简,语法和关键字数量少,易于上手。缺乏复杂的语言特性(如泛型,直到近年才引入),降低了学习难度。GoLand IDE 等工具提升了开发体验,支持并发模式和集成测试。

并发与多线程

Rust

Rust 通过所有权模型在编译期保证线程安全,防止数据竞争。适合对安全性和性能要求极高的并发场景。例如,Cloudflare 利用 Rust 构建高性能、低延迟的网络基础设施。Servo 浏览器引擎和 ripgrep 搜索工具也充分发挥了 Rust 的并发优势。

局限:严格的所有权规则增加了并发架构设计的复杂度。

Go

Go 的 goroutine 是轻量级线程,由运行时调度。开发者可轻松创建成千上万个并发任务。适合高并发 Web 服务和云应用,如 Kubernetes 和 Docker。

局限:goroutine 虽易用,但在大规模并发下需谨慎管理同步和共享状态,否则易出现竞态和死锁。

生态与社区

Rust

Rust 生态虽年轻,但发展迅速。Cargo 包管理器和 crates.io 提供了丰富的库和工具。社区活跃,重视安全和性能。文档完善,定期举办 RustConf 等活动。部分领域库支持尚不如 Go 完善,可能需自行开发解决方案。

Go

Go 的标准库功能全面,涵盖 HTTP、加密、数据处理等常见需求。工具链完善,集成测试和基准测试便捷。Google 等大厂支持,行业应用广泛。社区资源丰富,适合大规模生产环境。部分高级需求可能需依赖第三方库或自定义实现。

结论

Rust 适合对安全、性能和底层控制有极高要求的项目,如系统软件、区块链、嵌入式开发。Go 更适合追求开发效率、易维护和高并发的云服务、Web 后端和 DevOps 工具。选择应结合项目需求、团队能力和开发周期,权衡各自优势与局限。

3、Cloudflare 服务中断事件回顾(英文)

image

这篇文章记录了 Cloudflare 在 2025 年 6 月 12 日发生的一次严重服务中断事件,并回顾了事件的过程和后续措施。

我个人的域名就是托管到 Cloudflare 的,同时 Cloudflare 提供了非常多的免费服务,今年我将 cclliang.com 这个域名从 NameSilo 迁移到了 Cloudflare,因为在 Cloudflare 购买和续费域名是按成本价,而我以前也是使用的 Cloudflare 的CDN,所以迁移到 Cloudflare 管理起来更加方便。

深度总结

2025年6月12日,Cloudflare 发生了一次严重的服务中断,持续2小时28分钟,影响了包括 Workers KV、WARP、Access、Gateway、Images、Stream、Workers AI、Turnstile、AutoRAG、Zaraz 及部分 Dashboard 在内的多个核心服务。此次事件的根本原因是 Workers KV 所依赖的底层存储基础设施出现故障,而该基础设施部分由第三方云服务商提供。虽然直接诱因来自第三方,但 Cloudflare 承认对架构选择和依赖管理负有最终责任。

影响范围

Workers KV 是 Cloudflare 多项服务的关键依赖。它负责存储配置、认证信息和静态资源。此次故障导致:

  • Workers KV:约90%请求失败,只有缓存命中的请求能正常返回。数据未丢失。
  • Access:所有基于身份的登录失败,SCIM 服务无法同步用户信息。服务认证类登录未受影响。
  • Gateway:大部分 DNS 查询未受影响,但基于身份的 DoH 查询和部分代理、TLS 解密功能不可用。
  • WARP:新客户端无法注册,现有用户部分受影响,紧急断开功能失效。
  • Dashboard:用户登录和大部分会话不可用,API 未受影响。
  • Turnstile/Challenges:验证 API 大量失败,激活了应急开关以避免用户被阻断,但存在令牌多次兑换的风险。
  • Images/Stream:批量上传和视频播放高错误率,部分图片交付受影响。
  • Workers AI/AutoRAG:所有推理请求失败,AutoRAG 因依赖 AI 服务而不可用。
  • Durable Objects/D1:依赖同一存储基础设施,错误率显著上升。
  • CDN:部分地区(如圣保罗、费城、亚特兰大、罗利)流量重定向不完全,出现延迟和错误。
  • Zaraz、Queues、Event Notifications:请求全部失败或不可用。

技术背景

Workers KV 设计为“coreless”服务,理论上应无单点故障。但实际架构中,KV 依赖一个中心化的数据存储作为数据源。此次事件暴露了中心存储的单点风险。Cloudflare 正在将 Workers KV 迁移到更高可用性的自有基础设施(如 Cloudflare R2),以消除对单一第三方的依赖。

事件过程

  • 17:52 UTC,WARP 团队发现新设备注册失败,启动调查。
  • 18:06,多个服务合并为同一事件,确认 Workers KV 不可用为根因。
  • 18:21,事件优先级提升至最高(P0)。
  • 18:43 起,团队尝试将关键服务迁移到其他数据存储。
  • 20:23,第三方存储恢复,服务逐步恢复正常。
  • 20:28,所有受影响服务恢复,监控持续进行。

后续措施

Cloudflare 正加速以下改进:

  • 提高 Workers KV 存储基础设施的冗余性,消除单点依赖。
  • 针对各产品实施短期“blast radius”缓解措施,提升单一故障下的服务可用性。
  • 开发工具以便在存储故障时分阶段恢复关键命名空间,避免缓存重建时对基础设施造成压力。

Cloudflare 强调,未来将持续优化架构设计,减少对外部依赖,提升整体服务的韧性和可恢复能力。

4、Juris 对象优先的 Web 开发:一种新的响应式用户界面范式(英文)

image

Juris 框架以“对象优先”与分支感知依赖追踪为核心,彻底解决了传统 Web 框架的性能瓶颈和渐进增强难题。它仅编译实际渲染组件,实现极致性能和可扩展性,支持无风险渐进升级现有系统。对象式架构让响应式更可控,逻辑与 UI 解耦,适配多端。Juris 已在企业级场景中验证了其高效、低风险、易迁移的优势,成为现代 Web 应用演进的关键桥梁。

深度总结

Juris 框架提出了一种全新的“Object-First”Web 开发范式,核心在于通过深度调用栈动态依赖分支感知追踪(Deep Call Stack Dynamic Dependency Branch-Aware Tracking),实现了组件级的精确依赖管理。与主流前端框架如 React、Vue 不同,Juris 只编译和渲染实际执行路径上的组件,避免了传统框架中所有组件预编译带来的性能浪费。例如,在一个包含多个条件分支的页面中,只有被实际渲染的分支才会被编译和追踪,未被触发的分支不会消耗任何资源。

Juris 的“Temporal Independence by Default”机制,消除了因状态变化导致的级联重渲染问题。每个组件只会在其直接依赖的数据发生变化时独立更新,类似于在一个大型仪表盘中,用户信息的变动不会影响到订单列表的渲染。这种机制让性能表现更加可预测,减少了不必要的 UI 更新。

在渐进增强方面,Juris 能直接增强现有 HTML,无需重写架构。例如,开发者可以用一行代码为页面上的按钮添加响应式行为,而不影响原有功能。这种能力使得遗留系统的现代化变得低风险且高效,支持团队分阶段、分模块地推进升级。

Juris 的状态管理采用基于业务域的路径式组织,开发者可以通过类似“user.profile.name”这样的路径精确管理和订阅状态。只有订阅了特定路径的组件会响应相关变化,避免了全局状态变动带来的性能瓶颈。中间件机制允许在状态变更时插入日志、校验等逻辑,提升了可维护性和安全性。

在组件设计上,Juris 推崇“Headless Component”模式,将业务逻辑与 UI 表现彻底分离。比如,一个 Todo 管理逻辑可以被移动端和桌面端不同的 UI 组件复用,极大提升了代码复用率和灵活性。Juris 还支持多种渲染模式,包括兼容性优先的细粒度模式和高性能的批量模式,能够根据实际场景自动切换。

性能方面,Juris 在复杂企业级应用中的初始加载和运行时更新速度显著优于 React、Vue 等主流框架,内存占用也更低。实际案例显示,Juris 能在不影响现有功能的前提下,将传统 jQuery 或 Backbone 应用平滑升级为现代响应式应用,极大降低了迁移风险和成本。

Juris 的架构天然适配 AI 代码生成和多端渲染,开发者只需用纯 JavaScript 对象描述 UI 结构,无需 JSX 或模板语言。未来,Juris 计划支持桌面、移动、游戏、VR/AR 等多平台渲染,推动“写一次,处处运行”的通用应用开发模式。

整体来看,Juris 通过对象优先、路径编译、渐进增强和无头组件等创新,解决了现代 Web 开发中的性能、可维护性和演进难题,为企业和开发者提供了兼顾效率与灵活性的全新选择。

5、如何做 LLM 和 AI 搜索的 SEO(英文)

image

现在越来越多的人通过 AI 来搜索内容,这篇文章介绍了 Vercel 对于 AI 搜索的适应。给出了一些 SEO 的建议。

深度总结

搜索环境的变化

AI驱动的搜索界面(如ChatGPT、Google AI Overviews)正在重塑内容的曝光方式。用户越来越多地在搜索结果页直接获得答案,点击链接的行为显著减少。以Vercel为例,ChatGPT带来的新注册用户比例持续上升,AI搜索已成为重要的流量来源。与此同时,Google的AI Overview功能可能导致点击率下降超过30%。内容的可见性不再仅仅依赖于传统排名,还取决于能否被AI模型优先引用。

传统SEO与LLM SEO的对比

传统SEO强调关键词、外链和SERP排名。LLM SEO则关注内容的结构化、语义深度和可被模型检索的能力。两者的核心交集在于:内容需具备清晰的层级结构、可被爬取和索引、并保持持续更新。关键词堆砌和表面优化已难以奏效,模型更倾向于选择解释清晰、结构合理、信息丰富的内容。

传统SEOLLM SEO / AI SEO共同点
BacklinksEmbedding-based relevanceCrawlable, indexable pages
Volume-based keywordsNatural-language queriesClear heading hierarchy
SERP排名RAG可见性内容新鲜、定期更新
Anchor text优化概念清晰与归属Schema markup
Meta描述可提取的独立片段内部链接
Link equity社区提及静态HTML/CSS页面
CTR优化语义深度与原创性高意图、决策阶段内容

LLM如何处理内容

主流LLM采用RAG(Retrieval-Augmented Generation)机制,实时检索外部信息。内容需具备良好的可爬取性和结构化,便于模型理解和引用。模型通过高维embedding理解词语和概念间的关系,能够在没有精确关键词匹配的情况下推理出相关内容。此时,内容的清晰度、深度和原创性比关键词密度更为重要。

LLM SEO的核心实践

1. 抢占前沿概念

LLM倾向于引用首个或最清晰的概念解释。应关注低竞争、高潜力的话题,成为该领域的权威来源。例如,监控社区、论坛、GitHub等,发现尚未被充分覆盖的用户需求,并结合自身产品优势输出独特见解。

2. 发布权威、可验证的内容

内容需深入且难以被复制。可通过原创数据、代码示例、专家引述等方式增强权威性。结构上应包含表格、列表、术语解释等,便于模型提取。用词需精准统一,避免同义词混用导致embedding弱化。

3. 结构化内容以利机器解析

采用清晰的标题层级(H1-H3)、Schema.org或JSON-LD标记、语义化HTML元素(如definition lists、tables)等方式,提升内容的可解析性。确保页面可被Bing、Google等主流搜索引擎索引。内容需保持新鲜,避免因过时而被模型忽略。

4. 培养真实引用

社区提及和外部引用有助于模型将品牌与特定概念关联。应积极参与社区讨论、开源项目、产品演示等,鼓励他人引用。避免购买外链,注重自然、真实的社区信号。

5. 定期内容维护

AI模型会定期重新抓取网页。需定期修复404、更新lastmod、清理sitemap,保持内容准确和相关。建议每30、90、180天复查内容,及时扩展有效信息,归档过时页面。

AI影响的追踪方法

目前尚无统一工具可直接监控内容在AI系统中的可见性,但可通过以下信号间接评估:

  • 检查Perplexity、Google AI Overviews、ChatGPT等平台的引用情况
  • 利用分析工具追踪来自AI平台的流量
  • 监控社区、社交媒体、博客等的品牌提及
  • 通过Google Search Console、Bing Webmaster Tools等监控索引覆盖率和排名

LLM SEO要求内容创作者兼顾人类和机器的需求。结构、速度和可索引性依然是基础。内容需持续深耕,形成独特、权威的知识归属。未来,AI驱动的内容发现机制将持续演进,唯有不断适应,才能在新一轮内容竞争中占据优势。

6、大模型进入研发体系后,我们看到了这些变化(中文)

大模型时代下,程序员该何去何从,文章中提到了:生产效率提升十倍,未必导致岗位减少十倍,反而可能催生十倍以上的新需求,岗位总量仍会增长。这一点我非常认同,因为现在很多不是程序员的人也在使用 AI 来创建新的产品,而且有一部分还获得了不错的成绩。

深度总结

AI工具已成为研发流程的常规组成部分

AI辅助写代码已从新鲜事物变为日常工具。自动补全、代码生成和原型搭建等功能,已成为工程师工作流程的标配。工程师们不再纠结于“AI会不会取代程序员”,而是关注AI实际带来的流程变化。

研发效率的提升与新需求的增长

AI工具显著提升了研发效率。例如,原型开发、非核心业务系统和特定垂直场景的代码生成变得更高效。生产效率的提升并未导致岗位大幅减少,反而催生了更多新需求。工程师总量呈现增长趋势。

协作方式与知识分布的变革

大模型推动了团队协作方式的演进。AI成为动态、可交互的知识库,新成员可通过对话快速理解项目细节,减少对资深工程师的依赖。跨领域协作变得更顺畅,AI有助于理解产品设计、API文档等跨团队资料,降低沟通门槛。初级工程师借助AI更快胜任复杂任务,资深工程师则专注于架构设计和技术创新。

DevOps流程的深度自动化

AI正在突破DevOps流程中原本以人为主导的环节,如Code和Build。AI具备“慢思考”能力,能够理解需求、自动编码、修复问题。随着模型能力提升,AI可异步托管任务,与人协作完成复杂工作。未来,Plan、Test等环节也有望被AI进一步串联和优化。

AI赋能与增强工程师能力

AI带来的收益分为“enable”(赋能)和“enhance”(增强)两类。赋能指工程师借助AI完成原本无法胜任的任务,如后端开发者独立生成前端页面。增强则是AI作为助手提升现有能力,如自动生成测试用例、分析报告等。AI无法承担最终责任,端到端任务仍需人工校验。

新型工程师特质的崛起

在AI时代,主动学习意愿强、能动手实践、善于定义问题的工程师更容易脱颖而出。AI工具极大缩短了新人成长周期。具备扎实基础知识、优秀沟通与调试能力、快速学习和整合能力的工程师,能更好地利用AI提升自身价值。

核心竞争力的转变

重复性debug和死记硬背API等技能价值下降。工程师应将精力投入到关键业务需求理解、非典型问题解决和跨领域创新。AI难以胜任的领域,如深度业务理解和复杂系统设计,将成为工程师的核心竞争力。

研发效率与压力的真实感受

AI提升效率的前提是实现任务自动化。仅作为Copilot辅助,提升有限。AI目前能覆盖的任务在工程师整体工作时间中占比不高,节省的时间常被新任务填充。自动化普及后,工程师将专注于系统稳健性和AI无法解决的关键问题。效率提升是渐进的,焦虑感更多来自行业和业务节奏,而非AI本身。

工程师数量与行业前景

AI提升生产力后,相关岗位数量反而增加。AI赋能使更多人具备工程师能力,激发更大需求。技术变革带来更多待解决的问题,对人才的需求持续扩张。

工程效能的衡量与指标

需求交付速度是衡量效能的典型标准。AI工具的使用量和用户满意度成为辅助考量。指标应与团队实际流程紧密结合,服务于改进而非成为目的。不同业务场景需采用差异化指标,避免数据滥用和误解。

AI代码生成的现状与挑战

当前AI生成代码在部分场景占比可达30%-40%,agent逻辑场景下更高。理解现有代码和调试修复占用更多研发时间。人工调整比例高时,AI生成效率与手动编写差异不大。通过优化规则和约束,人工调整比例降低,效率提升更明显。

代码正确性与需求描述

AI生成代码需人工逐行审查,关键项目仍依赖传统Code Review和安全扫描。通过历史代码检索和团队知识库,提升AI生成代码的业务贴合度。有效需求描述应具备外行可理解性,但精确描述的成本高于代码实现本身。AI代码生成更适用于原型开发和非核心系统,复杂系统仍需人工把控。

AI应用开发的前景

2025年被认为是AI应用开发的爆发元年。AI应用市场潜力巨大,开发者需关注模型能力的垂直化发展,结合业务场景选择适配模型。

工程师的成长建议

工程师应聚焦解决问题的数量与深度,深度应用AI工具,推动技术与业务价值结合。持续学习、保持好奇心和热忱,是应对AI时代变革的关键。精通AI工具将成为基本功,追求卓越的专业能力和复利效应,是实现个人突破的核心路径。

7、Imports是怎样在React Server Components(RSC)中工作的(英文)

RSC 通过扩展 import/export 语义和引入“poison pill”机制,实现了前后端代码的安全复用和灵活分界。server-only/client-only 防止不适合的代码被错误引入,use client/use server 则作为跨环境引用的“门”,仅建立引用而不实际导入代码。这样,RSC 让模块自身声明决定其归属,消除了对目录结构的依赖,提升了全栈开发的安全性和灵活性。

深度总结

RSC中的模块系统与导入机制

React Server Components(RSC)提出了一种前后端协作的新范式。它允许开发者用一套代码同时描述前端与后端逻辑。RSC的核心在于对JavaScript模块系统(即import/export)的扩展,使开发者能够精确控制代码在前端与后端的分界。

模块系统的本质

模块系统的设计初衷是帮助开发者将复杂程序拆分为易于理解和维护的部分。通过import和export,开发者可以明确哪些代码对外可见,哪些仅为内部实现。对于计算机而言,模块最终会被“展开”成一份完整的内存镜像,供程序运行。

import的行为与单例特性

JavaScript的import机制表面上类似于“复制粘贴”代码,但实际更为复杂。与C语言的#include不同,import不会导致同一模块被多次引入。无论一个模块被多少地方import,其代码只会被执行一次。这种单例特性保证了模块的私有状态不会被重复创建,也避免了输出体积的膨胀。

前后端的模块隔离

在传统的全栈开发中,前端与后端各自拥有独立的模块系统。即使两端复用了同一份代码,实际上是各自“拥有”一份副本。import只会将代码带入当前环境,不会跨越前后端边界。模块的单例性仅在同一环境内有效。

代码复用的风险与“毒丸”机制

当前后端共享代码时,容易出现不适用的API被错误引入。例如,后端专用的fs模块被前端代码import会导致构建失败。为此,可以引入server-only和client-only“毒丸”模块。它们本身不包含实际逻辑,但一旦被错误地引入到不支持的环境,会强制构建失败。这样,开发者能在构建阶段及时发现并修正问题,防止敏感信息或不兼容代码泄漏到错误的环境。

RSC的创新点

RSC在传统模块系统基础上引入了’use client’和’use server’指令。这两条指令并不决定代码实际运行的位置,而是为模块系统之间建立“门”。‘use client’允许后端代码引用前端模块,‘use server’则允许前端代码引用后端模块。它们的作用是让两端能够安全地互相引用,而不是简单地将代码“带入”对方环境。

总结

RSC将前后端模块系统视为两个独立的世界。常规import只在本地生效,server-only和client-only机制防止代码被错误引入。‘use client’和’use server’则为必要的跨界引用提供了安全通道。通过这些机制,开发者可以灵活、安全地在前后端之间复用代码,同时避免常见的安全和兼容性陷阱。

8、为什么 RSC 需要与打包器集成(英文)

RSC 通过扩展 import/export 机制和引入 use client/use server 指令,实现了前后端模块系统的安全桥接。每端模块系统独立,import 只影响本地环境,server-only/client-only 机制防止敏感代码被误用。use client/use server 则为两端安全“开门”,允许引用但不实际引入,实现数据与逻辑的安全流转。RSC 让全栈代码复用更安全、灵活,边界清晰,极大提升了开发体验和安全性。

深度总结

React Server Components 与 Bundler 的集成原理

React Server Components(RSC)是一种扩展模块系统的编程范式,允许开发者将服务端与客户端的应用逻辑以单一程序的形式跨两个运行时表达。RSC 的核心实现包括两个部分:负责序列化 React 树的 react-server,以及负责反序列化的 react-client。这两个包仅在 React 仓库内部使用,并未以原始形式发布到 npm,因为它们缺少与模块系统的集成。

模块序列化的挑战

RSC 不仅需要传递数据,还要传递代码。例如,序列化 <p>Hello, world</p> 很简单,只需将其转为 JSON。但遇到 <Counter initialCount={10} /> 这样的组件时,问题变得复杂。直接将组件代码嵌入 JSON 并在客户端 eval 并不可取,这样既不安全也不高效。更合理的做法是将组件代码作为静态 JS 资源由应用提供,并在 JSON 中引用这些资源的位置,例如 '/src/client.js#Counter'。客户端可通过动态加载这些资源来还原组件逻辑。

Bundler 的作用

如果每次都单独加载一个模块,网络请求会形成瀑布式延迟,效率极低。为了解决这个问题,RSC 需要与 Bundler(如 Parcel、Webpack、Vite)集成。Bundler 在构建阶段会识别带有 'use client' 的文件,并为这些入口创建 bundle chunk。服务端通过 Bundler 绑定,能够在序列化时引用正确的模块路径。客户端则通过 Bundler 运行时加载这些模块,实现组件的动态还原。

API 设计与实际应用

RSC 的序列化与反序列化 API 由 Bundler 绑定包提供。例如,react-server-dom-yourbundler 提供 serialize 方法,将 React 树序列化为字符串。客户端通过 deserialize 方法还原为可用的 React 树。这一机制允许开发者像操作普通 JSX 一样处理反序列化后的组件树。

实践建议

目前主流的 RSC 框架(如 Next.js)都基于上述机制实现。如果希望深入理解底层原理,可以参考 Parcel 的 RSC 实现。不同 Bundler 的绑定包 API 名称可能不同,但核心思想一致:通过 Bundler 实现高效的模块传递与动态加载,确保服务端与客户端的无缝协作。

9、即将到来的前端框架颠覆:为什么下一个万亿美元公司可能来自Web3(英文)

image

当前主流前端框架(如React、Vue、Angular)因学习曲线陡峭、性能低下、复杂度高和厂商锁定等问题,导致全球每年数千亿美元的开发资源被浪费,开发效率停滞不前,移动端加载缓慢、开发者门槛升高、企业生产力提升有限、以及新兴市场用户被排除在外。文章指出,真正的颠覆不会来自现有框架的渐进改良,而是源于“极简主义、默认高性能、普适兼容、即学即用”的全新范式,这种框架将极大提升开发者生产力、移动端体验、企业数字化转型和全球开发者可及性,带来数万亿美元级别的市场机会。AI辅助开发、边缘计算、实时体验和全球互联网普及等趋势加速了这一变革的必然性。最终,能够实现“极致简单、普适高效、即刻上手”的新一代前端框架,将重塑整个软件行业,催生下一个万亿美元级科技巨头。

深度总结

前端框架的现状与困境

当前主流前端框架(如React、Vue、Angular)在实际开发中暴露出诸多问题。新手开发者需要花费数周时间才能掌握基本用法,团队大量精力被消耗在框架本身的复杂性管理上,而不是业务创新。即使硬件性能大幅提升,现代Web应用在移动端的加载速度却远逊于上世纪九十年代的网页。企业在框架相关的工具、培训和基础设施上投入巨大,却难以获得预期的生产力提升。与此同时,现有技术对新兴市场的支持不足,数十亿用户因设备和网络条件受限而被排除在现代Web体验之外。

潜在的颠覆性变革

文章认为,前端领域的下一个重大突破不会来自对现有框架的渐进优化,而是源于对开发范式的根本性重塑。历史上,iPhone用极简交互取代了复杂的商务手机,云计算用抽象化服务取代了繁琐的数据中心管理,React用声明式组件模型取代了命令式DOM操作。未来的前端框架有望以“极简主义”为核心,消除大部分现有复杂度,让开发体验接近静态HTML的简单。性能优化将成为默认能力,而非依赖开发者手动配置。新框架将避免生态系统锁定,实现广泛兼容,开发者能够在数小时内上手并立即投入生产。

市场机会与影响

这种范式转变将带来巨大的市场机会。开发者生产力提升将释放数千亿美元的价值,移动端性能提升将拓展新应用场景,企业数字化转型将变得更加高效,全球开发者门槛降低将推动创新普及。AI辅助开发、边缘计算、实时体验和全球互联网普及等趋势,进一步加速了对极简高效框架的需求。

变革的信号与未来展望

顶尖开发者正逐步转向更高效的工具,企业和教育机构也在重新评估现有技术栈。移动优先和性能优先的呼声日益高涨。文章最后指出,能够实现极致简单、普适高效、即刻上手的新一代前端框架,将有可能重塑整个软件行业,催生下一个万亿美元级的科技公司。

10、如果 AI 这么好,翻译人员没有被大量取代?(英文)

image

AI翻译技术虽已高度发展,但人类译者岗位并未消失,反而持续增长。2008至2018年美国翻译和口译岗位增长49.4%,2020至2023年又增11%,且未来十年预计仍将增长4%,高于美国职业平均增速。AI虽能处理主流语言的常规翻译,但在复杂、需文化敏感性和创造力的任务(如法律、医学、文学等)上仍不可靠,且在风格一致性和高价值内容上依赖人工。AI与人类协作提升了生产力,扩大了翻译需求,但也可能压低普通译者收入,只有掌握AI工具的译者能提升竞争力。总体来看,AI未能取代译者,反而促使行业分工升级和需求扩展,译者角色正向高端和复合型转变。

深度总结

AI与翻译行业的关系现状

AI技术,尤其是神经机器翻译(Neural Machine Translation, NMT),已经在主流语言之间实现了高质量的自动翻译。像Google Translate这样的工具早在2016年就已广泛应用。尽管如此,翻译和口译岗位并未大幅减少。美国劳工统计局数据显示,2020至2023年间,翻译和口译从业人数增长了11%。许多企业和政府机构仍在招聘相关岗位。

AI为何未能完全取代人工翻译

AI在处理常规、结构化的语言转换时表现良好,但在以下场景中仍显不足:

  • 需要文化敏感性、创造力和语境理解的复杂任务。例如,文学、法律、医疗等领域的翻译,AI难以准确把握细微差别。
  • 低资源语言(训练数据稀缺的语言)翻译效果有限。
  • 某些高价值场景(如产品界面、品牌语调)对准确性和一致性要求极高,企业更倾向于依赖人工。

以多邻国为例,AI主要用于提升效率,但关键内容仍由人工把关。AI无法持续保持品牌特有的“playful voice”,因此人工参与不可或缺。

人机协作成为主流

当前行业趋势是“人机协作”。AI负责处理重复性、标准化的翻译任务,人工则专注于高难度、需判断力的部分。这种模式提升了整体生产效率,也降低了服务成本,进一步扩大了市场需求。

对从业者的影响

AI工具提升了翻译人员的工作效率,但也带来了技能贬值的风险。部分基础翻译工作门槛降低,导致薪酬压力增大。高端翻译人才(如文学翻译、外交口译)受影响较小。行业内部出现分化:善于利用AI工具的译者收入提升,未能适应技术变革者则面临被边缘化。

未来展望

翻译行业不会因AI而消失,但岗位结构和技能要求正在发生变化。法规(如美国民权法案第六章)也保障了部分翻译服务的刚性需求。整体来看,AI是工具而非替代者,行业核心竞争力依然在于人的判断力和创造力。

11、了解声明式 Web推送(中文)

声明式 Web Push 让网页无需 JS/service worker 即可推送通知,提升隐私与能效,简化开发,兼容现有方案,已在 Apple 测试版实现,推动标准化,适合大多数场景,推动 Web 推送体验和生态升级。

深度总结

声明式 Web Push:简化推送通知的新范式

声明式 Web Push 是 WebKit 团队提出的一项新特性,旨在优化网页推送通知的实现方式。它允许开发者在无需依赖 JavaScript 和 Service Worker 的情况下,直接向用户推送通知。这一机制不仅提升了隐私保护和能耗效率,还简化了开发流程。

传统 Web Push 的局限

当前主流的 Web Push 依赖于 Service Worker 和 JavaScript。推送消息本身并不包含最终展示给用户的内容,而是通过 Service Worker 的 PushEvent 事件处理后,由 showNotification 方法生成通知。开发者需要注册 Service Worker,管理 PushSubscription,并确保每次推送都能及时展示通知。任何环节出现问题(如脚本 bug、网络异常),都可能导致通知无法展示,甚至被浏览器撤销推送权限。

此外,WebKit 强制要求 userVisibleOnly 为 true,防止静默推送。这一设计初衷是保护用户隐私和电池续航,但也增加了开发和调试的复杂度。

隐私与数据追踪的挑战

WebKit 的隐私保护策略(如 ITP)会定期清除长时间未访问网站的所有数据,包括 Service Worker 注册信息。这意味着推送订阅与 Service Worker 强绑定后,隐私机制可能导致推送功能失效。传统 Web Push 的这种依赖关系,与现代浏览器对隐私的高要求存在天然冲突。

声明式 Web Push 的实现方式

声明式 Web Push 允许开发者通过 window.pushManager 直接管理推送订阅,无需 Service Worker。推送消息采用标准化 JSON 格式,包含所有展示通知所需的信息。例如:

{
  "web_push": 8030,
  "notification": {
    "title": "Webkit.org — Meet Declarative Web Push",
    "lang": "en-US",
    "dir": "ltr",
    "body": "Send push notifications without JavaScript or service worker!",
    "navigate": "https://webkit.org/blog/16535/meet-declarative-web-push/",
    "silent": false,
    "app_badge": "1"
  }
}

只要推送内容符合声明式标准,浏览器无需运行任何脚本即可展示通知。用户点击通知后,可通过 navigate 字段跳转到指定页面。如果应用支持 Badging API,还能同步更新应用角标。

兼容性与灵活性

声明式 Web Push 与传统 Web Push 兼容。开发者只需调整推送消息格式和事件处理逻辑,即可兼容新旧浏览器。对于需要动态生成通知内容或涉及本地数据、加密的场景,仍可通过 Service Worker 处理推送事件。即使 Service Worker 被清除,声明式消息依然能保证通知正常展示。

适用与不适用场景

声明式 Web Push 适合用于简单、无需用户状态的系统通知,如天气预警、快递提醒、PWA 首次加载等。对于需要根据用户状态生成内容、涉及加密或本地数据的复杂场景,仍建议结合 Service Worker 使用。

标准化进展

WebKit 团队已在相关标准组织推动声明式 Web Push 的规范化,包括在 Push API 和 Notifications API 中引入声明式格式,并在 Window 上暴露 pushManager。这些变更有助于推动跨平台一致性,降低开发和维护成本。

结语

声明式 Web Push 通过降低对 JavaScript 的依赖,提升了推送通知的可靠性、隐私保护和能耗效率。它为前端开发者提供了更简洁的实现路径,同时兼容现有生态,适应现代浏览器的隐私策略。

12、Cursor 原理之窥探提示词(中文)

Cursor agent 通过结构化提示词和自动注入开发上下文,将大模型与本地开发环境深度融合,极大提升了编程助手的智能性、可控性和输出的针对性,为开发者带来更高效、透明的 AI 协作体验。

深度总结

Cursor Agent 模式原理解析

Cursor 的 agent 模式本质上是 VSCode 编辑器与大语言模型(如 Claude 3.7 Sonnet)及工具能力(如读写文件、搜索文件)结合的产物。其核心在于通过结构化的提示词(prompt)与上下文信息,驱动 AI 辅助编程。

环境搭建流程

  1. ollama
    ollama 是本地运行开源大语言模型的工具。通过命令行拉取并运行模型(如 qwen2.5:7b),用户可在本地与模型交互。ollama 默认监听 11434 端口,提供 HTTP API,便于集成到其他系统。

  2. ngrok
    ngrok 用于内网穿透,将本地服务(如 ollama 的 HTTP 接口)暴露到公网。配置完成后,用户可通过公网地址远程访问本地模型服务。

  3. Cursor 配置
    在 Cursor 设置中,用户可指定自定义模型及 API 地址,实现本地模型与 Cursor 的对接。通过控制台可监控请求,便于分析 Cursor 与模型的交互细节。

提示词结构与机制

Cursor 在与大模型交互时,会自动生成结构化的提示词。主要内容包括:

  • AI 角色定位
    明确 AI 是在 Cursor 编辑器中运行的编程助手,非通用型 AI。

  • 上下文注入
    自动附加用户当前的开发环境信息,如打开的文件、光标位置、编辑历史等。AI 根据实际情况判断这些信息的相关性。

  • 主任务指令
    明确 AI 的主要目标是执行 <user_query> 标签内的用户指令,避免无关发挥。

  • 输出规范
    规定 Markdown 输出风格,文件、函数名等需用反引号,数学表达需用特定符号包裹。

  • 代码修改规范
    仅在用户明确要求时建议代码修改。输出代码时采用差异片段(diff)格式,未变更部分用 // ... existing code ... 标记,便于后续自动化处理。

  • 环境信息
    注入用户操作系统、工作目录、Shell 类型等,辅助 AI 判断命令格式和兼容性。

  • 代码引用格式
    强制采用 startLine:endLine:filepath 的格式引用代码片段,确保编辑器和自动化工具能准确定位。

连续对话

13、万字长文深入浅出教你优雅开发复杂AI Agent(中文)

AI Agent行业正从简单聊天机器人迈向复杂多Agent协作,MCP和A2A协议推动生态标准化,结构化思考框架提升智能上限。Golang工程化框架助力高效开发与协作,透明可观测和人机协同保障生产级落地。协议与框架需按需选型,标准化与工程化结合是打造高质量AI Agent的关键。

深度总结

AI Agent开发的核心理念与协议

AI Agent的开发正经历范式转变。文章首先梳理了AI Agent的三大阶段:LLM Agent、AI Agent、Multi Agent。LLM Agent以聊天机器人为主,依赖大模型和Prompt工程,适合娱乐和社交场景,但在严肃应用中存在幻觉和不可控问题。AI Agent阶段引入了规划、记忆、工具使用三大核心能力。Agent能够自主拆解任务、保持上下文连贯,并通过API等工具与外部世界交互。Multi Agent阶段则强调多个专精Agent协作,每个Agent聚焦特定任务,通过任务分发和协作机制处理复杂问题。人类可作为特殊Agent参与决策、审核和异常处理,提升系统可靠性。

主流协议:MCP与A2A

协议标准化是Agent生态的基础。MCP(Model Context Protocol)通过Client-Server架构,将工具调用、资源访问与LLM解耦,采用JSON-RPC标准化接口,提升工具复用和生态兼容性。MCP适合结构化、工具导向的场景,强调Agent如何高效使用外部工具。A2A(Agent2Agent)协议则聚焦Agent间的互操作和协作,定义了能力发现、任务管理、消息交换等机制。A2A适合多Agent协作、动态任务分工的复杂场景。两者并非互斥,MCP解决“用好工具”,A2A解决“高效协作”。未来两类协议有融合趋势,工具型Agent和高自主性Agent的界限逐渐模糊。

思考框架:CoT、ReAct、Plan-and-Execute

Agent的智能上限取决于其思考框架。CoT(Chain of Thought)引导模型生成中间推理步骤,提升复杂任务的可解释性和推理能力。ReAct(Reasoning and Action)将推理与行动结合,模型在推理过程中可调用外部工具,形成“思考-行动-观察”的循环。Plan-and-Execute模式将任务分为规划和执行两阶段,先整体拆解任务,再逐步执行,便于处理长链条任务,提升鲁棒性和可解释性。用户可在关键节点参与,增强人机协作。

Golang生态下的工程化框架

主流AI Agent开发框架多集中于Python和Javascript。Golang生态中,Eino和tRPC-A2A-Go是两大代表。Eino强调强类型、组件化和有向图编排。开发者通过组合ChatModel、Tool、Retriever等组件,构建数据流动网络。Eino支持可视化开发、丰富的开箱即用组件,并通过Callback机制实现日志、追踪、指标等可观测能力。Checkpoint机制支持Human In The Loop,允许在关键节点暂停,等待用户干预或确认。

tRPC-A2A-Go框架实现了A2A协议的客户端和服务端,便于将Agent封装为标准A2A服务,实现分布式、异构环境下的多Agent协作。Agent可像微服务一样独立部署和维护,支持能力发现、任务流转和状态同步。

多Agent系统的架构与实践

多Agent系统常采用Supervisor模式。意图识别Agent负责任务分发,领域专家Agent专注具体任务。所有Agent通过A2A协议标准化封装,便于对接各类平台和生态。Connector层实现协议适配和接口封装,支持能力复用和生态扩展。系统可无缝接入桌面应用(如Cherry Studio)、IM平台(如QQ机器人)等,实现“写一次,处处可用”。

可观测性与持续优化

Agent的可观测性是生产级系统的基础。Langfuse等平台支持全链路追踪、质量评估和持续优化。开发者可实时监控任务状态、性能指标和异常日志,基于对话数据持续优化模型和业务逻辑。Eino框架通过Callback机制简化了可观测组件的接入,支持灵活切换不同监控平台。

结语

AI Agent的发展正向多Agent协作、协议标准化、思考框架结构化和工程化演进。理解MCP与A2A的边界,合理选择思考框架和开发工具,是构建高效、可维护、可观测的智能体系统的关键。Golang生态下的Eino和tRPC-A2A-Go为开发者提供了强大的工程化支持,助力复杂AI Agent系统的落地与演进。

14、React 2025 React 生态现状与社区动态(英文)

2025 年 React 生态在 Server Components 推动下发生重大变革,团队由 Meta 与 Vercel 共同主导,Next.js 成为 RSC 首选实现,引发“Vercel 控制 React”等争议。React 团队强调框架化以提升性能,但忽视 SPA 用户需求,文档推荐缺乏包容性,导致社区分裂和焦虑。最终文档调整承认多元用法,但 RSC 相关官方文档仍不足,信息混乱未解。

深度总结

React 的发展与现状

React 依然是最广泛使用的 UI 框架,其理念深刻影响了整个 JavaScript 生态。React 19 的发布带来了 Server Components、use hook、全新表单集成等重大更新,同时移除了许多过时特性。尽管如此,社区内部对 React 的发展方向、推荐用法以及团队与社区的互动存在明显分歧和不满。

社区分歧的根源

React 团队长期保持“只做视图层”的定位,不对路由、数据获取等问题给出官方方案。这种不设限的策略带来了极大的灵活性,也导致了生态碎片化。开发者在启动项目时,必须自行选择状态管理、样式、数据获取、构建工具等,每一类都有众多方案。这种选择自由带来了决策疲劳和项目间差异。

框架化趋势与争议

随着 Next.js、Remix 等框架的兴起,React 团队逐步转向推荐“用框架开发 React 应用”。新文档明确建议开发者优先选择集成了路由、数据获取、构建能力的框架。Next.js 因为率先实现了 React Server Components,成为官方文档中最突出的位置。Create React App(CRA)逐步被弃用,Vite 等现代构建工具被社区广泛采用,但在官方推荐中长期被边缘化。

React 团队与 Vercel 的关系

React 的开发由 Meta 和 Vercel 共同推动。部分核心成员从 Meta 跳槽至 Vercel,推动了 Next.js 与 React 的深度融合。社区中出现了“Vercel 主导 React 发展、推动商业化”的质疑。实际上,React Server Components 的设计主导权仍在 React 团队,Vercel 主要提供了工程资源和试验场。Next.js 的架构调整更多是配合 React 的技术愿景,而非单纯商业驱动。

Server Components 的技术特性

React Server Components(RSC)是 React 团队提出的全新架构,允许组件在服务端异步获取数据并渲染,最终将结果传递到客户端。RSC 的实现依赖于 bundler 对 'use client''use server' 指令的解析与代码分割,因此必须集成在框架和构建工具中。不同框架对 RSC 的集成方式各异,Next.js 是目前唯一成熟的生产实现。

社区常见疑虑与澄清

  • “React 只适用于 Next.js”:错误。React 依然支持多种用法,SPA、SSR、SSG 均可,Vite 等工具依然有大量用户。
  • “React 未来会放弃客户端渲染”:不成立。Meta 内部大量代码依赖客户端渲染,React 团队一贯重视向后兼容。
  • “为什么强推框架”:React 团队认为框架能带来更好的默认性能和开发体验,尤其是 SSR/SSG 能避免数据获取“瀑布”问题。但这种推荐缺乏对多样化场景的细致考量,导致部分用户感到被边缘化。

文档与开发者关系

React 新文档长期忽视了 SPA 和自定义构建工具的主流用法,Vite 等工具被低调处理,相关说明被隐藏在不显眼的位置。社区反馈后,文档逐步增加了对 Vite、Parcel 等工具的介绍,并承认 SPA 依然是合理选择。RSC 相关文档长期缺失,导致开发者对其原理和适用场景理解不足,主要依赖外部博客和框架文档。

结语

React 生态的复杂性源于其高度灵活和社区多元。团队推动框架化的初衷在于提升开发体验和性能,但在沟通和文档层面存在明显不足。未来 React 仍将支持多种架构模式,Server Components 作为可选能力,开发者可根据实际需求选择合适的技术栈。

15、浏览器指纹-探究前端如何识别用户设备(中文)

浏览器指纹通过收集多种环境参数(如Navigator、Canvas、WebGL等)生成设备唯一ID,无需本地存储,能有效识别用户设备。多种指纹技术结合可提升识别准确率,但各自稳定性和抗干扰性存在差异,需综合应用以实现更可靠的身份验证。

深度总结

浏览器指纹的原理与前端实现

浏览器指纹是一组用于唯一标识用户浏览器的特征值集合。它并非真实的生物指纹,而是通过收集浏览器、操作系统、分辨率、字体、插件等多维度信息,组合生成一个独特的ID。与Cookie不同,浏览器指纹无需在用户设备上存储任何数据,仅通过读取现有信息实现用户识别。

背景与需求

在实际项目中,常见的需求是利用设备作为唯一凭证进行身份验证。前端无法直接获取如IMEI、序列号等底层硬件信息,受限于浏览器的安全机制。因此,开发者通常转向浏览器指纹技术,以获取设备的唯一标识。

常见指纹采集方案

  • Navigator 指纹
    通过navigator对象获取浏览器类型、版本、操作系统平台、语言、CPU核心数、插件列表等信息。这些属性组合后,能够在一定程度上区分不同设备。例如,navigator.userAgent用于识别浏览器类型和系统,navigator.platform反映操作系统,navigator.languagenavigator.languages揭示用户的语言偏好。
    代码实现时,通常将这些信息序列化为字符串,再通过SHA-256等哈希算法生成指纹。该方法在同一设备、同一环境下指纹值稳定,但系统语言或浏览器升级后指纹会发生变化。

  • Canvas 指纹
    利用Canvas绘图API,生成一段特定的图像。由于不同设备在渲染同一内容时会因显卡、驱动、字体渲染等细节产生微小差异,最终得到的像素数据也不同。将这些像素数据转为base64字符串后,再进行哈希处理,得到的指纹具有较高的稳定性和唯一性。
    这种方法只与设备性能相关,环境变化对其影响较小。

  • WebGL 指纹
    通过WebGL渲染特定图形,利用显卡和驱动的差异生成特征值。与Canvas指纹类似,但采集维度更深,唯一性更强。

  • 其他信息
    字体、插件、时区、屏幕分辨率等信息也可作为指纹采集的补充。这些信息单独使用时识别度有限,但与其他方案结合后,整体唯一性显著提升。

代码示例与实现思路

以Navigator指纹为例,前端通过收集userAgentplatformlanguage等属性,序列化后计算哈希值,生成设备指纹。Canvas指纹则通过绘制图形、获取数据URL、再进行哈希处理。两者均可结合更安全的哈希算法(如SHA-256)提升指纹的不可伪造性。

稳定性与局限

单一指纹方案易受环境变化影响,导致指纹不稳定。多种信息结合采集,可提升唯一性和稳定性。实际应用中,需根据业务需求权衡指纹的唯一性、稳定性与用户隐私保护。

精彩回顾

1、ESLint v9.0.0 发布回顾(英文)

ESLint 是现在广泛使用的代码规范检查工具,使用它,不仅可以规避很多项目上因为代码格式问题导致的代码冲突,还可以使用它规避很多代码编写时的语法上面的错误,对于项目架构者是一项必须要学习的工具。

深度总结

ESLint v9.0.0回顾:变革、挑战与经验

ESLint v9.0.0于2024年4月发布,是三年来的首次重大版本更新。此次更新的核心是全新的配置系统(flat config),该系统在开发阶段获得了积极评价。然而,正式发布后,社区反馈却以负面为主。许多用户认为新版本“不够成熟”、“无法正常工作”,甚至“破坏了生态系统”。部分用户选择推迟升级,甚至考虑更换工具。

主要时间线与变更

  • flat config的最初RFC提交于2019年,2020年正式通过,2022年起逐步集成到CLI。
  • 2023年7月,flat config功能基本完善,并在v8.45.0中发布迁移指南。
  • v9.0.0于2024年4月正式将flat config设为默认配置。

flat config的开发周期长达五年,CLI集成后有20个月的预览期,功能完善后有8个月的缓冲期,期间发布了7个预发布版本。

成功之处

  • 版本支持政策正式化:首次明确了旧版本的支持策略,避免了以往升级带来的断崖式影响。与HeroDevs合作,v8.x在v9.0.0发布后继续获得6个月的维护,之后由HeroDevs接手。
  • 多分支维护:首次同时维护两个主线版本,基础设施做了相应调整,主页也清晰标注了稳定版与预发布版。
  • 文档与沟通:v9.0.0的文档极为详尽,迁移指南与新特性同步更新,减少了遗漏。
  • 应对混乱:团队预见到升级过程中的混乱,快速响应社区反馈,推出了兼容性工具、Config Inspector和Config Migrator等辅助工具。

遇到的问题

  • 变更过多:将配置系统和rule API的重大变更合并到一个版本,导致插件适配难以定位问题根源。许多用户误以为所有问题都源自新配置系统。
  • 文档过多,工具不足:虽然文档详尽,但大多数用户并不会提前阅读。实际情况是,用户遇到报错后才回头查文档。社区反馈更希望有自动化迁移工具,而不是大量文档。
  • 生态适配缓慢:尽管提前18个月沟通,许多插件和配置作者直到v9.0.0 beta才开始适配。团队权衡后未选择推迟发布,因为v8.x仍然可用且持续维护。
  • 未预见双配置支持需求:许多插件和配置作者希望单个包能同时兼容旧新配置系统。团队最初假设作者会分开维护,实际需求远超预期。

经验与反思

  • 减少一次性破坏性变更:未来将优先采用小步快跑的方式,避免大版本合并过多破坏性变更。
  • 优先开发工具:用户更依赖自动化工具而非文档。后续将优先开发codemod和转换工具,降低升级门槛。
  • 错误提示需更具上下文:用户往往在遇到报错后才查文档,需提升错误信息的指引性。
  • 生态沟通方式需改进:传统的博客、社交媒体和邮件通知效果有限,需探索更高效的生态沟通机制。

结语

ESLint v9.0.0的发布推动了配置系统和插件机制的演进,也暴露了大版本升级中的诸多挑战。团队将以此次经验为基础,优化未来的发布策略和生态支持方式,持续提升工具的可用性和用户体验。

开源精选

1、为了摸鱼我开发了一个摸鱼网站摸鱼网站:作者开发了一个摸鱼网站,并且对前端后端都进行了开源。

2、rdev/liquid-glass-react(star:2.4k):为React应用实现类似苹果Liquid Glass的动态玻璃折射与弹性视觉特效组件。

image

3、iamgio/quarkdown(Star:7.5k):Quarkdown是一个现代的基于Markdown的排版系统,旨在通过将项目无缝编译成可打印的书籍或交互式演示文稿来解决多功能性问题。

image

4、toolwind/anchors(Star:197):一个为Tailwind CSS提供声明式CSS锚点定位API的插件,用于灵活、声明式地相对于自定义锚点定位元素。

image

5、developit/mitt(Star:11.4k):一个极小(约200字节)的无依赖函数式事件发射器/发布-订阅库,适用于浏览器和任意JavaScript运行时。

6、antfu/unplugin-auto-import(Star:3600):为 Vite、Webpack、Rollup、Rspack 和 esbuild 提供按需自动导入 API 的插件,支持 TypeScript,简化开发流程。

7、primefaces/primevue(Star:12.9k):Next Generation Vue UI Component Library,提供丰富的开源 Vue UI 组件集。

8、Hacker233/resume-design(Star:2.6k):一款开源免费的简历制作工具,支持超高清PDF/图片导出、AI简历生成与润色、模板切换和高度定制化,适用于简历、海报、logo等多场景设计。

9、barbajs/barba(Star:12.3k):用于在网站页面之间创建流畅、平滑的过渡动画,使多页面网站拥有单页应用般的体验。

10、prazdevs/pinia-plugin-persistedstate(Star:2.4k):为 Pinia 状态管理库提供可配置的持久化和重水化功能,支持多种存储方式及 Nuxt 集成。

11、TypeStrong/typedoc(Star:8.1k):TypeDoc 是一个为 TypeScript 项目生成文档的工具。

12、capricorn86/happy-dom(Star:3.8k):一个无图形界面的 JavaScript Web 浏览器实现,适用于 Node.js 环境下的前端测试和 DOM 操作。

13、bcakmakoglu/vue-flow(star:5.2k):一个高度可定制的 Vue 3 流程图组件,支持无缝缩放和拖拽,包含小地图等附加组件,并可与状态和图形交互。

14、wswmsword/postcss-mobile-forever(Star:416):一个PostCSS插件,用于将固定尺寸转换为伸缩尺寸,以实现移动端适配,并提供多种模式和最大宽度限制功能。

15、vuejs/devtools(Star:2.4k):浏览器开发者工具扩展,用于调试 Vue.js 应用程序。

16、orta/tsconfig-bases(Star:7k):集中托管并维护适用于不同运行环境的 TypeScript 配置基准,方便开发者在项目中直接继承和扩展。

17、openai/openai-node(Star:9.4k):官方的 JavaScript / TypeScript 库,用于便捷访问 OpenAI REST API。

18、nodeca/js-yaml(Star:6.4k):JavaScript 实现的高性能 YAML 1.2 解析与序列化库,支持多种用法和丰富的配置选项。

19、pi0/nitro(Star:7.3k):Next Generation Server Toolkit,帮助你创建可在任意环境部署的 Web 服务器。

20、NodeGui/nodegui(Star:9.1k):一个基于Node.js和CSS样式,利用Qt6构建高性能、跨平台原生桌面应用的开发库。

更多周刊