再见 Next.js,我用 AI 写了个定制框架

The cover of Ariana Grande's album Thank U, Next: the title repeated in many fonts on a pink background

最近关于定制/个人软件和大型语言模型(LLM)的讨论很多。我一直是它的超级粉丝——我写这篇文章时正处于一个Markdown 编辑器我为自己创造了。最近我一直在思考框架的未来。两者巧妙交汇,似乎是一个个人框架。

所以从9月1日起,这个网站不再运行在Next.js上。取而代之的是,它由Fable架构和Opus实现的定制定制框架构建。如果这是商业项目,我可能会继续用Next,但事实并非🤷如此

本网站整体上是相当简单- 它是完全静态的,构建时会编译成 HTML。但它需要大量 React 和一些不简单的构建时处理,比如MDX.我给《Fable 5》(用claude代码CLI)赋予了以下内容:

我对用AI进行按需编码很感兴趣——Claude能否理论上打造一个按需定制的“网络框架”,更快比专门为这个网站设计的NextJS还要好吗?它能支持我们需要的那些功能吗?它还能部署到Vercel吗?帮我在这里看看情况,如果可行我们会发货——你负责协调Opus子代理。用OPUS做任何子代理,因为你是一个非常棒的类似AGI但价格昂贵的模型。一定要仔细操作[原文如此]

~3小时工作后,我终于有了东西可以看。

我就让数字自己说话吧:

之前与之后

Next.js定制变化
主页
HTML24.7 KB16.3 KB-34%
JavaScript,渴望208 KB,11个文件2.3 KB (1 KB inline runtime + analytics)-99%
JavaScript,首次绘制后没有,大家都很渴望10.6 KB(桌面窗口管理器)
JavaScript,按需1.8 KB(命令调色板,第一个 Cmd+K)
灯塔移动98,LCP 2.4秒,重量1,153 KB100 台,LCP 1.3秒,78 KB 重量LCP -46%,重量 -93%
博客文章
HTML20.6 KB11.6 KB-44%
JavaScript200 KB,11个文件2.3 KB-99%
灯塔移动99,LCP 2.2秒,405 KB 重100,LCP 1.1秒,57 KB 重量LCP -50%,重量-86%
软导航有效载荷RSC飞行,每个链路0.7至29 KB3 KB 部分(Safari/Firefox)或预渲染页面(Chrome/Edge)
构建与回收
暖气全装2.4秒0.5秒-79%
Vercel构建(平均)28秒11秒-61%
锁文件中的包706550-22%

这是会话统计数据(大部分墙上时间和持续时间是我的笔记本处于睡眠状态):

Total cost:            $669.45
Total duration (API):  8h 27m 17s
Total duration (wall): 1d 1h 34m
Total code changes:    20914 lines added, 2022 lines removed
Usage by model:
    claude-haiku-4-5:  272.7k input, 12.8k output, 0 cache read, 0 cache write, 5 web search ($0.3869)
      claude-fable-5:  57.4k input, 165.3k output, 66.8m cache read, 2.8m cache write ($131.09)
       claude-opus-5:  547.6k input, 2.0m output, 562.9m cache read, 32.5m cache write ($537.98)
Prompt cache (main):   195 requests · 95% of input tokens from cache · 6 misses (last 16s ago, 2.5m tokens re-cached) · warm (1h TTL, last activity 16s ago)

它用了我 Claude Code 20x 订阅的 ~10%。

注意,自从这些数据记录下来后,我做了一些小的修改和改进,但我估计这些数据覆盖了95%的工作。

你可以试试这个网站的 Next.js 版本next.maxleiter.com.

工作原理

以下内容由Claude撰写,我编辑:

  • 它更像是一个构建脚本,而不是一个框架。build.ts阅读次数posts/,在服务器端用React渲染每条路径到静态index.html,并写入Vercel 构建输出目录。我的M2 MBP构建时间是热~半秒。
  • MDX 在构建时每个文件编译一次,使用之前相同的备注和 rehype 插件。在构建时用 shiki 执行语法高亮,将两个主题都导出到 HTML,因此主题切换无需 JavaScript。
  • 博客/内容页面完全没有JavaScript,只有一个2KB的内嵌脚本,负责主题切换、Cmd+K和懒人岛加载。
  • 岛屿用于交互性。桌面窗口管理器和命令调色板是 Preact 组件,它们会在服务器渲染的标记上进行水合,仅加载在使用它们的页面上。调色板加载时按 Cmd+K 键。Preact 通过其 React 兼容层的 7 KB,而 React 的 52 KB。
  • 图像优化、不可变资产缓存、重定向和分析都来自 Build Output API 的配置和 Vercel。
  • Claude编写了一个“奇偶校验框架”。它快照了Next网站的所有101条路由,并在每次变更时将不同头标签、可见的文字和代码块对比新构建。它发现(并修复了)八篇未发布的帖子泄漏到RSS源中,还有一张404ing的原始图片。

为什么要这样做?

原因有很多。首先,你可以递归地运行这样的循环,替换大部分甚至全部依赖,从而消除大量供应链攻击.你只卖你需要的,别无他物,这正是这个框架——网站实际使用的Next.js部分。第二,这个框架是5,000行;无论是人类还是模型都能轻松审查。Next.js和React有数十万个。

当然,如果我选择一个更简单的静态站点生成器,切换到Python之类的,这一切可能会简单得多。这些(大部分)都是真的,但这只是软件未来的演示,不仅仅是静态站点。

缺点

有很多。

  1. 我相信有成百上千个小的优化和修复Next.js LLM不知道/无法复现的
  2. 还有许多刻意省略的功能,比如没有代理的框架MCP。Claude-in-Chrome 对我来说已经足够了。
  3. 根据你更换的设备,可能会遇到过时的安全问题,这些问题会在上游修复。但这里不适用,因为这是一个静态站点。
  4. 现在你拥有它了。漏洞、安全问题和功能请求现在由你来处理。

Claude遇到的两个浏览器问题,推测由Next处理:

  1. Chrome / 跨文档视图切换。当目标页面中有外部文件时,Chrome 会悄无声息地跳过跨文档视图过渡的入站部分<head>.内联模块脚本不会触发它。用两页控制页一分为二;这就是运行时被内嵌到每个页面而不是链接的原因。
  2. WebKit / Speculation 规则。Safari 硬代码HTMLScriptElement.supports('speculationrules')在只实现预取的一半时将 为真,并且它会暴露 nodocument.prerendering.所以“此浏览器可以预渲染”的功能检测需要同时检查。

这意味着什么?

我觉得试图从软件工程的零星解读是徒劳的。谁知道模型六个月后会变成什么样子,更别说两三年了。但我还是会试试看:

显然,我们会看到供应商和代理重写(“slop forks”)的增加。我们已经看到这个:Bun自主重写了从Zig到RustCloudflare也做了类似的事维内克斯.

更极端的看法是,框架终将消失。

从上面Chrome和WebKit的问题中可以看出,重要的是框架中内置的庞大知识。这些知识可以提炼成技能或未来的标准——也许是框架的继任者。

注释

  1. 目前谁知道我的看法会是什么,模型一年后会在哪里
  2. https://web.archive.org/web/20260228224244/https://slopforks.com/
添加评论
点赞收藏
点踩分享查看原文
评论
?
参与讨论