<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Web开发 | 锤子前端</title><description>Now vibe coding, so learning hammer FE ?</description><link>https://channel.meo-ai.com</link><item><title>《Gr8r Studio：一款平静、结构化的项目管理工作台》</title><link>https://channel.meo-ai.com/posts/719</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/719</guid><pubDate>Wed, 21 Oct 2026 15:13:34 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《Gr8r Studio：一款平静、结构化的项目管理工作台》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;br /&gt;&lt;a href=&quot;/search/result?q=%23%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86&quot; title=&quot;#开源项目管理&quot;&gt;#开源项目管理&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Web%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91&quot; title=&quot;#Web前端开发&quot;&gt;#Web前端开发&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E4%BB%BB%E5%8A%A1%E7%9C%8B%E6%9D%BF&quot; title=&quot;#任务看板&quot;&gt;#任务看板&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E7%BA%AFES%E6%A8%A1%E5%9D%97&quot; title=&quot;#纯ES模块&quot;&gt;#纯ES模块&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Vite%E6%9E%84%E5%BB%BA&quot; title=&quot;#Vite构建&quot;&gt;#Vite构建&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;Gr8r Studio 是一个开源的项目管理应用，提供首页仪表盘、收件箱、我的任务和多视图项目管理（看板/列表/表格/日历/时间线/文件），以及成员、团队、动态和设置等完整功能；它完全用原生 JavaScript ES 模块和 CSS 构建，无任何 UI 框架和运行时依赖，仅由 Vite 打包。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. 功能齐全：包含仪表盘、收件箱、我的任务，以及看板、列表、表格、日历、时间线、文件六种项目视图。&lt;br /&gt;2. 零框架零依赖：纯 JS ES 模块 + CSS 实现，不引入任何 UI 框架或运行时依赖。&lt;br /&gt;3. 结构清晰：src 目录按 styles、core（状态与主题）、ui、shell（路由与布局）、views、overlays、features、actions 分层组织。&lt;br /&gt;4. 工程化完善：内置 ESLint + Prettier 校验，CI 在每次推送和 PR 时跑 lint、格式检查和生产构建。&lt;br /&gt;5. 可直接预览：仓库附带演示数据（data/seed.js）和 README 截图，vercel.json 配置了一键构建部署到 Vercel。&lt;br /&gt;6. 上手门槛低：仅需 Node.js 18+（.nvmrc 固定 22），适合作为学习现代前端工程化的参考项目。&lt;br /&gt;&lt;br /&gt;URL：&lt;a href=&quot;https://github.com/gr8rstudio/gr8r-studio&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://github.com/gr8rstudio/gr8r-studio&quot;&gt;https://github.com/gr8rstudio/gr8r-studio&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://github.com/gr8rstudio/gr8r-studio&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Gr8r Studio: a calm, structured project management workspace. Vite + plain ES modules. - gr8rstudio/gr8r-studio&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;GitHub&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;GitHub - gr8rstudio/gr8r-studio: Gr8r Studio: a calm, structured project management workspace. Vite + plain ES modules.&quot; src=&quot;/static/https://cdn4.telesco.pe/file/lsyDaUZZK7Mh0KpinQPq2ro9CGd5daBl4eD7phfywW6zBBYd6FyiPrGtXdug6W_jzOzNaC-XEyJk7v_6OrcJZp-joOY6HMzW1_Lo5pMuUDoZdOPzx6AULrINl0zC4p2S4MfkqKN3hkfCXFrp8H5X6Kn12N4tJOjJP2-0TycEw2kfuPDVXcOsFzq1qXXEn6TkFx3z8Ywyo8eK-aKEPmNomozRaCS8fKt9wkSPf0VAOhdyqt4TF3CyV-g3qKYMPZvWQ5uY25X6CWrcKrVwas778b2zggXLj5Y2pRNRHLp9_VlmQkuj3KjHGm9CJAs1rTqLd-LzTV8VJ_wL-dgy9mbUEg.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;lazy&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;GitHub - gr8rstudio/gr8r-studio: Gr8r Studio: a calm, structured project management workspace. Vite + plain ES modules.&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Gr8r Studio: a calm, structured project management workspace. Vite + plain ES modules. - gr8rstudio/gr8r-studio&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>《浏览器主线程很昂贵：高性能前端优化实战指南》</title><link>https://channel.meo-ai.com/posts/706</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/706</guid><pubDate>Thu, 10 Sep 2026 23:29:33 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&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Web%E6%80%A7%E8%83%BD&quot; title=&quot;#Web性能&quot;&gt;#Web性能&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%B5%8F%E8%A7%88%E5%99%A8%E5%8E%9F%E7%90%86&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=%23%E6%B8%B2%E6%9F%93%E7%AE%A1%E7%BA%BF&quot; title=&quot;#渲染管线&quot;&gt;#渲染管线&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23WebWorker&quot; title=&quot;#WebWorker&quot;&gt;#WebWorker&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%8A%A8%E7%94%BB%E4%BC%98%E5%8C%96&quot; title=&quot;#动画优化&quot;&gt;#动画优化&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E4%BA%A4%E4%BA%92%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%E8%B0%83%E4%BC%98&quot; title=&quot;#性能调优&quot;&gt;#性能调优&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;&lt;br /&gt;本文深入剖析了浏览器主线程作为稀缺资源的工作原理，指出前端性能问题的根源往往不是代码速度慢，而是主线程被长时间占用导致界面冻结。文章系统性地介绍了两大类优化策略：在主线程上&quot;精打细算&quot;（拆分、批处理、优先级排序、延迟执行），以及&quot;完全不用主线程&quot;（利用合成器线程、Web Worker、消除不必要的工作），并通过大量交互式 Demo 帮助读者直观理解每种技术的实际效果。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;&lt;br /&gt;1. &lt;b&gt;主线程是性能瓶颈的核心&lt;/b&gt;：主线程同时负责运行 JavaScript、样式计算、布局、绘制和事件处理，所有工作排队串行执行。60Hz 屏幕每帧预算约 16.6ms，实际可用仅约 10ms，超过 50ms 的任务会导致界面卡顿。&lt;br /&gt;&lt;br /&gt;2. &lt;b&gt;拆分（Splitting）&lt;/b&gt;：将大任务切割成小片段，通过 &lt;code&gt;setTimeout&lt;/code&gt; 或 &lt;code&gt;requestAnimationFrame&lt;/code&gt; 让出主线程，让浏览器在间隙处理渲染和输入。注意过度拆分会产生额外开销，且 &lt;code&gt;JSON.parse&lt;/code&gt; 等原子操作无法拆分。&lt;br /&gt;&lt;br /&gt;3. &lt;b&gt;批处理（Batching）&lt;/b&gt;：将频繁触发的事件（如滚动、输入）合并执行，使用防抖（debounce）和节流（throttle）减少重复劳动。React 的虚拟 DOM 本质上也是一种批处理机制。&lt;br /&gt;&lt;br /&gt;4. &lt;b&gt;优先级排序（Prioritizing）&lt;/b&gt;：通过自定义队列（基于 &lt;code&gt;MessageChannel&lt;/code&gt;）实现任务插队机制，确保用户当前关注的操作（如点击预览图片）优先执行，采用&quot;空闲时预处理，紧急时优先处理&quot;的策略。&lt;br /&gt;&lt;br /&gt;5. &lt;b&gt;延迟执行（Deferring）&lt;/b&gt;：非必要工作延后处理，包括代码分割、使用 &lt;code&gt;IntersectionObserver&lt;/code&gt; 实现虚拟列表（只渲染可视区域内容）、离屏时暂停动画等，避免一次性处理全部数据。&lt;br /&gt;&lt;br /&gt;6. &lt;b&gt;利用合成器线程&lt;/b&gt;：使用 &lt;code&gt;transform&lt;/code&gt; 和 &lt;code&gt;opacity&lt;/code&gt; 代替 &lt;code&gt;top&lt;/code&gt;、&lt;code&gt;left&lt;/code&gt;、&lt;code&gt;width&lt;/code&gt; 等触发布局的属性做动画，让动画在合成器线程运行，即使主线程繁忙也能保持流畅。&lt;br /&gt;&lt;br /&gt;7. &lt;b&gt;FLIP 动画技术&lt;/b&gt;：对于必须改变布局的动画（如列表重排），先测量初始和最终位置，通过反转和播放 &lt;code&gt;transform&lt;/code&gt; 来实现平滑过渡，将布局计算限制为仅一次，动画过程交给合成器。&lt;br /&gt;&lt;br /&gt;8. &lt;b&gt;Web Worker 处理重计算&lt;/b&gt;：将图片处理、大数据解析等纯计算任务转移到 Worker 线程，通过 &lt;code&gt;postMessage&lt;/code&gt; 的 Transferable 对象（如 &lt;code&gt;ArrayBuffer&lt;/code&gt;）实现零拷贝数据传输，避免主线程冻结。&lt;br /&gt;&lt;br /&gt;9. &lt;b&gt;消除不必要的工作&lt;/b&gt;：当数据流入速度超过处理能力时，采用丢弃（旧日志）、合并（只保留最新值）、跳过（缓存 memoization）三种策略，从源头减少工作量。&lt;br /&gt;&lt;br /&gt;10. &lt;b&gt;避免布局抖动（Layout Thrashing）&lt;/b&gt;：不要交替读写布局属性（如 &lt;code&gt;offsetWidth&lt;/code&gt;），应先批量读取再批量写入，强制浏览器反复计算布局会严重阻塞主线程。&lt;br /&gt;&lt;br /&gt;URL：&lt;br /&gt;&lt;a href=&quot;https://kciter.so/posts/the-expensive-main-thread/en/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://kciter.so/posts/the-expensive-main-thread/en/&quot;&gt;https://kciter.so/posts/the-expensive-main-thread/en/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://kciter.so/posts/the-expensive-main-thread/en&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;What comes to mind when you hear &amp;quot;frontend optimization&amp;quot;? For most of us it&apos;s things like reducing network requests, shrinking the bundle,…&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;kciter.so&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;The Browser&apos;s Main Thread Is Expensive | kciter.so&quot; src=&quot;/static/https://cdn4.telesco.pe/file/M7yU5vwQA68lMlS1cfdCD6jbRYwY9CREzH7USkG-XnIJ-92aRhup9RXNnO-g64Vxfap3MjPkx0cCo96NP-RjpcI4H_rJwlcDlA62JBGitYmRKNXswN5xB4H1dzZdCGIfT0fIBu6d73jdr1NkSwaqfMPt5I0Z9eoElaT8S5nD0XHwSDcuryH0fAIblnFZ66jz_7tyCgmbw6VRF3GGck-RnU6dkTlCk1pUUVszRfFsL5eDWC_yqgUk3CO4OnE3hvOs2QOUFVDFoBUS1AFVf8mIT7eUh_DxBPiyesG1EIm1evmcWVms-2Fe3vtSm7qBfY004nIb5_5hD1C9jR0NfF-HHQ.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;The Browser&apos;s Main Thread Is Expensive | kciter.so&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;What comes to mind when you hear &quot;frontend optimization&quot;? For most of us it&apos;s things like reducing network requests, shrinking the bundle,…&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《CSS 单位完全参考手册》</title><link>https://channel.meo-ai.com/posts/703</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/703</guid><pubDate>Wed, 02 Sep 2026 13:28:01 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《CSS 单位完全参考手册》&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=%23CSS&quot; title=&quot;#CSS&quot;&gt;#CSS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%93%8D%E5%BA%94%E5%BC%8F%E8%AE%BE%E8%AE%A1&quot; title=&quot;#响应式设计&quot;&gt;#响应式设计&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Web%E6%8E%92%E7%89%88&quot; title=&quot;#Web排版&quot;&gt;#Web排版&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%AE%B9%E5%99%A8%E6%9F%A5%E8%AF%A2&quot; title=&quot;#容器查询&quot;&gt;#容器查询&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E8%A7%86%E5%8F%A3%E5%8D%95%E4%BD%8D&quot; title=&quot;#视口单位&quot;&gt;#视口单位&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%AD%97%E4%BD%93%E7%9B%B8%E5%AF%B9%E5%8D%95%E4%BD%8D&quot; title=&quot;#字体相对单位&quot;&gt;#字体相对单位&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CSS%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0&quot; title=&quot;#CSS数学函数&quot;&gt;#CSS数学函数&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;&lt;br /&gt;这是一本由 Mykola Ptushchuk 编写的交互式 CSS 单位参考手册，涵盖从基础像素到现代容器查询单位的所有 CSS 度量单位。全书共 7 章，每个单位都配有实时浏览器演示，可在线调整参数观察实际效果，并提供完整 PDF 下载。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;&lt;br /&gt;1. 全书结构清晰，覆盖七大单位家族：从绝对单位（px）、字体相对单位（em/rem/ch/cap 等）、视口单位（vw/vh 及小/大/动态视口变体）、容器查询单位（cqi/cqw 等）、百分比、数学函数，到角度单位，形成完整的 CSS 度量体系地图。&lt;br /&gt;&lt;br /&gt;2. 视口单位家族详解：现代移动端浏览器 UI 会动态收缩/展开，因此视口单位分为默认（等价于大视口）、小视口（sv，假设浏览器控件展开）、大视口（lv，假设控件收起）和动态视口（dv，实时状态）四大家族，解决了 &lt;code&gt;100vh&lt;/code&gt; 在移动端全屏布局中常见的&quot;被地址栏遮挡&quot;难题。&lt;br /&gt;&lt;br /&gt;3. 容器查询单位让组件真正可移植：&lt;code&gt;cqi&lt;/code&gt;/&lt;code&gt;cqw&lt;/code&gt; 等单位测量的是组件所在的&quot;查询容器&quot;而非整个视口，使同一个卡片组件在 300px 侧边栏和 700px 主栏中能自动呈现不同布局，无需媒体查询或额外类名，实现了&quot;组件响应自身上下文&quot;而非&quot;响应整个页面&quot;的范式转变。&lt;br /&gt;&lt;br /&gt;4. 字体相对单位不止 em/rem：除了常见的 &lt;code&gt;em&lt;/code&gt;（当前元素字体大小）和 &lt;code&gt;rem&lt;/code&gt;（根元素字体大小），还有 &lt;code&gt;ch&lt;/code&gt;（数字 0 的字宽，适合设置最佳阅读行宽如 &lt;code&gt;65ch&lt;/code&gt;）、&lt;code&gt;cap&lt;/code&gt;（大写字母高度，适合图标与标题对齐）、&lt;code&gt;lh&lt;/code&gt;（当前行高作为长度）等精细排版单位，以及对应的根元素变体（rch/rex/rcap 等，2026 年 1 月才在 Firefox 中补齐，至此全浏览器支持）。&lt;br /&gt;&lt;br /&gt;5. CSS 数学函数是单位的粘合剂：&lt;code&gt;calc()&lt;/code&gt; 可混合不同单位（如 &lt;code&gt;100% - 240px&lt;/code&gt;），&lt;code&gt;clamp()&lt;/code&gt; 实现流体排版（如 &lt;code&gt;clamp(2rem, 5vw + 1rem, 4rem)&lt;/code&gt;），&lt;code&gt;min()/max()&lt;/code&gt; 取极值，还有三角函数（&lt;code&gt;sin/cos/tan&lt;/code&gt;）可用于无 JS 的圆形布局，指数函数（&lt;code&gt;pow/sqrt&lt;/code&gt;）可构建模块化字号比例系统。&lt;br /&gt;&lt;br /&gt;6. 实用选型建议：正文用 &lt;code&gt;rem&lt;/code&gt; 尊重用户偏好，组件内部比例用 &lt;code&gt;em&lt;/code&gt; 保持缩放一致性，&lt;code&gt;line-height&lt;/code&gt; 推荐无单位写法（如 &lt;code&gt;1.5&lt;/code&gt;）以便作为乘数继承，&lt;code&gt;clamp()&lt;/code&gt; 的流体值中务必包含 &lt;code&gt;rem&lt;/code&gt; 项以确保缩放无障碍性。&lt;br /&gt;&lt;br /&gt;7. 交互式学习体验：每个单位都配有可拖拽、可滑动的实时演示，直接在浏览器中观察单位变化效果，将抽象概念转化为直观体验，并支持下载完整 PDF 离线阅读。&lt;br /&gt;&lt;br /&gt;URL：&lt;br /&gt;&lt;a href=&quot;https://cssunits.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://cssunits.com/&quot;&gt;https://cssunits.com/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://cssunits.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;A complete interactive reference to every CSS measurement unit. From the basics of px and rem to the nuances of svh, dvh, and cqw.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;CSS Units&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;CSS Units — The Complete Reference&quot; src=&quot;/static/https://cdn4.telesco.pe/file/AT6h8pjfCkp_NRrPaD5TkS-87t7UrKQHXNF-NoWZhC1pDd2HlAyJu29y8zrNUSI82Uu4vmjOKmJ65DbVIkgB6uqrGGa-ZuTI3f-39CT-anyXVvjvGsSdF_tocD3xH_AiGgJd3mLLtOLdqEeHS5nz7RYNXG7MzBU1uUM26Jj87nW5fExS5Wf2N0XTxn_zUVx8joWV_wnZmH10otZqAeKHqBiqwtXjV-99EFtl3BiB1VU9OPiiBARJAypdJ9hDcE8Ys3fDSdSXMKR8GPU6Ruy0DvDyvBoyp59ibi5_PX-X4KQrI0-ZueMxN-GdN_e5wlBs2MbhxplSQWiuq8cov38NdQ.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;CSS Units — The Complete Reference&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;A complete interactive reference to every CSS measurement unit. From the basics of px and rem to the nuances of svh, dvh, and cqw.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《视觉回归测试：你可能还没跑起来的最重要测试》</title><link>https://channel.meo-ai.com/posts/702</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/702</guid><pubDate>Mon, 31 Aug 2026 01:33:14 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%E6%B5%8B%E8%AF%95&quot; title=&quot;#前端测试&quot;&gt;#前端测试&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E8%A7%86%E8%A7%89%E5%9B%9E%E5%BD%92%E6%B5%8B%E8%AF%95&quot; title=&quot;#视觉回归测试&quot;&gt;#视觉回归测试&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95&quot; title=&quot;#自动化测试&quot;&gt;#自动化测试&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E8%B4%A8%E9%87%8F%E4%BF%9D%E8%AF%81&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;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;&lt;br /&gt;文章系统介绍了视觉回归测试（Visual Regression Testing）的概念、重要性、工作原理、主流工具及实践建议。核心观点是：即使功能测试覆盖率100%，应用仍可能在视觉上&quot;看起来完全损坏&quot;。视觉回归测试通过截图对比基线，捕捉传统测试无法发现的视觉缺陷，在AI生成代码时代尤为重要。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;&lt;br /&gt;1. 为什么视觉测试不可或缺：单元测试、集成测试和E2E测试只验证功能逻辑，不检查实际视觉呈现。CSS类名测试是代码异味，因为即使类名正确，实际渲染仍可能因样式冲突、加载失败等出问题。&lt;br /&gt;&lt;br /&gt;2. 工作原理超直观：在真实浏览器中渲染页面/组件并截图，与基线快照对比。匹配则通过，不匹配则在CI/CD中标记失败，需人工审核确认是否为预期变更。&lt;br /&gt;&lt;br /&gt;3. 能抓住哪些&quot;隐形&quot;Bug：组件一处修改意外影响其他使用位置、CSS变更导致的布局错位、响应式问题、跨浏览器渲染差异、字体/图片加载失败等。作者曾靠它避免了一个SVG图标在20处地方颜色错误的生产事故。&lt;br /&gt;&lt;br /&gt;4. 三大主流工具怎么选：Percy（适合全页截图，与Playwright/Cypress/Puppeteer兼容，UI体验好但用量大时贵）；Chromatic（Storybook生态，组件级截图，免费 tier 友好）；Vitest Browser Mode（内置截图测试，但缺少审核UI，适合组件级）。&lt;br /&gt;&lt;br /&gt;5. 接入CI/CD很轻松：通常在现有E2E测试中插入一行代码即可，如Playwright中调用&lt;code&gt;percySnapshot()&lt;/code&gt;或Chromatic的&lt;code&gt;takeSnapshot()&lt;/code&gt;，无需重构测试架构。&lt;br /&gt;&lt;br /&gt;6. 避免&quot; flaky 测试&quot;的实用技巧：确保页面完全加载后再截图；用CSS隐藏动画区域；对动态数据（如日期、&quot;5天前&quot;）设置忽略区域；避免对内容过多的整页盲目截图，要有选择性地测试。&lt;br /&gt;&lt;br /&gt;7. AI时代的刚需：随着AI生成代码的普及，视觉回归测试将变得更加关键，能帮助团队快速发现AI改动带来的意外视觉副作用。&lt;br /&gt;&lt;br /&gt;URL：&lt;br /&gt;&lt;a href=&quot;https://howtotestfrontend.com/resources/visual-regression-testing-introduction-guide&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://howtotestfrontend.com/resources/visual-regression-testing-introduction-guide&quot;&gt;https://howtotestfrontend.com/resources/visual-regression-testing-introduction-guide&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://howtotestfrontend.com/resources/visual-regression-testing-introduction-guide&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Your tests can pass while your app looks broken. Visual regression testing catches the UI bugs that unit, integration and E2E tests miss - and here is how to set it up with Percy, Chromatic or Vitest Browser Mode&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;How To Test Frontend&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Visual Regression Testing: The Most Important Test You&apos;re Not Running&quot; src=&quot;/static/https://cdn4.telesco.pe/file/CGxxW8nFXdB1gDL_CmmjoycXKoB0saZWUUhDJkscoSgYoiSkQwGh5RLAsUsSHyUowqYgZU8yVxp1QoCCLPoHo83cfiGoPoZpF_vbxN3zTDgy8euVFCg-s4mBuWJy3HcLjxeWXsDpvCX26HZ3a--_JOe5_bEecG1TUOYgseIPLQBLI5UzsKFer4Cb9iAMmLvfirC3bIcvYOJ91sVYWVVj1LJ1QdENqkQNVsQR10Aq-g8cfhKasffOcUzWNw0YcqSZpGJpQC58xesUdhvHtK2cXQChLKCqtbQVDD9ar6aOjVCkfkZoJb_W86D4ZBj4eXcrEVXuJgvp5YtnAcvaC6sjow.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;Visual Regression Testing: The Most Important Test You&apos;re Not Running&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Your tests can pass while your app looks broken. Visual regression testing catches the UI bugs that unit, integration and E2E tests miss - and here is how to set it up with Percy, Chromatic or Vitest Browser Mode&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《程序员的音乐理论：从零推导乐理系统》</title><link>https://channel.meo-ai.com/posts/698</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/698</guid><pubDate>Fri, 28 Aug 2026 01:06:54 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%E9%9F%B3%E4%B9%90%E7%90%86%E8%AE%BA&quot; title=&quot;#音乐理论&quot;&gt;#音乐理论&lt;/a&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_Audio_API&quot; title=&quot;#Web_Audio_API&quot;&gt;#Web_Audio_API&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%A3%B0%E5%AD%A6%E7%89%A9%E7%90%86&quot; title=&quot;#声学物理&quot;&gt;#声学物理&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%95%B0%E5%AD%A6%E5%8E%9F%E7%90%86&quot; title=&quot;#数学原理&quot;&gt;#数学原理&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A7%91%E5%AD%A6&quot; title=&quot;#计算机科学&quot;&gt;#计算机科学&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;&lt;br /&gt;本文从物理和算术的第一性原理出发，用 JavaScript 代码逐步推导出整个西方音乐理论体系。作者不依赖记忆，而是通过编程和听觉验证，解释了为什么音乐有十二个音、为什么大调音阶是那个形状、为什么和弦听起来和谐，以及乐谱本质上是一种序列化格式。核心洞察是：音乐理论并非 arbitrary 的约定，而是物理（泛音列）和数学（简单整数比）的自然结果。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;&lt;br /&gt;1. 声音的本质是随时间变化的数字 — 音频就是每秒 44,000 次描述扬声器位置的数字列表，频率即音高，440Hz 只是人为约定的基准。&lt;br /&gt;&lt;br /&gt;2. 音色来自你没要求的频率 — 任何乐器发出的都不是单一频率，而是基频的整数倍（泛音列）。不同波形（正弦、三角、方波、锯齿波）本质上是泛音配方的差异，这解释了为什么小提琴和小号音色不同。&lt;br /&gt;&lt;br /&gt;3. 八度是频率翻倍，音高是乘法关系 — 220Hz、440Hz、880Hz 听起来是&quot;同一个音&quot;，因为高八度的所有泛音都包含在低八度的泛音列中。因此整个音高问题简化为&quot;如何把倍频区间分割&quot;。&lt;br /&gt;&lt;br /&gt;4. 简单整数比听起来和谐 — 2:1（八度）、3:2（五度）、4:3（四度）、5:4（大三度）听起来协和，是因为它们的泛音列有大量重叠；而复杂比例（如 √2）产生拍频和粗糙感。协和的本质是耳朵能快速找到重复模式。&lt;br /&gt;&lt;br /&gt;5. 十二音律是数学妥协 — 纯五度（3:2）叠 12 次不等于 7 个八度（2^7），这个无法修复的误差叫&quot;毕达哥拉斯音差&quot;。现代十二平均律将八度均分为 12 份（每份是 2 的 12 次方根），虽然除了八度都不纯，但让所有调都能用。12 之所以被选中，是因为它是第一个能把五度误差控制在约 0.1% 以内的数字。&lt;br /&gt;&lt;br /&gt;6. 音阶是间隔数组 — 大调音阶 &lt;code&gt;[2,2,1,2,2,2,1]&lt;/code&gt; 只是一个七元素数组，加起来为 12。自然小调是它的旋转（从第 5 位开始），七种调式则是同一数组的 7 种循环移位，这让作者感叹&quot;音乐理论终于不再像 arbitrary 的 trivia&quot;。&lt;br /&gt;&lt;br /&gt;7. 和弦是隔一个音取的堆叠 — 三和弦 &lt;code&gt;[0,2,4]&lt;/code&gt; 取音阶中每隔一个的音，大三和弦 &lt;code&gt;[0,4,7]&lt;/code&gt; 与小三和弦 &lt;code&gt;[0,3,7]&lt;/code&gt; 只差一个半音，却代表了西方音乐两大情感极。七和弦加入第四个音后，音乐开始从&quot;圣咏&quot;变成&quot;爵士&quot;。&lt;br /&gt;&lt;br /&gt;8. 调内七和弦是自然涌现的 — 在一个大调音阶上，从七个音级分别构建三和弦，会自动得到：I（大三）、ii（小三）、iii（小三）、IV（大三）、V（大三）、vi（小三）、vii°（减三）。罗马数字标记是相对寻址，移调只需加一个常数。&lt;br /&gt;&lt;br /&gt;9. 张力与解决有物理基础 — V7 → I 是最强的解决感，因为 V 和弦中的 B（导音）距 I 的根音只差半音，且 V7 包含三全音（B-F，√2 比例，最不稳定），这两个音分别向相反方向移动半音到达稳定位置。&lt;br /&gt;&lt;br /&gt;10. 乐谱是带 header 的序列化格式 — 五线谱本质是针对&quot;实时阅读、手在忙&quot;场景优化的数据格式：纵轴是音阶度数（非线性频率），谱号定义坐标原点，升降号是 escape hatch，调号是 DRY 原则（常量提升），时值是 2 的负幂次，附点是二进制分数，速度（BPM）把拍子映射到秒。&lt;br /&gt;&lt;br /&gt;URL：&lt;br /&gt;&lt;a href=&quot;https://runjs.app/blog/music-theory-for-programmers&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://runjs.app/blog/music-theory-for-programmers&quot;&gt;https://runjs.app/blog/music-theory-for-programmers&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://runjs.app/blog/music-theory-for-programmers&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;I can&apos;t play an instrument, so I worked out music theory in JavaScript instead. Twelve notes, scales and chords, derived from scratch with code you can hear.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;runjs.app&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Music theory for programmers&quot; src=&quot;/static/https://cdn4.telesco.pe/file/dz3NPuInGrWEmApN3KKN_MaOP3khOyacifcUMswzUC7pgERZA2FU9-r7vpId2Rf-sF7oJ_9ENjatb8QujcJ-Eu3WBAxtAwkP_MX608NTVhN8UttioivjykfLBd5c9WyXZq7dV_JP_V3QIrwr_F3h5_aDd0fl64tZoZO2zcEmr8peXKCpyrIfZxb-p6K1GJEd8un4PIWHv4I6GPt1xjV2DTZGgglqseEfn7RsRBZtUDb0rKgHTqZoOGVbt3c4Y9fyaK4bHfXIJ_GtGXF-ikso_n9GZ_v2810vgnFTfOtMInzWPI9k_FlnA4Wchkzu770icuJCTvNs2KU2bZeyCCUJcQ.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;Music theory for programmers&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;I can&apos;t play an instrument, so I worked out music theory in JavaScript instead. Twelve notes, scales and chords, derived from scratch with code you can hear.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《hucre：零依赖的电子表格引擎》</title><link>https://channel.meo-ai.com/posts/693</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/693</guid><pubDate>Sat, 15 Aug 2026 13:03:55 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《hucre：零依赖的电子表格引擎》&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=%23TypeScript&quot; title=&quot;#TypeScript&quot;&gt;#TypeScript&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E7%94%B5%E5%AD%90%E8%A1%A8%E6%A0%BC&quot; title=&quot;#电子表格&quot;&gt;#电子表格&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Xlsx&quot; title=&quot;#Xlsx&quot;&gt;#Xlsx&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Csv&quot; title=&quot;#Csv&quot;&gt;#Csv&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Ods&quot; title=&quot;#Ods&quot;&gt;#Ods&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%95%B0%E6%8D%AE%E8%BD%AC%E6%8D%A2&quot; title=&quot;#数据转换&quot;&gt;#数据转换&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E9%9B%B6%E4%BE%9D%E8%B5%96&quot; title=&quot;#零依赖&quot;&gt;#零依赖&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%B5%81%E5%BC%8F%E5%A4%84%E7%90%86&quot; title=&quot;#流式处理&quot;&gt;#流式处理&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%95%B0%E6%8D%AE%E9%AA%8C%E8%AF%81&quot; title=&quot;#数据验证&quot;&gt;#数据验证&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%97%A0%E9%9A%9C%E7%A2%8D%E8%AE%BF%E9%97%AE&quot; title=&quot;#无障碍访问&quot;&gt;#无障碍访问&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. 核心定位：一个纯 TypeScript 编写的零依赖电子表格引擎，支持读写 XLSX、CSV、ODS、JSON、NDJSON、XML、HTML 等多种格式，可在 Node.js、Deno、Bun、浏览器、Cloudflare Workers 等任意平台运行&lt;br /&gt;2. 极致轻量：完全支持 Tree Shaking，按需导入，CSV 模块仅 3.7KB gzip，完整库 129KB gzip，远小于 SheetJS（300KB）和 ExcelJS（500KB）&lt;br /&gt;3. 多格式统一 API：通过 &lt;code&gt;read()&lt;/code&gt; 自动检测格式，&lt;code&gt;write()&lt;/code&gt; 支持 9 种输出格式（XLSX、ODS、CSV、TSV、JSON、NDJSON、XML、HTML、Markdown），大幅降低多格式处理的心智负担&lt;br /&gt;4. 流式处理：支持 XLSX、CSV、NDJSON、ODS、XML 的流式读写，可处理百万级数据而不爆内存；300万行 XLSX 流式写入峰值内存仅 70MB，而增量写入器需要 1GB+&lt;br /&gt;5. 功能全面：支持单元格样式、条件格式（13 种）、数据验证、超链接、图片（含 SVG）、图表（柱状/折线/饼图等）、数据透视表、迷你图、冻结窗格、密码保护、Excel 2024 原生复选框、模板引擎等&lt;br /&gt;6. 往返保真：&lt;code&gt;openXlsx&lt;/code&gt;/&lt;code&gt;saveXlsx&lt;/code&gt; 路径可保留图表、VBA 宏、切片器、时间线过滤器等 hucre 不原生建模的部分，实现无损编辑他人文件&lt;br /&gt;7. 数据验证与无障碍：内置 Schema 验证（类型强制、正则、枚举、范围），以及 WCAG 2.1 AA 无障碍审计（对比度检查、缺失替代文本、表头检测等）&lt;br /&gt;8. 遗留格式支持：可读取 XLS（Excel 97-2003）和 XLSB（二进制 Excel）文件，自动检测格式&lt;br /&gt;9. 开发体验友好：提供 Builder API 链式调用、对象简写读写（&lt;code&gt;readObjects&lt;/code&gt;/&lt;code&gt;writeObjects&lt;/code&gt;）、CLI 工具（格式转换、检查、验证）、单元格工具函数（行列转换、范围解析）&lt;br /&gt;10. 明确的能力边界：不实现公式计算引擎、不支持 XLS/XLSB 写入、部分高级图表类型（气泡图/雷达图等）仅支持读取和往返、流式 ODS 写入不带样式&lt;br /&gt;&lt;br /&gt;URL：&lt;a href=&quot;https://github.com/productdevbook/hucre&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://github.com/productdevbook/hucre&quot;&gt;https://github.com/productdevbook/hucre&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://github.com/productdevbook/hucre&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Zero-dependency spreadsheet engine. Read &amp;amp; write XLSX, CSV, ODS. Pure TypeScript, works everywhere. - productdevbook/hucre&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;GitHub&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;GitHub - productdevbook/hucre: Zero-dependency spreadsheet engine. Read &amp;amp; write XLSX, CSV, ODS. Pure TypeScript, works everywhere.&quot; src=&quot;/static/https://cdn4.telesco.pe/file/MJcnXpxpA3YeVtM-Tm5vhddBRePR-Iiy7xQfjh0W5GjjXgCWMvURyaufUW9XrSUFu02S0RODegcGhxzJ8HSISdwFSgv4a3ZhHWQJuOCC0qQuH0EdyatC4ZEy9_nZr6TzfooahohpRRD0QcWrIVL9EWMiCMDY0Cpm3XNUlGuaMc8u5o_98ecZ4Q7GsDla-h9Up2ChebVJ1WQy-Vq7GbaRMHNkCHX5q7_j_U4iwkdmPXJQvtJ1kyKJR7WBdVWyhk8tHITkfV5Xbmqyx6yhd-hXxyunomCEXs7BP3-HQw1s58YG6x6X-G47h9t2AxaRD-TviTPWDoEAMjETvPLU2YOtQA.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;GitHub - productdevbook/hucre: Zero-dependency spreadsheet engine. Read &amp;amp; write XLSX, CSV, ODS. Pure TypeScript, works everywhere.&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Zero-dependency spreadsheet engine. Read &amp;amp; write XLSX, CSV, ODS. Pure TypeScript, works everywhere. - productdevbook/hucre&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《unbash：零依赖的 Bash 解析器》</title><link>https://channel.meo-ai.com/posts/692</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/692</guid><pubDate>Sat, 15 Aug 2026 12:55:27 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《unbash：零依赖的 Bash 解析器》&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=%23NodeJs&quot; title=&quot;#NodeJs&quot;&gt;#NodeJs&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Bash%E8%A7%A3%E6%9E%90&quot; title=&quot;#Bash解析&quot;&gt;#Bash解析&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=%23AST&quot; title=&quot;#AST&quot;&gt;#AST&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%B7%A5%E5%85%B7&quot; title=&quot;#命令行工具&quot;&gt;#命令行工具&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;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. 定位清晰：unbash 是一个用 TypeScript 编写的、零依赖的 Bash 解析器，能将 Bash 源码（命令、脚本或嵌入在其他格式中的 shell 代码）解析为带类型和源码位置的 AST，且不执行代码&lt;br /&gt;2. 适用场景丰富：可用于权限审核、静态盘点脚本中的可执行文件和依赖引用、将 &lt;code&gt;curl&lt;/code&gt; 等命令结构化导入、为粘贴的 Bash 代码附加诊断信息、构建可视化解释、以及安全地查找和迁移命令调用&lt;br /&gt;3. 语法支持全面：涵盖命令、控制流、管道、重定向、赋值、复合语句、参数扩展、进程替换、heredoc、算术表达式等，嵌套命令在参数、数组索引、算术表达式中仍保持结构化&lt;br /&gt;4. 容错能力强：对于畸形或不完整的输入，会返回尽力而为的部分 AST，并附带带源码位置的错误信息，适合处理编辑器输入或用户粘贴内容&lt;br /&gt;5. 性能碾压对手：在多个基准测试中，解析吞吐量远超 tree-sitter-bash（约 717 倍）、sh-syntax（约 92870 倍）和 bash-parser（约 275291 倍），包体积仅 80KB 压缩后 19KB&lt;br /&gt;6. 与竞品差异化明显：相比 tree-sitter-bash 提供的是可执行语法的类型化 AST 而非 CST；相比 sh-syntax 无需 WASM 且 API 更轻量；相比 bash-parser 支持更多 Bash 特性（如 &lt;code&gt;[[ ]]&lt;/code&gt;、&lt;code&gt;(( ))&lt;/code&gt;、herestrings、process substitution 等）且具备错误恢复能力&lt;br /&gt;7. 与 shellcheck 的互补关系：unbash 专注于&quot;解析结构&quot;，不做语义分析；以下场景推荐用 shellcheck 而非 unbash：&lt;br /&gt;   - 检查变量是否已定义或是否被引用（如未引用变量 &lt;code&gt;$var&lt;/code&gt; 可能引发 word splitting）&lt;br /&gt;   - 检测命令是否存在及其参数合法性（如 &lt;code&gt;git --不存在的参数&lt;/code&gt; 语法正确但运行会报错）&lt;br /&gt;   - 识别常见陷阱和反模式（如 &lt;code&gt;cat file | grep pattern&lt;/code&gt; 可简化为 &lt;code&gt;grep pattern file&lt;/code&gt;）&lt;br /&gt;   - 检查权限相关风险（如 &lt;code&gt;rm -rf /$undefined_var&lt;/code&gt; 的潜在危险）&lt;br /&gt;   - 提供可操作的修复建议（shellcheck 会直接给出 SC 规则编号和修复方案）&lt;br /&gt;   - 对脚本进行全面的最佳实践审查（POSIX 兼容性、可移植性建议等）&lt;br /&gt;&lt;br /&gt;URL：&lt;a href=&quot;https://github.com/webpro-nl/unbash&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://github.com/webpro-nl/unbash&quot;&gt;https://github.com/webpro-nl/unbash&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://github.com/webpro-nl/unbash&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Fast 0-deps bash parser written in TypeScript. Contribute to webpro-nl/unbash development by creating an account on GitHub.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;GitHub&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;GitHub - webpro-nl/unbash: Fast 0-deps bash parser written in TypeScript&quot; src=&quot;/static/https://cdn4.telesco.pe/file/vQUj277sD_Gwtce0lyLqPsUcyAZCwZXOsmmnZwfHo6rui6B-SL-KC_HxE4wpkteg1mw-l6DXn6M2DES3NipOnerSbyBccQozGyseFIm2MxGL-bh7ZR1_uQDIo8hbsyNNO_jQgjVePm1KTFuQH0ESeB42RJWNAgrj8DLDSFVaX76aHegABcJqyWBBg3kttHnv4x0D7gSz3M0JlTx005aO2oGX1acRoBwLNnGfQuFBGrNfIYtFEBfaShL2xJzePDgTKz9f4Nwcah30Ow0id8zQjkEVBBUy2GMnqCkLQX2HwbDEmlte8D0zsFRSofjaMlq0-JhpdoPDDZoaBl3WIMtpdQ.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;GitHub - webpro-nl/unbash: Fast 0-deps bash parser written in TypeScript&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Fast 0-deps bash parser written in TypeScript. Contribute to webpro-nl/unbash development by creating an account on GitHub.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《5 个实用的 npx 辅助工具》</title><link>https://channel.meo-ai.com/posts/691</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/691</guid><pubDate>Sat, 15 Aug 2026 12:45:43 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《5 个实用的 npx 辅助工具》&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=%23NodeJs&quot; title=&quot;#NodeJs&quot;&gt;#NodeJs&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%B7%A5%E5%85%B7&quot; title=&quot;#命令行工具&quot;&gt;#命令行工具&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Npx&quot; title=&quot;#Npx&quot;&gt;#Npx&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF%E5%B7%A5%E7%A8%8B%E5%8C%96&quot; title=&quot;#前端工程化&quot;&gt;#前端工程化&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E4%BB%A3%E7%A0%81%E8%B4%A8%E9%87%8F&quot; title=&quot;#代码质量&quot;&gt;#代码质量&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Markdown&quot; title=&quot;#Markdown&quot;&gt;#Markdown&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%9B%BE%E7%89%87%E4%BC%98%E5%8C%96&quot; title=&quot;#图片优化&quot;&gt;#图片优化&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E4%BE%9D%E8%B5%96%E7%AE%A1%E7%90%86&quot; title=&quot;#依赖管理&quot;&gt;#依赖管理&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%8B%BC%E5%86%99%E6%A3%80%E6%9F%A5&quot; title=&quot;#拼写检查&quot;&gt;#拼写检查&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. cspell：一个拼写检查器，适合快速排查拼写错误，建议搭配配置文件使用自定义白名单，运行方式如 &lt;code&gt;npx cspell **/*.md&lt;/code&gt;&lt;br /&gt;2. markdown-link-check：专门检查 Markdown 文件中的链接是否有效，能帮助防止链接失效，推荐配合配置文件使用&lt;br /&gt;3. image-guard：作者自己开发的工具，用于自动化近无损图片压缩，也适合在命令行中快速压缩图片，运行 &lt;code&gt;npx image-guard&lt;/code&gt; 即可&lt;br /&gt;4. npm-check-updates：快速检查 &lt;code&gt;package.json&lt;/code&gt; 中的依赖是否有更新版本，适合在新仓库工作或手动处理依赖更新时使用&lt;br /&gt;5. knip：功能比 npm-check-updates 更广，还能检查未使用的文件和导出，但文件和导出检查可能会有误报，运行 &lt;code&gt;npx knip&lt;/code&gt; 即可&lt;br /&gt;&lt;br /&gt;URL：&lt;a href=&quot;https://meiert.com/blog/5-npx-helpers/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://meiert.com/blog/5-npx-helpers/&quot;&gt;https://meiert.com/blog/5-npx-helpers/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://meiert.com/blog/5-npx-helpers&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Joy on the command line.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Jens Oliver Meiert&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;5 Useful npx Helpers&quot; src=&quot;/static/https://cdn4.telesco.pe/file/VowQpiSoIknIA-ta7NiVkMYhMJhcw9LECn5TcPwNYHnVYMuWmyjt_-ASs8o7FOVaHPlk8EwV9lPmP7OBkGVhuVESVWuJCYYPyIol8FgvYtZ-nP4hy8LeNyGLpL8Xd-lXhv4l39_T7w162qp706-Yw5zP6VBUuSNL1GB5ir4u1JF3dO6umj20ZEVmfCWiUF8UbHsET-B-W3U6O8KpIimdDFgKd6CJApDVrrzpwg45aReTGaVyXH99duX316hv0MS4wmhzAvffd38QqsPA7e3zWANASg9oQcQ_Q1DIu_-EZ8vEZeSTsnezEBmH-4TFvwV2RacOvDbiLE6H2HIjKB1McA.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;5 Useful npx Helpers&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Joy on the command line.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《前端状态管理的真相与迷思》</title><link>https://channel.meo-ai.com/posts/686</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/686</guid><pubDate>Mon, 27 Jul 2026 02:05:27 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=%23React&quot; title=&quot;#React&quot;&gt;#React&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E7%8A%B6%E6%80%81%E7%AE%A1%E7%90%86&quot; title=&quot;#状态管理&quot;&gt;#状态管理&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Redux&quot; title=&quot;#Redux&quot;&gt;#Redux&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Zustand&quot; title=&quot;#Zustand&quot;&gt;#Zustand&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Jotai&quot; title=&quot;#Jotai&quot;&gt;#Jotai&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23MobX&quot; title=&quot;#MobX&quot;&gt;#MobX&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CRDT&quot; title=&quot;#CRDT&quot;&gt;#CRDT&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E7%A6%BB%E7%BA%BF%E4%BC%98%E5%85%88&quot; title=&quot;#离线优先&quot;&gt;#离线优先&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%AE%9E%E6%97%B6%E5%8D%8F%E4%BD%9C&quot; title=&quot;#实时协作&quot;&gt;#实时协作&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF%E6%9E%B6%E6%9E%84&quot; title=&quot;#前端架构&quot;&gt;#前端架构&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;作者犀利指出，React生态中流行的&quot;状态管理&quot;库（Redux、Zustand、MobX等）本质上只是状态传播与通知系统，而非真正的状态管理。真正的状态管理必须包含时间维度与顺序概念，能正确应用变更并解决冲突。作者推荐转向Y.js、Zero、Fluid等基于CRDT或OT的时序感知系统，它们天然支持离线优先与实时协作，才是前端数据层的未来方向。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. 那些我们天天用的Redux、Zustand、MobX，本质上更像&quot;消息广播员&quot;而不是&quot;状态管家&quot;——它们能通知组件更新，却搞不定时间顺序和冲突解决&lt;br /&gt;2. React自己也不是状态管理系统，整个前端圈把这个词用得太随意，导致大家一直在用错误的工具硬撑复杂场景&lt;br /&gt;3. 真正的状态管理必须懂&quot;时间&quot;和&quot;顺序&quot;，就像分布式系统用向量时钟给事件排队，没有时间概念就谈不上管理&lt;br /&gt;4. 值得庆幸的是，Y.js、Zero、Fluid这类基于CRDT和操作变换的工具已经相当成熟，它们天生会处理冲突，离线和实时协作都是顺手的事&lt;br /&gt;5. 当我们把数据层从&quot;发通知&quot;升级到&quot;管时序&quot;后，离线优先和实时协作不再是昂贵的附加功能，而是正确架构带来的自然馈赠&lt;br /&gt;&lt;br /&gt;URL：&lt;br /&gt;&lt;a href=&quot;https://infrequently.org/2026/07/state-management&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://infrequently.org/2026/07/state-management&quot;&gt;https://infrequently.org/2026/07/state-management&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://infrequently.org/2026/07/state-management&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;It is by no means the gravest linguistic crime of the React epoch,1 but &amp;quot;state management&amp;quot; grates like nails on chalkboard. A Socratic dialogue I keep having about it goes something like this:&quot;&gt;
  &lt;i class=&quot;link_preview_right_image&quot; style=&quot;background-image:url(&apos;https://cdn4.telesco.pe/file/ikJwW7XtmRLraCtYYCU98eth1-gW6tZABXURyVahlK4DeVCx2q4ZW-GpUv8pXhNBJynRgGNB-8pkhsrRb1oOdMPFQ9GcwYYYJyKx2_246dZIbRuP0VVRejifERHTEtfMqvEthY27WJRAS-5Wqp9SkPcVI_XNkHWmd9yRkmPOS34i-e-SS9uL9QOozGTnezpHvhfM5LMkxZSmNck0D9I18sQk-Zm2znuBFHlMYkTb-9fCqRfwK06uTvUVyuukqZ0-Tl-WjUVPiPkQ5dnPfXTv0vtZR_nYDtwwUmkU8y5MXoNTGMq_ZpaG-xLuD_jur7PA4b1tP0iV01K4Xg9BXiefFQ.jpg&apos;)&quot;&gt;&lt;/i&gt;
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Infrequently Noted&lt;/div&gt;
  
  &lt;div class=&quot;link_preview_title&quot;&gt;The Absolute State of Management&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;It is by no means the gravest linguistic crime of the React epoch,1 but &quot;state management&quot; grates like nails on chalkboard. A Socratic dialogue I keep having about it goes something like this:&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《Color.js：认真对待颜色这件事》</title><link>https://channel.meo-ai.com/posts/684</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/684</guid><pubDate>Fri, 24 Jul 2026 15:51:25 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《Color.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=%23Web%E5%BC%80%E5%8F%91&quot; title=&quot;#Web开发&quot;&gt;#Web开发&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23ColorJS&quot; title=&quot;#ColorJS&quot;&gt;#ColorJS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CSS_Color_Level_4&quot; title=&quot;#CSS_Color_Level_4&quot;&gt;#CSS_Color_Level_4&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E9%A2%9C%E8%89%B2%E7%A9%BA%E9%97%B4%E8%BD%AC%E6%8D%A2&quot; title=&quot;#颜色空间转换&quot;&gt;#颜色空间转换&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E8%89%B2%E5%9F%9F%E6%98%A0%E5%B0%84&quot; title=&quot;#色域映射&quot;&gt;#色域映射&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23DeltaE&quot; title=&quot;#DeltaE&quot;&gt;#DeltaE&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TreeShakeable&quot; title=&quot;#TreeShakeable&quot;&gt;#TreeShakeable&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23NPM%E5%BA%93&quot; title=&quot;#NPM库&quot;&gt;#NPM库&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE&quot; title=&quot;#开源项目&quot;&gt;#开源项目&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Lea_Verou&quot; title=&quot;#Lea_Verou&quot;&gt;#Lea_Verou&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E9%A2%9C%E8%89%B2%E6%8F%92%E5%80%BC&quot; title=&quot;#颜色插值&quot;&gt;#颜色插值&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;由CSS颜色规范编辑者Lea_Verou和Chris_Lilley打造的专业颜色处理库，支持Lab/LCh、OKLab/OKLCh、Display_P3等海量颜色空间，完整兼容CSS_Color_Level_4。提供真正的色域映射、多种DeltaE色差算法和色度适应方法，API清晰易用且支持链式操作。模块化设计可tree-shake，零依赖，已被Sass、Open_Props、axe等知名项目采用，NPM累计下载超2.46亿次。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. 出身&quot;正规军&quot;——两位作者正是CSS颜色规范的编辑者，对颜色科学的理解刻在DNA里，不是随便写写的玩具库&lt;br /&gt;2. 颜色空间全家桶——Lab/LCh、OKLab/OKLCh、sRGB家族、Display_P3、Jzazbz、REC.2100等统统支持，转换随心所欲&lt;br /&gt;3. 科学严谨不糊弄——真正的色域映射而非粗暴裁剪，多种DeltaE色差计算和色度适应算法，专业度拉满&lt;br /&gt;4. API好用又灵活——面向对象+静态函数双模式，链式操作丝滑流畅，还能按需引入模块做tree-shake，包体积可控&lt;br /&gt;5. 业界认可度超高——浏览器用它测试CSS_Color_4/5实现，Sass、Open_Props、axe都在用，NPM下载量突破2.46亿&lt;br /&gt;6. 生态还在扩张中——除了核心库，还在孵化Color_Elements网页组件、Color_Apps工具集和Color_Palettes配色研究项目&lt;br /&gt;&lt;br /&gt;URL：&lt;a href=&quot;https://colorjs.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://colorjs.io&quot;&gt;https://colorjs.io&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>《200毫秒：一次HTTP请求的完整旅程》</title><link>https://channel.meo-ai.com/posts/677</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/677</guid><pubDate>Sat, 18 Jul 2026 15:24:57 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《200毫秒：一次HTTP请求的完整旅程》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%90%8E%E7%AB%AF&quot; title=&quot;#后端&quot;&gt;#后端&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=%23%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE&quot; title=&quot;#网络协议&quot;&gt;#网络协议&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TCP&quot; title=&quot;#TCP&quot;&gt;#TCP&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TLS&quot; title=&quot;#TLS&quot;&gt;#TLS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23DNS&quot; title=&quot;#DNS&quot;&gt;#DNS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23HTTP&quot; title=&quot;#HTTP&quot;&gt;#HTTP&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Postgres&quot; title=&quot;#Postgres&quot;&gt;#Postgres&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Linux%E5%86%85%E6%A0%B8&quot; title=&quot;#Linux内核&quot;&gt;#Linux内核&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Web%E6%80%A7%E8%83%BD&quot; title=&quot;#Web性能&quot;&gt;#Web性能&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;&lt;br /&gt;这是一个交互式可视化网站，以旧金山咖啡店一次点击购买为起点，逐帧追踪HTTP请求在211.4毫秒内穿越北美大陆的完整生命周期。从触摸板电容变化到屏幕像素刷新，文章以精确的时间轴拆解了硬件中断、浏览器事件循环、DNS解析、TCP/TLS握手、内核网络栈、Node.js事件循环、Postgres事务提交、光纤传输、Wi-Fi重传、GPU渲染等每个环节，揭示了&quot;冷启动&quot;请求中60%时间消耗在握手、35%在传输、而服务器实际计算仅占1.4%的惊人事实。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;&lt;br /&gt;1. 一次点击触发7层软件栈（触摸板→HID→窗口服务器→Chrome→渲染器→JavaScript→fetch）才发出第一个字节，而电容变化到网络请求离开仅需5毫秒&lt;br /&gt;2. DNS查询通过UDP在2毫秒内完成，依赖Anycast路由将请求导向最近的解析器；TLS 1.3将握手从2个RTT压缩到1个，但仍需127毫秒建立加密隧道&lt;br /&gt;3. 4,700公里光纤需6次穿越大陆，每次31毫秒；Wi-Fi碰撞重传仅需1.2毫秒，却足以容纳整个Postgres查询往返（0.35毫秒）&lt;br /&gt;4. 服务器端50微秒内完成从网卡DMA→NAPI轮询→TCP重组→epoll唤醒→Node.js读取→TLS解密→HTTP解析→路由到handler的全流程&lt;br /&gt;5. Postgres通过连接池、预编译语句和WAL组提交将INSERT优化至2.1毫秒，fsync强制刷盘是唯一的同步阻塞点&lt;br /&gt;6. 响应返回后，Chrome还需经历kqueue唤醒、TLS解密、React重渲染、样式计算、布局、绘制、合成，最终等待4.4毫秒VSync才显示&quot;Order confirmed&quot;&lt;br /&gt;7. 第二次&quot;热请求&quot;可复用TCP连接和TLS会话票证，将耗时从211毫秒降至约95毫秒，节省的116毫秒全是首次建立的连接成本&lt;br /&gt;&lt;br /&gt;URL：&lt;a href=&quot;https://200ms.thenodebook.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://200ms.thenodebook.com/&quot;&gt;https://200ms.thenodebook.com/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://200ms.thenodebook.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;A single HTTP request, traced in real time through DNS, TCP, TLS, the kernel, Node&apos;s event loop, and Postgres — then back to the pixel. Scroll distance equals time.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;The Nodebook&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;200 Milliseconds — the complete life of one HTTP request, visualized&quot; src=&quot;/static/https://cdn4.telesco.pe/file/t14I1JhXbyzPs7gW4Yn8zJrTsax5z-Qb3M9gn0ONO53sIhEFWNIdP7_FhiW_o9ERCu-nSn5dK1SLk_9hkMfrB9pv93oWF6rcqg4vWWyrZ-HqQ3QZLy9hSlzkaqJxBenvOvKXT3Ew3A8HJnaEG7XJDmFA6OMVe5KIeM9Xw0nQNXUyRqCkYsGcmEopxeUxp6vBfTOe-9vyA9HG1JaewSc0SD7AsIHV9gpUaBjXqHvPTxfe457Yh3t_UK7DFhn9O9rZwEc8u3MMzQsQOBHZNMEdH0bAF8QztT4BkTRcLD8x-YzCWrTadmhslK12wNVgsmPJ_HQ3RceRazGqAGbaYdT-7w.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;200 Milliseconds — the complete life of one HTTP request, visualized&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;A single HTTP request, traced in real time through DNS, TCP, TLS, the kernel, Node&apos;s event loop, and Postgres — then back to the pixel. Scroll distance equals time.&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>《Express全新面貌》</title><link>https://channel.meo-ai.com/posts/638</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/638</guid><pubDate>Fri, 22 May 2026 10:19:28 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《Express全新面貌》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%90%8E%E7%AB%AF&quot; title=&quot;#后端&quot;&gt;#后端&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=%23ExpressJS&quot; title=&quot;#ExpressJS&quot;&gt;#ExpressJS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Web%E6%A1%86%E6%9E%B6&quot; title=&quot;#Web框架&quot;&gt;#Web框架&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%96%87%E6%A1%A3%E9%87%8D%E6%9E%84&quot; title=&quot;#文档重构&quot;&gt;#文档重构&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%BC%80%E6%BA%90%E7%A4%BE%E5%8C%BA&quot; title=&quot;#开源社区&quot;&gt;#开源社区&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;Express官方博客宣布完成网站全面重构与品牌焕新，涵盖Astro技术栈迁移、AI智能搜索、版本化文档及全新Logo设计，标志着这个Node.js生态老牌框架在2024年重启后进入新阶段。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. 网站底层从Jekyll迁移到Astro，带来更灵活的组件模型、国际化支持和内容页性能提升，文档生成与维护方式也一并升级&lt;br /&gt;2. 文档新增多版本并行浏览，Express 4和5的文档可以独立查看，告别版本混淆的烦恼&lt;br /&gt;3. 搜索接入了Orama的AI能力，支持自然语言提问，找API和概念更快更准&lt;br /&gt;4. 全站文档开放了&lt;code&gt;llms.txt&lt;/code&gt;端点，方便大模型和AI助手直接读取最新文档&lt;br /&gt;5. 接下来的重点是补齐内容缺口、完善多语言翻译，并让文档和新版本同步发布&lt;br /&gt;6. 新Logo由社区公开协作设计，品牌定位为&quot;Established·Dependable·Approachable&quot;，延续极简风格的同时开启新篇章&lt;br /&gt;&lt;br /&gt;URL：&lt;br /&gt;&lt;a href=&quot;https://expressjs.com/en/blog/2026-05-18-a-new-look-for-express/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://expressjs.com/en/blog/2026-05-18-a-new-look-for-express/&quot;&gt;https://expressjs.com/en/blog/2026-05-18-a-new-look-for-express/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://expressjs.com/en/blog/2026-05-18-a-new-look-for-express&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Discover the redesigned Express.js website and our brand-new logo, built from the ground up with Astro.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Express.js&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;A New Look for Express · Express.js&quot; src=&quot;/static/https://cdn4.telesco.pe/file/wA2caV0UkMmeoh17rgLVtNzvyWKWs1ADySiANFvKMtX7ZjtizXJfc3N3ubErisnP0Q7WJz8Ojg4VA9KkMr3kmZ61N2zKVCDsvF5LaiWlEwtjgrLyeVFUCsR5Qmwy8GKgotri1m0XfksU5n6u1Z5suVQpqRG4JjJxq23hcAagl8KjogAisdPdu2Z4izIU2tQ14SI-CgxZrG3WSB9llO4cdZZpYqjj61QO_SsR9wVK0ZxYTRGhOeLE5spJXn6UntHL1oELl91xEUzTV7GXqlXV3wS3H_lEekLvx0-8ytmOSDfvhCNEPMHus2Bzz1_Jan-Pu8A8IcxBXvlxFXhVfJuiTQ.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;A New Look for Express · Express.js&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Discover the redesigned Express.js website and our brand-new logo, built from the ground up with Astro.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《设计高性能表单：5个基于研究的UX原则》</title><link>https://channel.meo-ai.com/posts/584</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/584</guid><pubDate>Thu, 26 Mar 2026 00:03:13 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《设计高性能表单：5个基于研究的UX原则》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23UX%E8%AE%BE%E8%AE%A1&quot; title=&quot;#UX设计&quot;&gt;#UX设计&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E8%A1%A8%E5%8D%95%E8%AE%BE%E8%AE%A1&quot; title=&quot;#表单设计&quot;&gt;#表单设计&lt;/a&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=%23Web%E5%8F%AF%E7%94%A8%E6%80%A7&quot; title=&quot;#Web可用性&quot;&gt;#Web可用性&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E4%BA%A4%E4%BA%92%E8%AE%BE%E8%AE%A1&quot; title=&quot;#交互设计&quot;&gt;#交互设计&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E7%94%A8%E6%88%B7%E7%A0%94%E7%A9%B6&quot; title=&quot;#用户研究&quot;&gt;#用户研究&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;&lt;br /&gt;本文基于Baymard Institute等权威机构的可用性研究，提出了5个提升表单性能的核心UX原则：精简字段数量、采用单列布局、明确标注必填与选填字段、实施正确的即时验证时机，以及优化移动端输入体验。这些原则能有效降低用户放弃率（约26%用户因表单复杂而放弃），提升完成效率与满意度，是构建高转化率表单的设计基石。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;&lt;br /&gt;- 精简字段数量：平均电商结账流程包含11.3个字段，但高性能网站仅需6-8个即可完成交易。多余的字段会增加认知负担，约26%的用户因表单复杂而放弃购买。建议移除或折叠可选字段，除非确有必要&lt;br /&gt;&lt;br /&gt;- 单列布局更友好：多列布局在静态设计稿中看起来美观，但可用性测试表明用户容易误读字段顺序。人眼不会自然地&quot;之字形&quot;扫描多列表单，单列布局提升可读性，支持自然阅读习惯，在桌面和移动端都表现可靠&lt;br /&gt;&lt;br /&gt;- 明确标注必填与选填字段：不要假设用户能推断哪些字段是必填的。研究显示，近三分之一用户在仅标注选填字段时会遗漏必填项。可靠的做法是统一标注所有字段状态（&quot;必填&quot;或&quot;选填&quot;），标签应紧邻字段标签放置&lt;br /&gt;&lt;br /&gt;- 即时验证的时机很重要：正确实施的即时验证可提升表单成功率约22%，缩短完成时间40%以上，提高用户满意度30%以上。但不要在每输入一个字符时就验证（会增加认知负荷），建议在失焦时或字段完成后验证。错误提示应具体说明问题及修正方法，验证指示器应紧邻字段显示&lt;br /&gt;&lt;br /&gt;- 优化移动端输入体验：避免将电话号码等输入拆分为多个字段，这会提高错误率和完成时间。确保触发合适的键盘类型（数字键盘用于卡号、邮箱键盘用于邮箱输入）。启用自动填充功能，Google研究显示这可减少30%以上的完成时间。允许粘贴完整值，不要阻止粘贴操作&lt;br /&gt;&lt;br /&gt;文章URL：&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://designmybit.com/designing-high-performance-forms-5-research-backed-ux-principles/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://designmybit.com/designing-high-performance-forms-5-research-backed-ux-principles/&quot;&gt;https://designmybit.com/designing-high-performance-forms-5-research-backed-ux-principles/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://designmybit.com/designing-high-performance-forms-5-research-backed-ux-principles&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Forms often cause more abandonment than any other UI component.UX research quantifies this: many checkout flows require 11‑13 fields, though studies show only 6‑8 are necessary when well optimised.Here are five principles grounded in peer‑reviewed…&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;The UX Bit&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Designing high-performance forms: 5 research-backed UX principles - The UX Bit&quot; src=&quot;/static/https://cdn4.telesco.pe/file/BLhhA3Fb8vfyI8ihf-nBU5sdHDiM2tgYHCDISdN-L_MymqIpJ1GgHPoEiRTSOV0S9YMSNOPOG2Ets4OfGax4hsEgDbxT2vomeStEhHPUrGvm-9d1sllCeW2hvGw4REQIsHFtuuaJ9ARsVux6RZH47GzHy-rjw3iBay9p03KoivcLQEh2us0XWYiUZELixjj4vBTQeAireRA63V9fAxYOIMlrSwSY9XUtHZXmtp3sE02ZvzAz4yxfcgAXzu1fqRfpm1ttjQ82WL6waiquJuy0Snkv2emED9t75uK-Fn7HJqHyMGcP03kyTk6Le_LXlKasS6AeXQoqi1SWzQLSzPgHqw.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;Designing high-performance forms: 5 research-backed UX principles - The UX Bit&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Forms often cause more abandonment than any other UI component.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;UX research quantifies this: many checkout flows require 11‑13 fields, though studies show only 6‑8 are necessary when well optimised.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here are five principles grounded in peer‑reviewed…&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《原生JSON模块终于成为现实》</title><link>https://channel.meo-ai.com/posts/576</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/576</guid><pubDate>Wed, 18 Mar 2026 01:43:35 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《原生JSON模块终于成为现实》&lt;/span&gt;&lt;br /&gt;&lt;br /&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=%23ESModules&quot; title=&quot;#ESModules&quot;&gt;#ESModules&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23JSON&quot; title=&quot;#JSON&quot;&gt;#JSON&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Web%E6%A0%87%E5%87%86&quot; title=&quot;#Web标准&quot;&gt;#Web标准&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：本文介绍了JavaScript平台原生支持JSON模块导入的新特性。通过使用&lt;code&gt;import attributes&lt;/code&gt;语法&lt;code&gt;with { type: &quot;json&quot; }&lt;/code&gt;，开发者现在可以在浏览器、Node.js、Deno和Bun中直接导入JSON文件，无需构建工具转换。这标志着从构建时模拟到运行时原生支持的转变，使模块系统更加显式和可扩展。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;- 使用&lt;code&gt;import config from &quot;./config.json&quot; with { type: &quot;json&quot; }&lt;/code&gt;语法实现原生JSON导入，替代了以往需要打包工具转换的方式&lt;br /&gt;- 动态导入同样支持：&lt;code&gt;await import(&quot;./config.json&quot;, { with: { type: &quot;json&quot; } })&lt;/code&gt;&lt;br /&gt;- 导入的JSON会被解析一次并缓存，多次导入返回同一对象实例（&lt;code&gt;a === b&lt;/code&gt;为true）&lt;br /&gt;- 浏览器仍需服务器返回&lt;code&gt;Content-Type: application/json&lt;/code&gt;，并遵循CORS规则&lt;br /&gt;- 与打包工具方案对比：原生方案在运行时获取文件，而打包工具通常在构建时内联JSON&lt;br /&gt;- 此特性不仅限于JSON，已扩展支持CSS模块脚本（&lt;code&gt;with { type: &quot;css&quot; }&lt;/code&gt;），为未来其他结构化模块类型建立模式&lt;br /&gt;- 现代浏览器、Node.js、Deno、Bun均已支持该特性，但打包工具在代码分割、资源哈希等方面仍有价值&lt;br /&gt;&lt;br /&gt;文章URL：&lt;a href=&quot;https://allthingssmitty.com/2026/03/16/native-json-modules-are-finally-real/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://allthingssmitty.com/2026/03/16/native-json-modules-are-finally-real/&quot;&gt;https://allthingssmitty.com/2026/03/16/native-json-modules-are-finally-real/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://allthingssmitty.com/2026/03/16/native-json-modules-are-finally-real&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;JSON imports finally work natively. Learn how import ... with { type: &apos;json&apos; } changes runtime behavior, caching, and makes bundlers optional.&quot;&gt;
  &lt;i class=&quot;link_preview_right_image&quot; style=&quot;background-image:url(&apos;https://cdn4.telesco.pe/file/WN5gYHdJxxyjhkTgck1yzTf1hu3GVGPgTf7sTJjL1R4FDEQxWgnaKsxJTN74xI6ToumUaGyPU4tKOxWG1OX_cDOzLdEQQLdFuL7_vckUQlocyH7yD1Ajpwy6zfsc_aE4EQGUUsiMxWydbksynuRCtpteUyQZvzDFHKWkFfZ3Vg2EoOLFiUJVyNsOxbU8_DDw-QBlaMPOrByqIZprutZc7ebjn4bjTPi2GlwbbkUPqqozRQPrVoJo6ghcZ_UqyqNNMv_toySloGJNHPpRh2kU7Oe2NJtSXcTb2nbIUgZODpzcbQn1QkEEABEy6rZtZVGie_kvMXZ6JHnrstj4_Xbw2Q.jpg&apos;)&quot;&gt;&lt;/i&gt;
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Allthingssmitty&lt;/div&gt;
  
  &lt;div class=&quot;link_preview_title&quot;&gt;Native JSON modules are finally real - Matt Smith&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;JSON imports finally work natively. Learn how import ... with { type: &apos;json&apos; } changes runtime behavior, caching, and makes bundlers optional.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item></channel></rss>