最近一段时间一直在做 https://bataitools.com/ 然后部署在 Cloudflare ,中间一直遇到 CPU LIMIT 的问题,说一下历程,这个问题也有点让我无语,毕竟是这么简单的一个小导航站。
1 、最开始我是 NEXT.JS (由于有动态 URL ,所以当时使用了是服务端模式),然后使用 OpenNext 总是遇到 CPU LIMIT (我后来怀疑是我没有配置好,或者部分代码写的不太好导致,可惜架构已经切换了)。
2 、通过和 AI 沟通,因为代码已经很多,推荐切换到 React Router 7 ,最后发现还是有 CPU LIMIT 。
3 、开始优化数据库查询性能,创建索引,减少查询复杂度,引入 cache ,结果发现还是偶发 CPU LIMIT 。
4 、最后在前端加入了一个自定义的 edge cache ,确实好了很多,基本上没有 CPU LIMIT ,但是感觉这怪怪的,而且首页会偶发 CPU LIMIT 。
5 、终极方案,首页内容多,查询条件多,直接使用定时任务跑 cache ,首页直接拿 cache 就好了,这个时候真的基本上没有啥问题了。
6 、最后发现在某一些页面还是有 cpu limit ,最后发现是动态加载元数据导致,然后把 react router 的配置修改为 routeDiscovery: { mode: 'initial' }, 但是页面会增加 19kb 的内容(压缩以后得)。
7 、最后把页面的 CDN cache 打开,缓存 5 分钟,基本上没有 cpu limit ,但是会在摸个时间突发 cpu limit ,在这个时间会看到后台有很多 cpu limit 的错误。
我的网站实际上很简单,什么鬼业务都没有,我还真不知道为什么会出现这种问题,不知道免费的是不是就这样。
有熟悉的小伙伴出现评论一下,你们都使用啥框架呀?这个问题前前后后感觉折腾也挺长时间了,如果整体换 Astro 感觉最好,但是换 Astro 代码要完全重构了,涉及的东西也挺多,就算 AI 改写,很多东西也会有问题。