<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>前端框架 | 锤子前端</title><description>Now vibe coding, so learning hammer FE ?</description><link>https://channel.meo-ai.com</link><item><title>《设计系统应该默认就是快的》</title><link>https://channel.meo-ai.com/posts/730</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/730</guid><pubDate>Thu, 29 Oct 2026 09:14:04 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《设计系统应该默认就是快的》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;br /&gt;&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91&quot; title=&quot;#前端开发&quot;&gt;#前端开发&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E8%AE%BE%E8%AE%A1%E7%B3%BB%E7%BB%9F%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96&quot; title=&quot;#设计系统性能优化&quot;&gt;#设计系统性能优化&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95&quot; title=&quot;#性能测试&quot;&gt;#性能测试&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%80%A7%E8%83%BD%E9%A2%84%E7%AE%97&quot; title=&quot;#性能预算&quot;&gt;#性能预算&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23WebComponents&quot; title=&quot;#WebComponents&quot;&gt;#WebComponents&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E7%BB%84%E4%BB%B6%E6%B8%B2%E6%9F%93%E4%BC%98%E5%8C%96&quot; title=&quot;#组件渲染优化&quot;&gt;#组件渲染优化&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;这篇文章通过实测十大主流开源设计系统（Mantine、Ant Design、Material UI、React Spectrum、Carbon、Fluent、Web Awesome、UI5、Spectrum Web Components、Ionic），论证了性能应当与设计系统团队所重视的可达性（accessibility）平起平坐：底层组件的每一个性能修复，都会同时惠及所有基于该设计系统构建的应用。测试发现性能优劣并不取决于框架本身，而在于具体实现细节，作者还深入剖析了 Ionic、Ant Design、UI5、React Spectrum 等慢速组件的根因，并给出了可行的修复建议，最后提供了基于 Playwright 的自动化性能测试方案与「Fast by Default（默认即快）」的理念。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. 浏览器的 JavaScript 主线程是所有层共用的，设计系统组件越慢，留给应用代码的余地就越小——修复一个设计系统组件的性能，等于同时提升所有依赖它的应用。&lt;br /&gt;2. 作者选取了十个基于不同框架（React、Lit、FAST、Stencil、SAP 自研框架）的设计系统，在 4 倍 CPU 降速、Chrome 155 环境下实测了两大典型场景：打开含 249 个国家的下拉选择器、一次性全选 100 个复选框。&lt;br /&gt;3. 实测结果差异巨大：国家选择器从最快 Fluent 的 61ms 到最慢 Ionic 的 1,266ms（比第二名慢 5 倍以上）；复选框从 Fluent 的 29ms 到 Ant Design 的 421ms——同一框架（如 React 或 Lit）内部差距同样悬殊，性能问题出在实现而非框架。&lt;br /&gt;4. 十个设计系统中只有 Spectrum Web Components 在每个 PR 上自动跑组件级性能基准，多数团队只检查包体积——但包体积与组件在页面上的响应速度并无直接关系。&lt;br /&gt;5. 作者逐一剖析了慢速根因：Ionic 因 Stencil 在无 shadow DOM 的场景下用 &lt;code&gt;appendChildSlotFix&lt;/code&gt; 模拟插槽、每次新增选项都要遍历全部既有子节点三次（O(n²)）；React Spectrum 因 React Aria 逐个清空高度再读取尺寸造成「布局抖动」；UI5 因隐藏弹层中预置全部 249 个选项，打开瞬间浏览器要一次性完成约 1500 个元素的样式计算；Ant Design 的慢则主要来自 100 个复选框同时触发的颜色渐变动画。&lt;br /&gt;6. 性能瓶颈各有解法：长列表用虚拟滚动（Ant Design 的做法值得借鉴，还为屏幕阅读器保留了高亮项的隐藏副本）；动画改由合成器线程运行的 opacity 渐变替代主线程上的颜色渐变；Stencil 可直接修复插槽回退内容的第三次检查，作者实测去掉后加 2000 个元素快约 7 倍。&lt;br /&gt;7. 作者分享了用 Playwright + Chrome DevTools 协议（CPU 降速 4 倍 + Long Animation Frames 长帧 API）编写组件性能测试的完整代码，包含「总耗时预算 300ms」和「最长无响应帧不超过 100ms」两条性能预算（performance budget），以及一条「选项翻倍时耗时增长不超过 2.5 倍」的防 O(n²) 回归测试。&lt;br /&gt;8. 落地的最佳实践是「默认就提供快的行为」：超过性能预算的列表自动切换虚拟化、复选框仅在被直接点击时才播放动画，并在文档中写明每个组件的测试数据规模上限，发布说明中给出修复前后的量化数据（如「500 个选项下打开从 300ms 降到 150ms」）。&lt;br /&gt;9. 以上测试代码已开源在 GitHub 仓库 design-system-performance-tests 中，可直接复制改造用于自己的设计系统，并附带 GitHub Actions 工作流实现每个 PR 自动跑性能测试。&lt;br /&gt;10. 文章结尾宣传了作者的新书《Fast by Default: Practical Performance Engineering》（Manning 早期访问版），把这套思路延伸到后端与移动端。&lt;br /&gt;&lt;br /&gt;URL：&lt;a href=&quot;https://denodell.com/blog/design-systems-should-be-fast-by-default&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://denodell.com/blog/design-systems-should-be-fast-by-default&quot;&gt;https://denodell.com/blog/design-systems-should-be-fast-by-default&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://denodell.com/blog/design-systems-should-be-fast-by-default&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;If a design system’s components are slow to interact with, so are any apps built with it. I timed large dropdowns and checkbox lists in some popular design systems, worked out how to make the slow ones faster, and wrote tests that fail when they’re too slow.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Den Odell&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Design Systems Should Be Fast by Default&quot; src=&quot;/static/https://cdn4.telesco.pe/file/prwDcUJjanfw3iDWSDKbwkdZNnwMgqXd8jse5-sGrIQFZEQ-bM__2cCdCrCKuuMxJn8qbhJIz27feWIXXSJ4RzrlsYlA0KbHp-HDqYfd-XCo_hd1SFHnRsM0VKHnl6faIKdO3Ga2GjMP5NPqFysbIFdTXxI4IQ8sbshAgYrFsSX8KuwMxYAFyVjPKL7AMRowWXal7pJwDx3cCUyRUqdEyPKWxsgr5-_k1pGbKifxUOOqggDzd_sFGafjxxdFuTkkb3JRwMGQhTANx-8Mlia_Qqw7mYYIoG7WpJLcJT2ZKFKG6vPWDSvUSsh84ousi-MwLEF8zrTeP8bDLgBQ0p6tXQ.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;lazy&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;Design Systems Should Be Fast by Default&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;If a design system’s components are slow to interact with, so are any apps built with it. I timed large dropdowns and checkbox lists in some popular design systems, worked out how to make the slow ones faster, and wrote tests that fail when they’re too slow.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《框架还重要吗？》</title><link>https://channel.meo-ai.com/posts/708</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/708</guid><pubDate>Sun, 20 Sep 2026 02:45:28 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《框架还重要吗？》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;br /&gt;&lt;a href=&quot;/search/result?q=%23%E7%BC%96%E7%A8%8B&quot; title=&quot;#编程&quot;&gt;#编程&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Web%E5%BC%80%E5%8F%91&quot; title=&quot;#Web开发&quot;&gt;#Web开发&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23AI%E7%BC%96%E7%A8%8B&quot; title=&quot;#AI编程&quot;&gt;#AI编程&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6&quot; title=&quot;#前端框架&quot;&gt;#前端框架&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23React&quot; title=&quot;#React&quot;&gt;#React&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B&quot; title=&quot;#软件工程&quot;&gt;#软件工程&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%8A%80%E6%9C%AF%E8%B6%8B%E5%8A%BF&quot; title=&quot;#技术趋势&quot;&gt;#技术趋势&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23VibeCoding&quot; title=&quot;#VibeCoding&quot;&gt;#VibeCoding&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;&lt;br /&gt;这是一篇探讨在 AI 编程时代 Web 框架是否仍然重要的深度分析文章。作者 Brooks Lybrand 作为拥有三年开源框架开发经验的前端工程师，针对&quot;模型已经足够好，框架选择不再重要&quot;的流行观点进行了系统性反驳，论证了框架在提供抽象、结构和约束方面的核心价值，并呼吁行业继续创新和构建新框架。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;&lt;br /&gt;1. **对&quot;React 已赢&quot;论的质疑**：作者指出当前流行观点认为由于 LLM 训练数据中 React 代码最多，模型最熟悉 React，因此无需尝试其他框架。但他认为这种逻辑存在矛盾——如果框架真的不重要，那连 React 都不需要，直接用 Web Components 或让 AI 生成原生代码即可。&lt;br /&gt;&lt;br /&gt;2. **框架的本质价值**：作者将框架的价值精炼为三点：**提供抽象（Abstractions）、结构（Structure）和约束（Constraints）**。这些价值不仅适用于人类开发者，对 AI 编程同样关键——良好的抽象能避免 AI 重复造轮子或创建混乱的临时方案；清晰的结构帮助 AI 生成可维护的代码；明确的约束（如类型检查、测试）能防止 AI 在迭代中破坏系统。&lt;br /&gt;&lt;br /&gt;3. **AI 时代框架的隐性存在**：引用 React 核心团队成员 Ricky Hanlon 的观点&quot;你要么使用框架，要么构建框架&quot;，作者强调即使不显式选择框架，AI 在生成代码时也会隐式地创建框架。与其让 AI 生成一个缺乏维护、充满临时补丁的&quot;隐性框架&quot;，不如使用经过实战检验、文档完善的开源框架。&lt;br /&gt;&lt;br /&gt;4. **开发者体验（DX）的重构**：通过分析 HMR（热模块替换）、TypeScript 和 &lt;code&gt;useEffect&lt;/code&gt; 等具体技术，作者说明某些传统 DX 功能对人类开发者的价值正在转变，但对 AI 编程仍至关重要。例如 TypeScript 的类型约束能有效防止 AI 在复杂应用中引入错误，而 &lt;code&gt;useEffect&lt;/code&gt; 这类强大但易误用的抽象则应该避免让 AI 随意使用。&lt;br /&gt;&lt;br /&gt;5. **框架战争的终结与新机遇**：作者认为 2013-2024 年的&quot;框架战争&quot;已经结束，人们不再渴望为框架争论，但这不意味着框架不再重要。他指出当前框架领域仍存在明显不足，特别是缺乏真正全栈、基于 Web 标准、易于 AI 协作且代码可理解的 JavaScript 框架。&lt;br /&gt;&lt;br /&gt;6. **对未来的呼吁**：尽管承认 AI 正在重塑软件开发，且没人知道其长期影响，作者仍坚持认为认为&quot;所有问题都已解决&quot;是一种颓废的态度。他呼吁继续构建新框架，探索更好的抽象和模式，而不是停留在&quot;现有框架足够好&quot;的舒适区。&lt;br /&gt;&lt;br /&gt;URL：&lt;br /&gt;&lt;a href=&quot;https://brookslybrand.com/posts/do-frameworks-matter-anymore/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://brookslybrand.com/posts/do-frameworks-matter-anymore/&quot;&gt;https://brookslybrand.com/posts/do-frameworks-matter-anymore/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&amp;gt; 个人觉得有点片面化，remix 脱离 react 转而用 preact 自创轮子</content:encoded></item><item><title>《用 AI 定制框架替换 Next.js：一个静态网站的“超个性化”重构实验》</title><link>https://channel.meo-ai.com/posts/707</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/707</guid><pubDate>Mon, 14 Sep 2026 01:14:08 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《用 AI 定制框架替换 Next.js：一个静态网站的“超个性化”重构实验》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;br /&gt;&lt;a href=&quot;/search/result?q=%23Web%E5%BC%80%E5%8F%91&quot; title=&quot;#Web开发&quot;&gt;#Web开发&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF%E5%B7%A5%E7%A8%8B&quot; title=&quot;#前端工程&quot;&gt;#前端工程&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23AI%E8%BE%85%E5%8A%A9%E7%BC%96%E7%A8%8B&quot; title=&quot;#AI辅助编程&quot;&gt;#AI辅助编程&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23NextJs&quot; title=&quot;#NextJs&quot;&gt;#NextJs&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99&quot; title=&quot;#静态网站&quot;&gt;#静态网站&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E8%87%AA%E5%AE%9A%E4%B9%89%E6%A1%86%E6%9E%B6&quot; title=&quot;#自定义框架&quot;&gt;#自定义框架&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96&quot; title=&quot;#性能优化&quot;&gt;#性能优化&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Vercel%E9%83%A8%E7%BD%B2&quot; title=&quot;#Vercel部署&quot;&gt;#Vercel部署&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;&lt;br /&gt;作者 Max Leiter 用 Claude Code（Fable 5 架构、Opus 实现）在约 3 小时内把个人博客从 Next.js 迁移到了一个为站点量身定制的静态构建框架。新方案把全站编译成纯 HTML，按需加载少量 Preact islands，结果页面体积、Lighthouse 分数、构建时间全面大幅优于 Next.js；代价是放弃了框架生态的无数隐性优化，后续维护与安全问题也由自己承担。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;&lt;br /&gt;1. 作者让 AI “按需造一个比 Next.js 更快的专属框架”，核心思路是只保留这个网站真正用到的 Next.js 功能，而不是继续背着整个框架跑。&lt;br /&gt;&lt;br /&gt;2. 新框架本质上是一个构建脚本：读取文章目录，用 React 在服务端渲染每条路由为静态 index.html，再按 Vercel Build Output API 输出，M2 MacBook 上热构建只要约 0.5 秒。&lt;br /&gt;&lt;br /&gt;3. 性能提升非常夸张：首页 JS 从 208 KB 降到 2.3 KB（约 -99%），移动端 LCP 从 2.4 秒降到 1.3 秒，整页重量从 1153 KB 降到 78 KB，Lighthouse 直接冲到 100 分。&lt;br /&gt;&lt;br /&gt;4. 博客文章页同样收益明显：HTML 更小、JS 只剩 2.3 KB，移动端 LCP 从 2.2 秒降到 1.1 秒，页面重量从 405 KB 降到 57 KB，软导航也改成更轻的 partial/prerender 方案。&lt;br /&gt;&lt;br /&gt;5. 交互没有消失，而是改成“islands”模式：桌面窗口管理器和命令面板用 Preact 组件按需水合，命令面板首次按 Cmd+K 才加载，Preact 兼容层只有约 7 KB，比 React 的 52 KB 轻很多。&lt;br /&gt;&lt;br /&gt;6. 构建链路保留原有体验：MDX 仍在构建期用同一套 remark/rehype 插件编译，shiki 在构建时同时输出两套主题的代码高亮，所以切换主题不需要额外 JS。&lt;br /&gt;&lt;br /&gt;7. AI 还写了一个“parity harness”，对旧站 101 条路由做快照，对比 head、正文和代码块，结果抓出了 8 篇未发布文章泄漏进 RSS、以及一张 404 的 OG 图这类真实问题。&lt;br /&gt;&lt;br /&gt;8. 整个实验花费约 669 美元，API 运行 8 小时 27 分，代码新增 20914 行、删除 2022 行，大约用掉 Claude Code 20x 订阅额度的 10%。&lt;br /&gt;&lt;br /&gt;9. 作者认为这种做法的意义在于“只 vendor 你真正需要的东西”：框架被压缩到约 5000 行，人和模型都更容易审查，也能减少供应链攻击面。&lt;br /&gt;&lt;br /&gt;10. 缺点也很直白：Next.js 里成百上千个小优化和边界处理 AI 未必都知道或能复现；没有现成的 agent 工具链集成；安全修复不再自动从上游来；而且网站一旦有问题，bug、安全、功能需求都归你自己管。&lt;br /&gt;&lt;br /&gt;11. 文章还记录了两个浏览器层面的坑：Chrome 的跨文档 view transitions 会因 head 里的外部 module script 静默跳过入场动画，所以 runtime 必须内联；Safari 对 Speculation Rules 的 feature detection 需要同时检查 API 支持和 document.prerendering。&lt;br /&gt;&lt;br /&gt;12. 作者最后判断：未来可能会出现更多“vendoring”和 agentic rewrite，也就是所谓“slop forks”；更激进的猜测是，框架本身可能会消亡，因为框架真正值钱的是沉淀下来的庞大知识，而这些知识未来可能被蒸馏成 skills 或某种新标准。&lt;br /&gt;&lt;br /&gt;URL：&lt;br /&gt;&lt;a href=&quot;https://maxleiter.com/blog/thank-u-next&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://maxleiter.com/blog/thank-u-next&quot;&gt;https://maxleiter.com/blog/thank-u-next&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://maxleiter.com/blog/thank-u-next&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Replacing Next.js with a vibe-coded &amp;quot;framework&amp;quot;&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Max Leiter&apos;s website&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;thank u, next | Max Leiter&quot; src=&quot;/static/https://cdn4.telesco.pe/file/kdFAJcXQWvQ2Hj_EO_jXHHu2J1wxQFmIrOIai3MRmDev1LDm5NObdkw9VgPPK3jmGCVtjEshJuSDFb44jM17_RzpPl7XeG0dWZdV94wpyMni3pCIfuAIuWxSLYgtTMV7Ai4WbjKhd5NSW55lby8LaqIfZBwyIvm2PC9DyUqNV4QLsd3jzBGVCYlpAVn5vz0B1xnj_Oba_VkRiPQXzEpyY2BDSpSd1ncfHuZ3I9QzKfPmtGh9n2T167qhPgO2L6qvP_smC8glhYfXnFX1AToNywb10Bs3dvKsv6o6tHSuD9y7THN-_qUuKx7BVOUTLvr7eCxAi6n1grRoYoCFt8B2Cw.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;thank u, next | Max Leiter&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Replacing Next.js with a vibe-coded &quot;framework&quot;&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《Vitest 5.0 正式发布》</title><link>https://channel.meo-ai.com/posts/704</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/704</guid><pubDate>Thu, 10 Sep 2026 23:19:53 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《Vitest 5.0 正式发布》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;br /&gt;&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23JavaScript&quot; title=&quot;#JavaScript&quot;&gt;#JavaScript&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Vitest&quot; title=&quot;#Vitest&quot;&gt;#Vitest&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%B5%8B%E8%AF%95%E6%A1%86%E6%9E%B6&quot; title=&quot;#测试框架&quot;&gt;#测试框架&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95&quot; title=&quot;#单元测试&quot;&gt;#单元测试&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96&quot; title=&quot;#性能优化&quot;&gt;#性能优化&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23BrowserMode&quot; title=&quot;#BrowserMode&quot;&gt;#BrowserMode&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23MockAPI&quot; title=&quot;#MockAPI&quot;&gt;#MockAPI&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%9F%BA%E5%87%86%E6%B5%8B%E8%AF%95&quot; title=&quot;#基准测试&quot;&gt;#基准测试&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%96%AD%E8%A8%80%E6%94%B9%E8%BF%9B&quot; title=&quot;#断言改进&quot;&gt;#断言改进&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E4%BB%A3%E7%A0%81%E8%A6%86%E7%9B%96%E7%8E%87&quot; title=&quot;#代码覆盖率&quot;&gt;#代码覆盖率&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;&lt;br /&gt;Vitest 5.0 于 2026 年 9 月 3 日正式发布，本次大版本以性能优化为核心，同时带来 Trace View 追踪视图、嵌套项目配置、&lt;code&gt;vi.when&lt;/code&gt; 条件 Mock、基准测试重写等多项重要更新，并默认启用更严格的断言与 &lt;code&gt;clearMocks&lt;/code&gt; 行为，要求 Vite &amp;gt;= 6.4.0 和 Node.js &amp;gt;= 22.12.0。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;&lt;br /&gt;1. &lt;b&gt;性能大幅提升&lt;/b&gt;：通过共享 Vite 服务器、稳定的文件系统模块缓存、减少主进程与 worker 往返、加速 vm 池与浏览器模式等优化，整体测试速度提升 8%–53%，大型项目（1,280 模块）运行时间从 7.24s 降至 5.83s。&lt;br /&gt;&lt;br /&gt;2. **新增 &lt;code&gt;vitest doctor&lt;/code&gt; 诊断工具**：自动运行替代配置并推荐更快的选项，同时默认输出性能提示，帮助用户发现配置瓶颈。&lt;br /&gt;&lt;b&gt;Browser Mode 内置 Trace View&lt;/b&gt;ew**：开启 &lt;code&gt;browser.traceView&lt;/code&gt; 后，可记录交互、断言和 DOM 快照，支持逐步回放测试过程，便于调试 CI 失败。&lt;br /&gt;&lt;b&gt;嵌套项目与配置继承&lt;/b&gt;继承**：内联项目默认继承根配置（无需 &lt;code&gt;extends: true&lt;/code&gt;），被引用的配置文件可声明自己的 &lt;code&gt;projects&lt;/code&gt;，支持多级嵌套结构。&lt;br /&gt;&lt;br /&gt;5. **新 API &lt;code&gt;vi.when&lt;/code&gt;**：支持按参数定义不同的 Mock 返回值，支持深度相等和 &lt;code&gt;expect.any()&lt;/code&gt; 等非对称匹配器，并可限制调用&lt;b&gt;基准测试 API 重写&lt;/b&gt;API 重写**：&lt;code&gt;bench&lt;/code&gt; 变为测试上下文 fixture，可在常规 &lt;code&gt;test()&lt;/code&gt; 中使用，支持 fixtures、生命周期钩子、重试和断言，结果可存储并与基线&lt;b&gt;定位器错误显示 ARIA 树&lt;/b&gt;ARIA 树**：浏览器模式下定位失败时，同时打印 ARIA 快照和 HTML，帮助快速理解 &lt;code&gt;getByRole&lt;/code&gt; 等查询的匹配逻辑；定位器默认启用严格模式。&lt;br /&gt;&lt;br /&gt;8. **Mock &lt;code&gt;Temporal&lt;/code&gt; API**：假计时器现在同时模拟 &lt;code&gt;Temporal&lt;/code&gt; 和 &lt;code&gt;Date&lt;/code&gt;，适用于 &lt;code&gt;vi.useFakeTimers()&lt;/code&gt; 和 &lt;code&gt;vi.setSystemTime()&lt;/code&gt;。&lt;br /&gt;&lt;br /&gt;9. **更严格的断言行为**：未 await 的异步断言（&lt;code&gt;resolves&lt;/code&gt;、&lt;code&gt;rejects&lt;/code&gt; 等）现在会导致测试失败；&lt;code&gt;expect.poll&lt;/code&gt; 超时后拒绝并支持 &lt;code&gt;AbortSignal&lt;/code&gt; 取消。&lt;br /&gt;&lt;br /&gt;10. **&lt;code&gt;clearMocks&lt;/code&gt; 默认启用**：每个测试前自动清除 Mock 调用历史，避免测试间&lt;b&gt;报告器统一输出目录&lt;/b&gt;。&lt;br /&gt;&lt;br /&gt;11. **报告器统一输出目录**：所有报告器输出集中到 &lt;code&gt;.vitest&lt;/code&gt; 目录，减少 &lt;code&gt;.gitignore&lt;/code&gt; 配置；HTML 报告器支持 &lt;code&gt;singleFile&lt;/code&gt; 选项生成单文件报告。&lt;br /&gt;&lt;br /&gt;12. **其他实用改进**：新增 &lt;code&gt;--repeats&lt;/code&gt; 选项重复运行测试以排查 flaky 测试；&lt;code&gt;injectCjsGlobals&lt;/code&gt; 可禁用 CJS 全局注入；覆盖率工具切换到维护中的 &lt;code&gt;@vitest/istanbuljs&lt;/code&gt; 包。&lt;br /&gt;&lt;br /&gt;13. **破坏性变更**：要求 Vite &amp;gt;= 6.4.0 和 Node.js &amp;gt;= 22.12.0，升级前建议查阅迁移指南。&lt;br /&gt;&lt;br /&gt;URL：&lt;br /&gt;&lt;a href=&quot;https://vitest.dev/blog/vitest-5&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://vitest.dev/blog/vitest-5&quot;&gt;https://vitest.dev/blog/vitest-5&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://vitest.dev/blog/vitest-5&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Vitest 5.0 Release Announcement&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;vitest.dev&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Announcing Vitest 5.0&quot; src=&quot;/static/https://cdn4.telesco.pe/file/pVrT7Df8_yhALcjdMSbUXlZgBUnkLka7DoWlX0BhkZtBrRqSCZrphE1n9cwrXrwmFQ9nnTNX5oynSmNrAb2xH-ppzjn20jcze0Kp2GlUi59p1y25xNY62U72jnzS_5aOP6cLJASvUASy5ktk4AHU_wNqd0UVHjwvVIyIizEBdw9f2sgrruYRqN2YTeWz_Im1nBEOJUsi0BsGznnVx9_ce1llIGPkmPJ1caONhNlcFeZ-7-wqNB3Am6YwsU2TLz9lcs2nOH1RU4dQrwCVWvIw5uVxbyXrnem9JCUArwtunI_9LIC5h-nYxLBiIInNtQeercqg-0I_v_eyvWNu4aCh2g.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;Announcing Vitest 5.0&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Vitest 5.0 Release Announcement&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《TanStack AI 进入 RC 阶段：从 humble chat() 到完整 AI 生态》</title><link>https://channel.meo-ai.com/posts/699</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/699</guid><pubDate>Fri, 28 Aug 2026 01:09:36 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《TanStack AI 进入 RC 阶段：从 humble chat() 到完整 AI 生态》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;br /&gt;&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91&quot; title=&quot;#前端开发&quot;&gt;#前端开发&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23AI%E6%A1%86%E6%9E%B6&quot; title=&quot;#AI框架&quot;&gt;#AI框架&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TanStack&quot; title=&quot;#TanStack&quot;&gt;#TanStack&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TypeScript&quot; title=&quot;#TypeScript&quot;&gt;#TypeScript&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%BC%80%E6%BA%90&quot; title=&quot;#开源&quot;&gt;#开源&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;&lt;br /&gt;TanStack AI 正式从早期原型迈入 RC（Release Candidate）阶段，标志着其从一个简单的 LLM 聊天方法，成长为覆盖聊天、媒体生成、MCP、沙箱、Agent 编排等全场景的 AI 开发框架。核心设计哲学是&quot;不锁定用户&quot;——在传输层、提供商、前后端技术栈上都保持中立，同时通过极致的类型安全和统一的 API 模式降低学习成本。项目由三人业余时间维护，完全开源，无商业路线图。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;&lt;br /&gt;1. 从小 chat() 到大生态 — 最初只有 4 个提供商和一个自定义协议，如今已支持 24+ 提供商，采用 AG-UI 官方协议（被 20+ Agent 框架跨语言支持），并扩展到媒体生成、MCP、沙箱、Agent Harness 等领域。&lt;br /&gt;&lt;br /&gt;2. 中间件是架构的核心超能力 — 几乎所有高级功能（持久化、沙箱 Agent、内存、遥测）都以中间件形式接入 chat() 方法，Durability 则通过适配器插入流式响应。Lazy Tool Calling 用一个布尔标志就能降低 Token 成本。&lt;br /&gt;&lt;br /&gt;3. 传输层零锁定 — 提供 SSE、WebSocket、HTTP Stream、Cap&apos;n Web 等原生传输原语，客户端通过自定义连接适配器消费流，让你对传输层有端到端的完全控制权。&lt;br /&gt;&lt;br /&gt;4. 一套 API 模式打遍所有模态 — 无论是文本生成、图像生成、视频生成、音频生成、转录还是实时音频，API 结构几乎完全相同。学一次模式，换适配器即可，不用学 20 套不同 API。&lt;br /&gt;&lt;br /&gt;5. 类型安全是 DNA 级别 — 不支持的模型选项、缺少必填属性、把某提供商专属工具传给不支持的模型……统统在编译期报错。目标是让你在再复杂的应用里也能自信上线。&lt;br /&gt;&lt;br /&gt;6. chat() 方法是全能核心 — 支持直接对话 LLM 和沙箱 Agent Harness；内置持久化与 Durability（刷新页面、切换对话后能从断点实时续流）；支持 Codex 等 Agent 在远程/本地沙箱中运行；还有 Code Mode（Agent 在 isolate 中写代码并执行，优化性能和成本）。&lt;br /&gt;&lt;br /&gt;7. 媒体生成是一等公民 — 实时音频、TTS、图像/视频/音频/音乐生成、转录等全部稳定可用，覆盖 100+ 模型。支持流式直传客户端或一次性生成，两者切换无缝。&lt;br /&gt;&lt;br /&gt;8. RAG 与记忆 — 通过 Cohere、OpenRouter 等提供商支持嵌入和重排序；支持所有主流厂商的 Agent 记忆，让 Agent 跨对话记住用户偏好和关键事实。&lt;br /&gt;&lt;br /&gt;9. 沙箱与 Agent Harness 不挑提供商 — 不强制你用 Daytona、E2B 或 Vercel Sandboxes，基础设施随你选。支持 Codex、Claude Code、Grok、OpenCode 等 20+ ACP 兼容 Agent，甚至能自建本地编码 Agent。&lt;br /&gt;&lt;br /&gt;10. MCP 支持带类型生成 — 不仅能连接外部 MCP 服务器，还能通过 CLI 为远程 MCP 暴露的工具生成类型，保持端到端类型安全。支持连接池和生命周期管理。&lt;br /&gt;&lt;br /&gt;11. 持久化与 Durability 是亮点 — 提供存储原语，你只需实现 Store 并通过一致性测试套件验证，接入持久化中间件后，用户一个月后回来也能从断点续聊。Durability 适配器可将流块持久化到内存、Durable Streams 等，用户重连后不会漏掉任何内容——全部配置约 20 行代码。&lt;br /&gt;&lt;br /&gt;12. 未来路线图 — 核心架构已锁定，接下来重点在 Agent 工作流与编排（并行运行、定时任务、复杂工作流协调），以及继续补齐提供商生态。完全开源，无商业 upsell，欢迎社区贡献。&lt;br /&gt;&lt;br /&gt;URL：&lt;br /&gt;&lt;a href=&quot;https://tanstack.com/blog/tanstack-ai-rc&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://tanstack.com/blog/tanstack-ai-rc&quot;&gt;https://tanstack.com/blog/tanstack-ai-rc&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://tanstack.com/blog/tanstack-ai-rc&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;TanStack AI enters the release candidate phase. The architecture is locked in, with 24 providers, AG-UI, media generation, MCP, sandboxes, and persistence.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;TanStack&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;TanStack AI Enters the RC Phase | TanStack Blog&quot; src=&quot;/static/https://cdn4.telesco.pe/file/WQe3VBUr3GnLhe6EisewlH9jLGS2iJFLD4PG_9iXtzUs5TXWOCOh3KflQsRIJZuCaI1VmCZ9qpHHjnQZLcRGxXi1g7pn3DcCYdySG16D0J4Eczr36dNOaEevbrfhhZ-SxbR9yC7_x8QmVqBM_CJrVrhHVRqLjaJHHjlzd-I5ll3yKgtVp7lcT2Gt5tyHMrq9dg_GFZNoIw8MlVhhvqfhMSPMDEthwebTk_81dcau-vGlFb-I7T9k3h8MQkbA6ywEUZm8jjRFF5Fpu6c9tHFdT6wtHanTVa5OL8N6Q9_5yZSfkHzDrvOKt7CitsNn_xFc1M-lx-uelUaDqoGXkwGlnQ.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;TanStack AI Enters the RC Phase | TanStack Blog&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;TanStack AI enters the release candidate phase. The architecture is locked in, with 24 providers, AG-UI, media generation, MCP, sandboxes, and persistence.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《Shadscan：shadcn 应用的确定性 UI 审计工具》</title><link>https://channel.meo-ai.com/posts/689</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/689</guid><pubDate>Mon, 03 Aug 2026 00:52:47 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《Shadscan：shadcn 应用的确定性 UI 审计工具》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23shadcn&quot; title=&quot;#shadcn&quot;&gt;#shadcn&lt;/a&gt;/ui &lt;a href=&quot;/search/result?q=%23React&quot; title=&quot;#React&quot;&gt;#React&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23UI%E5%AE%A1%E8%AE%A1&quot; title=&quot;#UI审计&quot;&gt;#UI审计&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CLI%E5%B7%A5%E5%85%B7&quot; title=&quot;#CLI工具&quot;&gt;#CLI工具&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%8F%AF%E8%AE%BF%E9%97%AE%E6%80%A7&quot; title=&quot;#可访问性&quot;&gt;#可访问性&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CI&quot; title=&quot;#CI&quot;&gt;#CI&lt;/a&gt;/CD &lt;a href=&quot;/search/result?q=%23AI_Agent&quot; title=&quot;#AI_Agent&quot;&gt;#AI_Agent&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;Shadscan 是一款面向 React/shadcn 应用的静态 UI 审计 CLI 工具，通过 59 条确定性规则从 Foundation、Interaction、States、Accessibility、Forms 和 Production Polish 六个维度为应用打分（0-100），无需启动应用或调用 AI 即可在终端和 CI 中完成审计。它支持生成 JSON 报告、AI Agent 修复指令（--prompt）和 GitHub Action 集成，适用于 Next.js、React Router、TanStack Start、Astro 等多种框架，并支持 monorepo 多包扫描。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1.  零侵入式审计：无需启动应用、修改文件或调用 AI 模型，纯静态分析即可给出可复现的评分结果，适合嵌入 CI 流水线。&lt;br /&gt;2.  六维评分体系：涵盖基础配置、交互体验、状态处理、无障碍访问、表单输入和生产级打磨，共 59 条规则，每条都附带证据和修复建议。&lt;br /&gt;3.  AI Agent 友好：支持 &lt;code&gt;--prompt&lt;/code&gt; 生成可直接粘贴给 Claude Code、Codex CLI 等编码 Agent 的修复计划，也支持 &lt;code&gt;--apply&lt;/code&gt; 直接唤起本地 Agent 执行。&lt;br /&gt;4.  多框架与 Monorepo 支持：自动识别 Next.js App/Pages Router、React Router、TanStack Start、Astro、Vite 等框架，智能区分应用包和库包，避免设计系统被误扣分。&lt;br /&gt;5.  GitHub Action 一键集成：提供复合 Action，可自动写评分到 Job Summary、设置分数门槛拦截 CI，还能持续更新跟踪 Issue 并嵌入 Agent 修复指令。&lt;br /&gt;&lt;br /&gt;URL：&lt;a href=&quot;https://www.shadscan.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://www.shadscan.com&quot;&gt;https://www.shadscan.com&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://shadscan.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Audit accessibility, UI states, navigation, forms, metadata, and production polish with deterministic evidence and agent-ready fixes.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;shadscan&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;shadscan: Audit shadcn apps for UI fundamentals&quot; src=&quot;/static/https://cdn4.telesco.pe/file/s3X0dADj_OhS1wkvvAJmaESI7LkBcJuQ7MeOH91FcBH_EvHzkLkYqoW6TszLu_CC73dCDHRKjOTu_gh-GjModLA6WnjiXzH6PpJJvmarWiRtiyWnSPzknNMBwbxtaB3DHBJ4-PushbJk3JKm-dbHfEfg42O-xK2U3QOfEQRZOUxwxDF66oMMk86lpgLIZwQjd8BP7ygVCIb53B5o1t-CeezevGbhf8pCOg7pfjsgcGOHGsPI9YYimmN3KZWnA4n_hgFNEb-BcbFLiKYWWu1Y5LokicKqZzUUpQWL7ymzKhd7RINZ4FPY2Pysr2n2LJrKNpNqs4m8iNvdx11q7ZsxtA.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;shadscan: Audit shadcn apps for UI fundamentals&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Audit accessibility, UI states, navigation, forms, metadata, and production polish with deterministic evidence and agent-ready fixes.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《前端框架基准测试平台》</title><link>https://channel.meo-ai.com/posts/683</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/683</guid><pubDate>Fri, 24 Jul 2026 15:50:48 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《前端框架基准测试平台》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Web%E5%BC%80%E5%8F%91&quot; title=&quot;#Web开发&quot;&gt;#Web开发&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23FrameworkBenchmarks&quot; title=&quot;#FrameworkBenchmarks&quot;&gt;#FrameworkBenchmarks&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23PerformanceTesting&quot; title=&quot;#PerformanceTesting&quot;&gt;#PerformanceTesting&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23JavaScriptFrameworks&quot; title=&quot;#JavaScriptFrameworks&quot;&gt;#JavaScriptFrameworks&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23React&quot; title=&quot;#React&quot;&gt;#React&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Vue&quot; title=&quot;#Vue&quot;&gt;#Vue&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Svelte&quot; title=&quot;#Svelte&quot;&gt;#Svelte&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23SolidJS&quot; title=&quot;#SolidJS&quot;&gt;#SolidJS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Preact&quot; title=&quot;#Preact&quot;&gt;#Preact&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Qwik&quot; title=&quot;#Qwik&quot;&gt;#Qwik&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Lit&quot; title=&quot;#Lit&quot;&gt;#Lit&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Angular&quot; title=&quot;#Angular&quot;&gt;#Angular&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23BundleSize&quot; title=&quot;#BundleSize&quot;&gt;#BundleSize&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23BuildTime&quot; title=&quot;#BuildTime&quot;&gt;#BuildTime&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23LighthouseScores&quot; title=&quot;#LighthouseScores&quot;&gt;#LighthouseScores&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23HMR&quot; title=&quot;#HMR&quot;&gt;#HMR&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23NPMStats&quot; title=&quot;#NPMStats&quot;&gt;#NPMStats&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23StackMatch&quot; title=&quot;#StackMatch&quot;&gt;#StackMatch&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;这是一个全自动化的前端框架基准测试平台，由开发者Alicia Sykes维护。项目用同一个天气应用在React、Vue、Svelte等12+个主流框架中实现，每晚自动跑分对比包体积、Lighthouse评分、加载速度、CPU内存占用、构建时间及HMR热更新速度。还整合了GitHub和NPM社区数据，并自带Stack Match智能推荐工具。所有原始数据开源可下载，帮你告别选型纠结！&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. 同一个天气应用，12+种框架实现——React、Vue、Svelte、Solid.js、Qwik、Lit等主流选手全部到场，公平对决&lt;br /&gt;2. 每晚自动跑分，数据新鲜出炉——包体积、Lighthouse性能分、FCP/LCP/TTI加载指标、CPU内存占用、构建时间、HMR速度全覆盖&lt;br /&gt;3. 社区数据一目了然——GitHub Stars、NPM月下载量、依赖数量、维护者人数、TS支持情况、许可证信息全整理好了&lt;br /&gt;4. 自带Stack Match智能推荐工具——填填项目偏好，就能get最适合你的框架，选型不再拍脑袋&lt;br /&gt;5. 完全开源透明——所有原始数据以JSON格式开放下载，测试用Playwright统一验证，结果可信可复现&lt;br /&gt;&lt;br /&gt;URL：[&lt;a href=&quot;https://framework-benchmarks.as93.net/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://framework-benchmarks.as93.net/&quot;&gt;https://framework-benchmarks.as93.net/&lt;/a&gt;](https://framework-benchmarks.as93.net/)&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://framework-benchmarks.as93.net/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;A comprehensive comparison of modern frontend frameworks&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Framework Benchmarks&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Framework Benchmarks&quot; src=&quot;/static/https://cdn4.telesco.pe/file/qhLWj8AtS4OzFQUYDRUEf53TdwKQp2CXn2B0is2aXhMWVg5Ybd1rk9SHZBeBXPsBmDTQee_uB1AgYNxHabLEURpmm2VKK90oC75jkdplMkFcjQu9d6wBNe55qHrUqQTLsGqT8F4lZkyOiD9_Tq9dM4JnB2Fx-UXVbAaj2djbtNFVCikYTgJ-1s-ypfyqnbe65kZmMu_KKF3JLkc86uenpnlIs3CORuQJp3CMmGxfZ8K-fTMWd6dDGKEhuFPCPluQLgTOrp8dB_GIYDapHDk6X_ONKMEk8f92gtSA-xtbFdWts6kZyUxMN-SQ913f-OHgxpkPlTfqrBerD6eAMJeIwg.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  
  &lt;div class=&quot;link_preview_description&quot;&gt;A comprehensive comparison of modern frontend frameworks&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《React Suspense 边界触发机制与实战用法》</title><link>https://channel.meo-ai.com/posts/676</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/676</guid><pubDate>Mon, 13 Jul 2026 16:28:05 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《React Suspense 边界触发机制与实战用法》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23React&quot; title=&quot;#React&quot;&gt;#React&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Suspense&quot; title=&quot;#Suspense&quot;&gt;#Suspense&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23LazyLoading&quot; title=&quot;#LazyLoading&quot;&gt;#LazyLoading&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23StreamingRendering&quot; title=&quot;#StreamingRendering&quot;&gt;#StreamingRendering&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23ViewTransition&quot; title=&quot;#ViewTransition&quot;&gt;#ViewTransition&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;React Suspense 边界在组件树中充当&quot;加载守门员&quot;，当子组件通过 &lt;code&gt;lazy&lt;/code&gt; 懒加载、用 &lt;code&gt;use&lt;/code&gt; 读取 Promise、或加载带 &lt;code&gt;precedence&lt;/code&gt; 的样式表时，边界会优雅地切换到 fallback UI。它与流式服务端渲染、ViewTransition 动画深度整合，还能配合 &lt;code&gt;startTransition&lt;/code&gt; 避免已显示内容被强制替换，让加载体验从&quot;闪屏&quot;变成&quot;渐进式揭晓&quot;。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. Suspense 不是万能检测器，它只捕获渲染阶段的挂起行为——Effect 或事件里的数据请求不会触发边界，得用 &lt;code&gt;use&lt;/code&gt; 读取 Promise 或框架封装才行&lt;br /&gt;2. 七大触发场景一览：懒加载组件代码、Promise 数据读取、带 precedence 的样式表、流式 SSR 的大块 HTML、ViewTransition 期间的字体与图片加载、以及实验性的 &lt;code&gt;defer&lt;/code&gt; CPU 密集型渲染&lt;br /&gt;3. 嵌套边界能打造&quot;加载阶梯&quot;：外层骨架屏先撑住，内层内容逐层揭晓，避免整页白屏，还能让设计师的 loading 状态稿直接落地&lt;br /&gt;4. &lt;code&gt;startTransition&lt;/code&gt; 是保屏神器：导航更新时标记为非紧急，React 会&quot;忍一忍&quot;新内容的挂起，不让已显示的 Layout 被 fallback 粗暴顶掉&lt;br /&gt;5. 配合 &lt;code&gt;key&lt;/code&gt; 重置边界：切到不同用户资料时，给边界加 key 能让 React 识别为新内容，自动清掉旧状态，避免&quot;张冠李戴&quot;的残留显示&lt;br /&gt;6. 服务端容错兜底：流式 SSR 里组件抛错不会崩掉整个渲染，React 会找到最近的 Suspense 边界，把 fallback 塞进 HTML，客户端再尝试 hydrate&lt;br /&gt;7. 资源协调全家桶：ViewTransition 动画期间，Suspense 能同时等待数据、样式、字体、图片全部就位，让过渡动画开场就是完整画面，告别&quot;先丑后美&quot;的闪烁&lt;br /&gt;&lt;br /&gt;URL：&lt;a href=&quot;https://react.dev/reference/react/Suspense#what-activates-a-suspense-boundary&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://react.dev/reference/react/Suspense#what-activates-a-suspense-boundary&quot;&gt;https://react.dev/reference/react/Suspense#what-activates-a-suspense-boundary&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://react.dev/reference/react/Suspense&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;The library for web and native user interfaces&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;react.dev&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Suspense – React&quot; src=&quot;/static/https://cdn4.telesco.pe/file/iP28eRf3liYQZ8iJP6JAWUyatGr91UWqtAIkknd24wr-zUNMCRhxJN57YuqW3zCSMXsqHlSHElPGUupN5wjloLV7ec9qv4Ydvenhepe2UiWvuoI53geDAB0uFppQ0u3bKapIUuBSy6w2kFcTrp8j9OXH2qFdX78q1d0kzXp1UmL055e8dPMJfKnRUOCctRMZWt4E4s5rSuTWqnXIpprqAsEHC8y-4W1R2PNgULOn24ry5bqgQq-HnFIx4Z8kb3JSl-sTHxudcGhHBUQedBg_rVB4j3gV09Qg5D3oK5ZFcVk1NRyU6bjpa-iYx1kn1R2iiA_UQXzXCkBnBUTMgFTh4w.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;Suspense – React&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;The library for web and native user interfaces&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《TanStack Start 心智模型：给 Next.js 开发者的迁移指南》</title><link>https://channel.meo-ai.com/posts/667</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/667</guid><pubDate>Sun, 21 Jun 2026 09:59:34 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《TanStack Start 心智模型：给 Next.js 开发者的迁移指南》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TanStack_Start&quot; title=&quot;#TanStack_Start&quot;&gt;#TanStack_Start&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Next&quot; title=&quot;#Next&quot;&gt;#Next&lt;/a&gt;.js &lt;a href=&quot;/search/result?q=%23React_Router&quot; title=&quot;#React_Router&quot;&gt;#React_Router&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TypeScript&quot; title=&quot;#TypeScript&quot;&gt;#TypeScript&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%85%A8%E6%A0%88%E6%A1%86%E6%9E%B6&quot; title=&quot;#全栈框架&quot;&gt;#全栈框架&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;文章从一位资深 Next.js 开发者的视角，系统对比了 TanStack Start 与 Next.js App Router 的核心差异。核心心智模型翻转在于：Next.js 默认服务端优先、隐式约定驱动；TanStack Start 默认同构 React、显式声明边界。作者逐一对比了路由类型系统、数据获取、服务端函数、缓存策略、渲染模式、认证防护等关键维度，指出 TanStack Start 更适合高交互 SaaS 类应用，而 Next.js 在内容型站点和成熟生态上仍有优势。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. 心智模型大翻转：Next.js 默认组件跑在服务端，需要显式标注 &lt;code&gt;&quot;use client&quot;&lt;/code&gt; 才能上客户端；TanStack Start 默认组件同构（服务端+客户端都能跑），只有需要纯服务端逻辑时才用 &lt;code&gt;createServerFn&lt;/code&gt; 显式声明，边界更清晰，不容易踩坑&lt;br /&gt;2. 路由类型系统碾压：Next.js 的文件路由是约定驱动，TypeScript 对参数无能为力；TanStack Router 会在构建时自动生成完全类型化的路由树，路径参数、搜索参数、loader 返回值全部类型推断，拼写错误直接编译报错&lt;br /&gt;3. 数据获取的&quot;陷阱&quot;：Next.js 的 Server Component 只在服务端执行，天然安全；TanStack Start 的 loader 是同构的——SSR 时跑在服务端，客户端导航时跑在浏览器里，所以直接写数据库查询会泄露环境变量，必须用 &lt;code&gt;createServerFn&lt;/code&gt; 包裹&lt;br /&gt;4. 缓存哲学更简单：Next.js 历史上有复杂的四层缓存模型，v16 改为 &lt;code&gt;&apos;use cache&apos;&lt;/code&gt; 显式 opt-in；TanStack Start 只有路由 loader 缓存 + 可选的 TanStack Query，没有隐式魔法，哪里缓存、哪里失效一目了然&lt;br /&gt;5. 认证防护双层设计：&lt;code&gt;beforeLoad&lt;/code&gt; 负责 UI 层面的重定向（用户体验），&lt;code&gt;createServerFn&lt;/code&gt; 中间件负责数据层面的安全校验（真正的安全边界），两层职责分离，比 Next.js 把 edge middleware 和 action 内校验混在一起的方案更不容易遗漏&lt;br /&gt;6. Remix 与 RSC 现状：TanStack Start 的 RSC 支持仍处于实验阶段，实现方式也与 Next.js 不同（更像客户端获取 Flight payload 后组装），如果生产环境重度依赖 RSC，Next.js 目前更成熟&lt;br /&gt;7. 选型建议：内容型/营销站点选 Next.js；高交互 SaaS 后台、需要强类型安全、讨厌隐式缓存魔法的团队，TanStack Start 值得认真评估&lt;br /&gt;&lt;br /&gt;URL：&lt;br /&gt;&lt;a href=&quot;https://www.adarsha.dev/blog/tanstack-mental-model-for-nextjs-developers&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://www.adarsha.dev/blog/tanstack-mental-model-for-nextjs-developers&quot;&gt;https://www.adarsha.dev/blog/tanstack-mental-model-for-nextjs-developers&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://adarsha.dev/blog/tanstack-mental-model-for-nextjs-developers&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Understand TanStack Start from a Next.js developer’s perspective: its router-first architecture, explicit server boundaries, typed routing, caching, rendering, and server functions.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Adarsha Acharya&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;TanStack Start: A Mental Model for Next.js Developers&quot; src=&quot;/static/https://cdn4.telesco.pe/file/Ja3_PLOYCdk_ef6YOzQimki-laVzYQKPWscgPmZVkfjz7dJvyVktlBPYjr0fz-r-XAbor1EWUAJJNcyggHiG0FZZe0VUxcREOqzVZqtUI6kwB771dWmk4swUzl_Oz5TzIpz-FxNLy2vT86ybEurfETg2ReU9ZeESH6jXHKw3Dg6KNLgpxKWmJ0lfkgXKP8Biom9MzNlGHfAiKlVipcNSSmzTWh1lC-147ID8LoseQdKaMtmwxRFIeQZJrnSFR0fiEmHe0F6AmO3fO4nx3yS42vROCGF4EcbrzO6QCrIt9g84djfexf-9do1w-T1zmrPwV_yxzAOwF3OglTbp_karFA.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;TanStack Start: A Mental Model for Next.js Developers&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Understand TanStack Start from a Next.js developer’s perspective: its router-first architecture, explicit server boundaries, typed routing, caching, rendering, and server functions.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《React Router v8 发布：最&quot;无聊&quot;的一次大版本升级》</title><link>https://channel.meo-ai.com/posts/666</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/666</guid><pubDate>Sun, 21 Jun 2026 08:48:50 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《React Router v8 发布：最&quot;无聊&quot;的一次大版本升级》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23React_Router&quot; title=&quot;#React_Router&quot;&gt;#React_Router&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Remix&quot; title=&quot;#Remix&quot;&gt;#Remix&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Vite&quot; title=&quot;#Vite&quot;&gt;#Vite&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23React19&quot; title=&quot;#React19&quot;&gt;#React19&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23SPA_SSR&quot; title=&quot;#SPA_SSR&quot;&gt;#SPA_SSR&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%A1%86%E6%9E%B6%E5%8D%87%E7%BA%A7&quot; title=&quot;#框架升级&quot;&gt;#框架升级&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;React Router v8 正式发布，主打&quot;最无聊的大版本升级&quot;理念。v7 引入的 Framework Mode 已成熟，v8 在此基础上将多个 future flags 转正为默认行为，带来 40+ 项改进，包括中间件增强、路由模块拆分、类型安全的 href、Link 遮罩等。破坏性变更极少，升级路径平滑。团队同时宣布采用年度大版本发布节奏，并正式将 React Router v6 和 Remix v2 标记为生命周期结束（EOL）。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. 升级超省心：v8 的破坏性变更极少，大部分改动在 v7 中就能提前完成，团队的目标是&quot;让大版本升级尽可能无聊&quot;&lt;br /&gt;2. 基线要求更新：最低支持 Node 22.22+、React 19.2.7+、Vite 7+，且改为纯 ESM 发布，tsconfig 目标更新至 ES2022&lt;br /&gt;3. Future Flags 转正：v8 移除了多个 future flags，其对应功能现在默认启用，比如中间件、透传请求、Vite Environment API 支持等&lt;br /&gt;4. Remix 走向新方向：Remix v0.x-2.x 的功能已合并回 React Router，Remix 3 将转型为真正的全栈零依赖 JS 框架，与 React Router 并行发展&lt;br /&gt;5. 年度发布节奏：从 v8 开始采用每年一次大版本发布，让升级更可预测、更稳定&lt;br /&gt;6. v6/v7 生命周期：v6 和 Remix v2 正式 EOL，不再接收安全更新；v7 继续接收安全补丁&lt;br /&gt;&lt;br /&gt;URL：&lt;br /&gt;&lt;a href=&quot;https://remix.run/blog/react-router-v8&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://remix.run/blog/react-router-v8&quot;&gt;https://remix.run/blog/react-router-v8&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://remix.run/blog/react-router-v8&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;React Router v8 is available now.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;remix.run&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;React Router v8&quot; src=&quot;/static/https://cdn4.telesco.pe/file/spAB9WMv1R2jc0yUDNKpBSo2kkzNekzbhKlhZQMlGXdoF19Yksj4x8eroj1oQrdimTd312ZI0sejk7H9-J9M1UeKaLQsLJw-RTSmF5yjxQr6dK9W3cuFkTzsVDAABR8_VTxbOF56Ij_fuZF-27gkkgM3I2meCzsKHuwIk8aDMk4aIbOszBgCcLO3CPooMcCyTJCbLlL0yeENiI9Po6qnv2EUSi_EcPxC3jyp_fmawCrDV9pVey93yXYv7SQO7NYkXyforBPgRKcTNbgHbG8NVzq1xwkDf4yy4aUFRaUcAe6AczappwewUGzl4kjdzfQoMyVRXqyLeSBfcaSWVtGbhw.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;React Router v8&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;React Router v8 is available now.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《为什么我放弃Next.js和RSC，回归传统SPA与独立后端》</title><link>https://channel.meo-ai.com/posts/654</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/654</guid><pubDate>Mon, 01 Jun 2026 00:06:54 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《为什么我放弃Next.js和RSC，回归传统SPA与独立后端》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Web%E5%BC%80%E5%8F%91&quot; title=&quot;#Web开发&quot;&gt;#Web开发&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23React&quot; title=&quot;#React&quot;&gt;#React&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23NextJS&quot; title=&quot;#NextJS&quot;&gt;#NextJS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23React_Server_Components&quot; title=&quot;#React_Server_Components&quot;&gt;#React_Server_Components&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23SPA&quot; title=&quot;#SPA&quot;&gt;#SPA&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1&quot; title=&quot;#架构设计&quot;&gt;#架构设计&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%AE%89%E5%85%A8&quot; title=&quot;#安全&quot;&gt;#安全&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TanStack&quot; title=&quot;#TanStack&quot;&gt;#TanStack&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Hono&quot; title=&quot;#Hono&quot;&gt;#Hono&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;&lt;br /&gt;作者回顾了自己从Next.js忠实用户到拥抱App Router/RSC，最终回归传统SPA+独立后端的完整历程。文章深入分析了RSC架构带来的心智负担、序列化开销和安全风险，结合2025-2026年多起严重CVE漏洞，论证了将渲染框架与安全边界解耦的必要性，并分享了当前基于React Router+Vite+Hono的简洁技术栈。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;&lt;br /&gt;1. &lt;b&gt;Next.js的黄金时代&lt;/b&gt;：Pages Router时期心智模型清晰，服务端/客户端边界一目了然，文件路由简单易懂，部署零成本&lt;br /&gt;2. &lt;b&gt;App Router带来的混乱&lt;/b&gt;：Server/Client Component区分成为负担，&quot;use client&quot;指令传染性强，开发/构建/生产环境缓存行为不一致，服务端客户端边界变得不可见&lt;br /&gt;3. &lt;b&gt;安全漏洞敲响警钟&lt;/b&gt;：2025年CVE-2025-29927中间件绕过(CVSS 9.1)、2025年底RSC核心包10分满分漏洞CVE-2025-55182、2026年初多起Server Function DoS漏洞，攻击面集中在服务端渲染和反序列化环节&lt;br /&gt;4. &lt;b&gt;TanStack并非避风港&lt;/b&gt;：2026年5月TanStack遭遇供应链攻击，42个包被投毒，说明换框架不能免疫风险，减少依赖面才是关键&lt;br /&gt;5. &lt;b&gt;序列化是根本原因&lt;/b&gt;：RSC的&quot;无缝&quot;本质是分布式系统的序列化问题，函数、类实例、错误栈都无法透明穿越边界，反序列化不可信输入成为高危攻击面&lt;br /&gt;6. &lt;b&gt;当前架构选择&lt;/b&gt;：React Router框架模式+Vite纯SPA（仅营销页预渲染）+ Hono独立后端，API通过显式HTTP调用，无RSC负载，无服务端序列化&lt;br /&gt;7. &lt;b&gt;安全设计原则&lt;/b&gt;：认证授权在API层强制执行，前端中间件只做UX跳转，CORS/CSRF/验证码/限流全部在可控的后端实现，与渲染框架彻底解耦&lt;br /&gt;8. &lt;b&gt;核心收获&lt;/b&gt;：架构清晰可指认、无序列化税、前端攻击面趋近于零、后端语言自由选型、依赖更少爆炸半径更小——&quot;无聊&quot;在软件工程里是赞美&lt;br /&gt;&lt;br /&gt;URL：&lt;a href=&quot;https://dev.to/zulikram/why-i-walked-back-from-nextjs-and-rsc-to-a-plain-spa-and-a-separate-backend-4k8p&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://dev.to/zulikram/why-i-walked-back-from-nextjs-and-rsc-to-a-plain-spa-and-a-separate-backend-4k8p&quot;&gt;https://dev.to/zulikram/why-i-walked-back-from-nextjs-and-rsc-to-a-plain-spa-and-a-separate-backend-4k8p&lt;/a&gt;</content:encoded></item><item><title>《AI 正在重演前端的&quot;失落十年&quot;吗？》</title><link>https://channel.meo-ai.com/posts/651</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/651</guid><pubDate>Sat, 30 May 2026 00:35:22 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《AI 正在重演前端的&quot;失落十年&quot;吗？》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23AI%E7%BC%96%E7%A8%8B&quot; title=&quot;#AI编程&quot;&gt;#AI编程&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E8%81%8C%E4%B8%9A%E5%8F%91%E5%B1%95&quot; title=&quot;#职业发展&quot;&gt;#职业发展&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B&quot; title=&quot;#软件工程&quot;&gt;#软件工程&lt;/a&gt; # craftsmanship &lt;a href=&quot;/search/result?q=%23Bauhaus&quot; title=&quot;#Bauhaus&quot;&gt;#Bauhaus&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;作者将 AI 对编程行业的冲击与前十年 JavaScript 框架对前端的&quot;去技能化&quot;（deskilling）进行类比。框架把浏览器当作编译目标，让通用开发者无需理解 HTML 语义、无障碍、性能等底层知识就能&quot;搞定&quot;前端；AI 编码则进一步将手工写代码的技能消解为&quot;操作半熟练工人使用的技术&quot;。文章认为这降低了从业者议价能力、牺牲了质量，但也承认这是效率提升和抽象层级升高的必然趋势。作者借用 Bauhaus 运动的启示——不是对抗工业化，而是让工匠与工厂协作、以用户为中心重新设计——呼吁在 AI 时代依然需要&quot;懂材料&quot;的人，同时指出商业成功与软件质量本就很少相关，真正的 craft 只会成为更小的切片。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. &quot;去技能化&quot;正在从特定领域扩散到整个编程行业：框架让前端从专精技能变成通用技能，AI 让编程本身面临同样命运&lt;br /&gt;2. 现代&quot;全栈开发者&quot;往往不是前后端都精通，而是能用框架两边都糊弄的通才，企业因此获得成本节省和人员灵活调配&lt;br /&gt;3. AI 编码是&quot;非确定性抽象&quot;——不像编译器那样稳定，输入或模型的微小变化会导致截然不同的结果，更像是&quot;不会学习的初级工程师&quot;&lt;br /&gt;4. LLM 是 Stack Overflow 复制粘贴的终极进化：让懂行的人更快，让不懂的人也能凑出&quot;能跑&quot;的东西，但抽象泄漏时依然需要有人深入理解并修复&lt;br /&gt;5. 商业成功与软件质量几乎不相关，糟糕的网站对转化率影响有限，且&quot;没人因为选了 React 而被解雇&quot;&lt;br /&gt;6. Bauhaus 运动的启示：不复古也不对抗工业化，而是让设计师回到工坊、与材料共事，最终产出兼顾批量生产和用户体验的设计&lt;br /&gt;7. 前端 craft 不会消失，但会成为更小的切片；就像字体设计不再是全职工作、塑料垃圾泛滥但好工业设计依然存在&lt;br /&gt;8. 快速迭代和 MVP 有其价值，但需要知道自己在验证什么；性能和无障碍等基础如果一开始没做对，后期很难补救&lt;br /&gt;9. AI 只是工具箱里的又一件工具，但 hype 周期内我们会看到丑陋的代码、破碎的沟通和借 AI 之名裁员&lt;br /&gt;10. 作者自己的框架 Mastro 倡导&quot;从简单栈开始、后续再添加功能&quot;，反对先上重型框架再试图优化&lt;br /&gt;&lt;br /&gt;URL：&lt;a href=&quot;https://mastrojs.github.io/blog/2026-05-23-is-AI-causing-a-repeat-of-frontends-lost-decade/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://mastrojs.github.io/blog/2026-05-23-is-AI-causing-a-repeat-of-frontends-lost-decade/&quot;&gt;https://mastrojs.github.io/blog/2026-05-23-is-AI-causing-a-repeat-of-frontends-lost-decade/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://mastrojs.github.io/blog/2026-05-23-is-AI-causing-a-repeat-of-frontends-lost-decade&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;AI is doing to programming what framework-brain did to the frontend before. Deskilling, or just working at a higher level of abstraction?&quot;&gt;
  &lt;i class=&quot;link_preview_right_image&quot; style=&quot;background-image:url(&apos;https://cdn4.telesco.pe/file/K8oOalOHPP6DFA4dygIB3iDXcnbcZONY4s0tjXmJAEXa_RZmA2nl13-4QnSeOZCVAnr5OILRQVBTwANuSO0gcuDHVfGS2R0D7DoVvGQ6wstl1NUq9VMaQof91y9QVEbs3tCfNxDyT_qUwGLiPz6wVEJ2eFYLpTlUTwv4MPQ9GyEHG0aKdQe0e7G0NZhDYs7mwXHf_-S1pNgVPt0OvdeIN4kyvzj2Tk6Hg16fe9aKqC7ilVilztUhnim9_NKhgXabz-pQm7Ndytpa8CjiHvyjYhv2Fk-G0FnxoQKaaQxoHsOJAZT5H-uVWYO2cBSj3crxFpc4CZLaLmR_8LC98bDq8g.jpg&apos;)&quot;&gt;&lt;/i&gt;
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;mastrojs.github.io&lt;/div&gt;
  
  &lt;div class=&quot;link_preview_title&quot;&gt;Is AI causing a repeat of Frontend’s Lost Decade? | Mastro Blog&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;AI is doing to programming what framework-brain did to the frontend before. Deskilling, or just working at a higher level of abstraction?&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《用 Web Components 构建框架无关的设计系统（实践指南）》</title><link>https://channel.meo-ai.com/posts/650</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/650</guid><pubDate>Sat, 30 May 2026 00:08:24 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《用 Web Components 构建框架无关的设计系统（实践指南）》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23WebComponents&quot; title=&quot;#WebComponents&quot;&gt;#WebComponents&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E8%AE%BE%E8%AE%A1%E7%B3%BB%E7%BB%9F&quot; title=&quot;#设计系统&quot;&gt;#设计系统&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Elena&quot; title=&quot;#Elena&quot;&gt;#Elena&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23VitePress&quot; title=&quot;#VitePress&quot;&gt;#VitePress&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CSS&quot; title=&quot;#CSS&quot;&gt;#CSS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%97%A0%E9%9A%9C%E7%A2%8D&quot; title=&quot;#无障碍&quot;&gt;#无障碍&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;本文是一份超详细的实战教程，手把手教你用 Web Components（通过 Elena 库）和 VitePress 搭建一个框架无关、可发布的设计系统。核心思路是&quot;最低可行层级&quot;——用 web 标准直接写原子组件，避免框架锁定；组件保持&quot;最笨&quot;状态，把复杂业务逻辑留给应用层。文章涵盖 monorepo 结构搭建、Elena 组件脚手架、条件渲染、&lt;a href=&quot;https://t.me/scope&quot; target=&quot;_blank&quot; title=&quot;@scope&quot;&gt;@scope&lt;/a&gt; 样式隔离、CSS 自定义属性主题化，以及通过 JSDoc + Custom Elements Manifest 自动生成 Props 表格的文档工作流。最终产出的是一个可独立发布的组件包 + 可部署的静态文档站。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. 设计系统从第一天就绑定特定框架（如 React）是&quot;令人费解的&quot;——web 标准组件才是可移植、可组合、经得起时间考验的选择&lt;br /&gt;2. Elena 是&quot;刚好够用的抽象&quot;：处理跨框架的 prop/attribute 同步、事件委托等脏活，但不掩盖 web 标准本质&lt;br /&gt;3. 组件应保持&quot;最笨&quot;——被告知显式状态和内容的声明式组件，比内置复杂状态管理的&quot;聪明&quot;组件更健康&lt;br /&gt;4. 设计决策应该在代码中而非 Figma 中完成：现代色彩空间、相对单位、对数排版比例等，设计工具只能模拟浏览器的很小一部分能力&lt;br /&gt;5. 用 &lt;a href=&quot;https://t.me/scope&quot; target=&quot;_blank&quot; title=&quot;@scope&quot;&gt;@scope&lt;/a&gt; 实现样式隔离 + 组件级 CSS 自定义属性作为&quot;最终层 token&quot;，既保证封装又有主题化回退&lt;br /&gt;6. JSDoc 注释即文档：Elena 自动生成 custom-elements.json，VitePress 通过 data loader 直接渲染 PropsTable 和 ComponentHeader&lt;br /&gt;7. 文档即测试场：在 VitePress 中实时预览组件，确保跨框架可移植性；开发时 concurrent 运行 watch + docs:dev 实现热更新&lt;br /&gt;8. 条件渲染示例：同一个组件通过 href prop 自动切换 button/a 标签，CTA 链接按钮的常见需求也能语义化实现&lt;br /&gt;&lt;br /&gt;URL：&lt;a href=&quot;https://piccalil.li/blog/framework-agnostic-design-systems-part-1/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://piccalil.li/blog/framework-agnostic-design-systems-part-1/&quot;&gt;https://piccalil.li/blog/framework-agnostic-design-systems-part-1/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://piccalil.li/blog/framework-agnostic-design-systems-part-1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Baking framework lock-in into your design system from day one is a recipe for obsolescence. Component documentation is often tedious and out-of-sync with development. Let’s build a documentation-first, framework-agnostic component library using web standards…&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Piccalilli&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Framework-agnostic design systems: a practical approach to web components&quot; src=&quot;/static/https://cdn4.telesco.pe/file/c5MKnRW_4RxCmUAd723zvjHh4L-nLO0G5lNM1Rh-VVrBb9er230bEw9ZYF4VsuuvxN0BVi0YyOXkUFWq_AH9w49QAI6VMwvxXkDpdbB0gIDD7JCyX5AuJ-Ny1v7brQ_shLRPNX7gf8Ay5l_SATf0p3zFlSNh8IGQdLmviOU5QsWPjJRhu8kA0x5HjeMOkTFPFRTGasUhlk6IDbOVvfbHOqbHmEPWU6n08YbW6SS-PHyBD2nmeqUrbZ2UZL9gZQztNv7Dn7GUuYzet9bvQl3-ds-AwqZZkw1-Bv37QOg9VeUCezZYVhY90R8b3s7XeNV8n08Fs1UfIk9tOVbATrIxUQ.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;Framework-agnostic design systems: a practical approach to web components&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Baking framework lock-in into your design system from day one is a recipe for obsolescence. Component documentation is often tedious and out-of-sync with development. Let’s build a documentation-first, framework-agnostic component library using web standards…&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《Orval：从OpenAPI规范自动生成类型安全客户端代码》</title><link>https://channel.meo-ai.com/posts/635</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/635</guid><pubDate>Sun, 17 May 2026 10:15:08 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《Orval：从OpenAPI规范自动生成类型安全客户端代码》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%85%A8%E6%A0%88&quot; title=&quot;#全栈&quot;&gt;#全栈&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23OpenAPI&quot; title=&quot;#OpenAPI&quot;&gt;#OpenAPI&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TypeScript&quot; title=&quot;#TypeScript&quot;&gt;#TypeScript&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CodeGeneration&quot; title=&quot;#CodeGeneration&quot;&gt;#CodeGeneration&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23ReactQuery&quot; title=&quot;#ReactQuery&quot;&gt;#ReactQuery&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Swagger&quot; title=&quot;#Swagger&quot;&gt;#Swagger&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23APIClient&quot; title=&quot;#APIClient&quot;&gt;#APIClient&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;Orval 是一个代码生成工具，能读取 OpenAPI v3 或 Swagger v2 规范（支持 yaml 和 json 格式），自动生成带完整 TypeScript 类型签名的客户端代码。它支持 React Query、SWR、Vue Query、Svelte Query、Solid Query、Angular、Hono、Zod、原生 fetch 和 MCP 等多种框架与库，同时还能生成模型、请求函数、Hooks 和 Mock 数据。项目提供在线 Playground 快速体验，开发时使用 Bun 构建，社区活跃且有赞助支持。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. Orval 的核心能力是从 OpenAPI / Swagger 文档一键生成类型安全的 TS 客户端，告别手写接口代码的繁琐工作&lt;br /&gt;2. 生态支持非常全面，覆盖了 React、Vue、Svelte、Solid、Angular 等主流前端框架，还有 React Query、SWR 等数据获取方案&lt;br /&gt;3. 不只是生成请求函数，还能顺带产出数据模型（Models）、React Hooks、以及用于测试的 Mock 数据，一条龙服务&lt;br /&gt;4. 项目内置了在线 Playground，不用安装就能上手体验，对新手和想快速验证的同学很友好&lt;br /&gt;5. 开发侧使用 Bun 作为包管理工具，测试流程完善，包含单元测试、快照测试和 CLI 验证&lt;br /&gt;&lt;br /&gt;URL：&lt;a href=&quot;https://github.com/orval-labs/orval&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://github.com/orval-labs/orval&quot;&gt;https://github.com/orval-labs/orval&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://github.com/orval-labs/orval&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;orval is able to generate client with appropriate type-signatures (TypeScript) from any valid OpenAPI v3 or Swagger v2 specification, either in yaml or json formats. 🍺 - orval-labs/orval&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;GitHub&lt;/div&gt;
  
  &lt;div class=&quot;link_preview_title&quot;&gt;GitHub - orval-labs/orval: orval is able to generate client with appropriate type-signatures (TypeScript) from any valid OpenAPI…&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;orval is able to generate client with appropriate type-signatures (TypeScript) from any valid OpenAPI v3 or Swagger v2 specification, either in yaml or json formats. &lt;i class=&quot;emoji&quot; style=&quot;background-image:url(&apos;//telegram.org/img/emoji/40/F09F8DBA.png&apos;)&quot;&gt;&lt;b&gt;🍺&lt;/b&gt;&lt;/i&gt; - orval-labs/orval&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《用TanStack_Start构建博客（上篇）》</title><link>https://channel.meo-ai.com/posts/601</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/601</guid><pubDate>Sat, 18 Apr 2026 08:38:00 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《用TanStack_Start构建博客（上篇）》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TanStack_Start&quot; title=&quot;#TanStack_Start&quot;&gt;#TanStack_Start&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TanStack_Router&quot; title=&quot;#TanStack_Router&quot;&gt;#TanStack_Router&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Server_Functions&quot; title=&quot;#Server_Functions&quot;&gt;#Server_Functions&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E9%9D%99%E6%80%81%E9%A2%84%E6%B8%B2%E6%9F%93&quot; title=&quot;#静态预渲染&quot;&gt;#静态预渲染&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Markdown%E5%8D%9A%E5%AE%A2&quot; title=&quot;#Markdown博客&quot;&gt;#Markdown博客&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E4%BB%A3%E7%A0%81%E9%AB%98%E4%BA%AE&quot; title=&quot;#代码高亮&quot;&gt;#代码高亮&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;本文通过实战案例演示如何使用 TanStack Start 框架构建一个 Markdown 博客系统。文章重点介绍了 Server Functions 解决同构加载器无法访问文件系统的问题、动态路由参数处理、以及使用 markdown-it 和 Shiki 实现带行号的高亮代码块，为开发者提供了完整的技术实现路径。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;- TanStack Start 是基于 TanStack Router 的轻量级服务端框架，支持 SSR、API 端点和 Server Functions&lt;br /&gt;- 使用 &lt;code&gt;import.meta.glob&lt;/code&gt; 动态扫描 Markdown 文件，配合 &lt;code&gt;gray-matter&lt;/code&gt; 解析文章元数据&lt;br /&gt;- Server Functions 是同构应用的关键——无论 loader 在服务端还是客户端运行，都能保证文件读取逻辑始终在服务端执行&lt;br /&gt;- 动态路由通过 &lt;code&gt;$slug.tsx&lt;/code&gt; 文件命名实现，配合 &lt;code&gt;createFileRoute&lt;/code&gt; 和 &lt;code&gt;head&lt;/code&gt; 函数设置页面标题&lt;br /&gt;- 使用 markdown-it + Shiki 实现代码高亮，通过自定义 transformer 支持 &lt;code&gt;line-numbers&lt;/code&gt; 语法标记，结合 CSS counter 渲染行号&lt;br /&gt;- 文章预告下篇将介绍静态生成和部署策略&lt;br /&gt;&lt;br /&gt;文章URL：&lt;a href=&quot;https://frontendmasters.com/blog/building-a-blog-in-tanstack-part-1-of-2/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://frontendmasters.com/blog/building-a-blog-in-tanstack-part-1-of-2/&quot;&gt;https://frontendmasters.com/blog/building-a-blog-in-tanstack-part-1-of-2/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://frontendmasters.com/blog/building-a-blog-in-tanstack-part-1-of-2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;TanStack Start is one of the newest web frameworks, and its popularity is rising quickly. Start is a thin server-side layer that sits atop TanStack Router and provides features like server functions, API endpoints, and server-side rendering. I wrote a three…&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Frontend Masters&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Building a Blog in TanStack (Part 1 of 2)&quot; src=&quot;/static/https://cdn4.telesco.pe/file/SdcbHy_4OJWiubsSxzCgJ8NcIYv3G7kH2N2jNrB8t3TbMqiok_ID_AkaDmpPliaU4mXl1YiJIt3X3zT5g_gp8XQIkHth8B2EEC2I6G6apJbHqmdP2u2Iq-PnmtOwfh1fZkB1rppS9zlgzO9GOVVvwO0zRR2yAlmLqAU9C7EOxHZhSNDPt17w8I2KFUxv3OSj56leWB3dwsNJFepmI9N7zNXorIyCzBwmT7GCZHtrwEnltgmCDIt4nT8mhUDinBDAZx9s5sWD59uA5puezmNjeqKksJ_7mhc2d6iqHJLkaLTwRw1kfBYYT_nZECaijRBLRkP0cOM2iq8MiPqUgxhZeg.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;Building a Blog in TanStack (Part 1 of 2)&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;TanStack Start is one of the newest web frameworks, and its popularity is rising quickly. Start is a thin server-side layer that sits atop TanStack Router and provides features like server functions, API endpoints, and server-side rendering. I wrote a three…&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《2026年JavaScript生态全景指南》</title><link>https://channel.meo-ai.com/posts/592</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/592</guid><pubDate>Wed, 08 Apr 2026 09:23:59 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《2026年JavaScript生态全景指南》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23JavaScript&quot; title=&quot;#JavaScript&quot;&gt;#JavaScript&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23ECMAScript2025&quot; title=&quot;#ECMAScript2025&quot;&gt;#ECMAScript2025&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23ECMAScript2026&quot; title=&quot;#ECMAScript2026&quot;&gt;#ECMAScript2026&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23React&quot; title=&quot;#React&quot;&gt;#React&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Vue&quot; title=&quot;#Vue&quot;&gt;#Vue&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Svelte&quot; title=&quot;#Svelte&quot;&gt;#Svelte&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23NodeJS&quot; title=&quot;#NodeJS&quot;&gt;#NodeJS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TypeScript&quot; title=&quot;#TypeScript&quot;&gt;#TypeScript&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Vite&quot; title=&quot;#Vite&quot;&gt;#Vite&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Bun&quot; title=&quot;#Bun&quot;&gt;#Bun&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Deno&quot; title=&quot;#Deno&quot;&gt;#Deno&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TemporalAPI&quot; title=&quot;#TemporalAPI&quot;&gt;#TemporalAPI&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23IteratorHelpers&quot; title=&quot;#IteratorHelpers&quot;&gt;#IteratorHelpers&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23ImportAttributes&quot; title=&quot;#ImportAttributes&quot;&gt;#ImportAttributes&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;本文全面梳理了2026年JavaScript生态系统的最新发展，涵盖ECMAScript 2025（迭代器助手、Set方法、Promise.try等）和2026预期特性（Temporal API、资源管理），React/Vue/Svelte框架动态，Node.js原生TypeScript支持、Bun和Deno运行时竞争，Vite 8与Turbopack构建工具演进，TypeScript v6及AI编程趋势。文章强调掌握基础原理比追逐工具更重要，特别是在AI辅助编程时代，架构能力和代码品味尤为关键。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;- **ECMAScript 2025超实用新玩具**：迭代器终于能链式调用`.map()&lt;code&gt;和&lt;/code&gt;.filter()`啦，而且是惰性求值不耗内存；Set之间可以玩集合运算，轻松找出技能交集和差集；`Promise.try()`让同步异步错误一网打尽；还有`RegExp.escape()`终于解决了用户搜索时特殊字符炸正则的问题～&lt;br /&gt;&lt;br /&gt;- **2026年最期待的Temporal API**：Date对象终于被拯救了！处理时区和日期计算不会再莫名其妙多出几天，浏览器原生支持即将到来，告别 moment.js 大礼包的时代要来啦～&lt;br /&gt;&lt;br /&gt;- **框架圈的大新闻**：React 19的Server Components和Compiler还在消化中，Vue 3.6祭出Vapor Mode性能大招，Svelte 5的Runes API让响应式更细粒度； Next.js 16默认切到Turbopack，Astro被Cloudflare抱走，Remix正在酝酿去React化的大胆实验～&lt;br /&gt;&lt;br /&gt;- **运行时三国杀**：Node.js 22+能直接跑.ts文件啦（虽然只是剥离类型），Bun被Anthropic(Claude家)收编后1.3版本速速飞起，Deno 2稳如老狗主打安全牌，三足鼎立格局越来越有意思～&lt;br /&gt;&lt;br /&gt;- **TypeScript登顶GitHub第一**：v6严格模式默认开启，v7要用Go重写编译器提速10倍；92%的开发者都在用AI写代码，但文章提醒我们——基础原理和架构品味才是AI时代真正的护城河呀！&lt;br /&gt;&lt;br /&gt;文章URL：&lt;a href=&quot;https://frontendmasters.com/blog/what-to-know-in-javascript-2026-edition/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://frontendmasters.com/blog/what-to-know-in-javascript-2026-edition/&quot;&gt;https://frontendmasters.com/blog/what-to-know-in-javascript-2026-edition/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://frontendmasters.com/blog/what-to-know-in-javascript-2026-edition&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;We’ve done posts like this for CSS, but JavaScript deserves the same dangnabit! Especially as JavaScript does a better job of versioning itself anyway. We’ll cover new stuff in the language itself, but being a JavaScript practitioner involves more than the…&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Frontend Masters&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;What To Know in JavaScript (2026 Edition)&quot; src=&quot;/static/https://cdn4.telesco.pe/file/WN6cj5f8Vx_P8Z3OsdEBn_3LZO0iBYAUinHX4LPFIkO1eED-PgzHLHjDve26vNQbZCTVfASa_QYCvfhH29se2CitDfW0fUoiUsxwVGva7NrX-tWh6abXz2IiDE6rrbpVx2HE8u57rtazO9Jrpo3anbOo7wNUE1a46k4tfMUBNrFZAML-lM7_QSluOezuiqi20i4UduzPBjmqvIn3l0S2vWxVp7vUsC0hs_B32vvPG5ijh-tOVkeWVaV3uAu7vLaPailhW8Wa2mZgxNUUT2MnPbX3aj2Gxl_KY4-nmrERp7aQR-btLK-G1Ktr2NFFqSPK75M0PD48sdx-cWcLaMKqRg.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;What To Know in JavaScript (2026 Edition)&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;We’ve done posts like this for CSS, but JavaScript deserves the same dangnabit! Especially as JavaScript does a better job of versioning itself anyway. We’ll cover new stuff in the language itself, but being a JavaScript practitioner involves more than the…&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《前端内存泄漏：500仓库静态分析与五场景基准测试实证研究》</title><link>https://channel.meo-ai.com/posts/572</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/572</guid><pubDate>Mon, 09 Mar 2026 01:18:51 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《前端内存泄漏：500仓库静态分析与五场景基准测试实证研究》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F&quot; title=&quot;#内存泄漏&quot;&gt;#内存泄漏&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96&quot; title=&quot;#性能优化&quot;&gt;#性能优化&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23React&quot; title=&quot;#React&quot;&gt;#React&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Vue&quot; title=&quot;#Vue&quot;&gt;#Vue&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Angular&quot; title=&quot;#Angular&quot;&gt;#Angular&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23useEffect&quot; title=&quot;#useEffect&quot;&gt;#useEffect&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E9%9D%99%E6%80%81%E5%88%86%E6%9E%90&quot; title=&quot;#静态分析&quot;&gt;#静态分析&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%9F%BA%E5%87%86%E6%B5%8B%E8%AF%95&quot; title=&quot;#基准测试&quot;&gt;#基准测试&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结（一段话概括）&lt;br /&gt;该研究对500个开源前端仓库（React/Vue/Angular）进行AST静态分析，发现86%的代码库存在至少一处缺失清理的内存泄漏模式，共识别55,864个潜在泄漏点，其中定时器清理缺失占比最高（43.9%）。通过五个控制变量的基准测试（各50轮×100次挂载循环）证实：每处未清理模式每次挂载/卸载循环平均泄漏约8KB内存，呈线性累积趋势；而正确清理的版本内存增长接近零（约2KB总计）。研究揭示了内存泄漏在前端生产代码中的普遍性及其对长会话应用（如仪表板、视频会议）的性能威胁，并提供了针对性的修复方案。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;- 高普遍性：扫描714,217个文件发现55,864处潜在泄漏，430/500个仓库（86%）存在至少一处缺失清理模式，涵盖Kibana、Next.js等知名项目&lt;br /&gt;- 主要泄漏源：定时器未清理（43.9%，22,384处）居首，其次是事件监听器（19.0%）、订阅未取消（13.9%）、useEffect无清理函数（9.3%）&lt;br /&gt;- 统一泄漏成本：五个跨框架场景（React useEffect、Vue onMounted、Angular subscribe、Vue watch、RAF）均显示每循环约8KB线性内存增长，标准差极小（±0.6–37KB），而正确清理版本仅2-3KB噪声基线&lt;br /&gt;- 统计显著性：效应量Cohen&apos;s d &amp;gt; 200（BAD与GOOD分布零重叠），p &amp;lt; 0.001，统计功效超99.99%，证实清理缺失是内存占用的主导变量&lt;br /&gt;- 框架差异：React占发现总量62.3%（样本加权），Vue的&lt;code&gt;watch&lt;/code&gt;未存储stop handle（3,989处）和Angular的&lt;code&gt;.subscribe()&lt;/code&gt;未取消（5,327处）均为高危模式&lt;br /&gt;- 高危上下文：组件生命周期代码（32.9%）和事件绑定（24.5%）是高发区，因路由切换、标签页切换会频繁触发挂载/卸载&lt;br /&gt;- 实际影响：单泄漏模式200次导航累积1.6MB，多模式叠加可达8MB/会话，足以触发移动端浏览器（iOS Safari 80-120MB阈值）杀标签页&lt;br /&gt;- 修复成本低：92.3%的修复仅需单行代码（返回清理函数、存储stop handle、takeUntil模式），ROI极高&lt;br /&gt;- 工具链缺口：现有ESLint规则（如react-hooks/exhaustive-deps）无法检测清理函数缺失，需借助AST级静态分析或生产环境堆内存监控&lt;br /&gt;&lt;br /&gt;文章URL&lt;br /&gt;&lt;a href=&quot;https://stackinsight.dev/blog/memory-leak-empirical-study/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://stackinsight.dev/blog/memory-leak-empirical-study/&quot;&gt;https://stackinsight.dev/blog/memory-leak-empirical-study/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://stackinsight.dev/blog/memory-leak-empirical-study&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;We scanned 500 public React, Vue, and Angular repositories with AST-based static analysis and found 55,864 missing-cleanup patterns — 86% of repos had at least one. Then we benchmarked five common leak scenarios (useEffect listeners, onMounted timers, RxJS…&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;StackInsight&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Frontend Memory Leaks: A 500-Repository Static Analysis and Five-Scenario Benchmark Study&quot; src=&quot;/static/https://cdn4.telesco.pe/file/hEofUcHKImljjSdNNomsaULhwTkWMrHvkXQyYHDxHGQHIsp13KL5hWl6LKGe1iGqPtiWQ4e0JNvbVpZGFfjGZWU4Hf12wMSSQR-q8srtHtW9d3RWvqG_mKv3Mc4WXoPYwYGw8Rbjhm5c1yUnQlLO6yD-S7Da_Ua0HHzwy8WzzM_zc_goAZGsppDS7J06NWaFHAoFA0nlEiRrzpZEkNjTqBMpFmz1gfYVOQaNXtxrFEagxPW6UFhpo89m_AejAuUPkVN9xP6aQ1DrdmOasEESRDARQO-xf__kSHu5xjA2l5JcYsORexRmG69tBw1QMxpd-4G0-Zv6-f_QeiAWJ86WwA.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;Frontend Memory Leaks: A 500-Repository Static Analysis and Five-Scenario Benchmark Study&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;We scanned 500 public React, Vue, and Angular repositories with AST-based static analysis and found 55,864 missing-cleanup patterns — 86% of repos had at least one. Then we benchmarked five common leak scenarios (useEffect listeners, onMounted timers, RxJS…&lt;/div&gt;
&lt;/a&gt;</content:encoded></item></channel></rss>