标签 vercel 下的文章

折腾一圈,这个Typecho博客又从Vercel回到了独立VPS主机上

之前腾讯云大量代理商低价代购腾讯轻量云的时候,购入了三年,为此还把我的搬瓦工转让给了别人,到期后无服务器可用,就把大部分服务转移到的家里的NAS或者Vercel、Cloudflare等这些公司提供的公共服务上。

大部分服务运行的都没太大问题,唯独这个基于Typecho的博客系统最难绷,我说的不是PHP性能问题,而且架构问题,会导致数据库流量消耗非常快。

我在Vercel上时,使用的是Neon提供的500MB存储、每个月5G流量的postgresql套餐,这其实足够我用的了,我博客没啥东西,实际转移过来数据后只用了30MB左右,但是流量却总是不够用,为什么呢,这就要说Typecho的垃圾优化了。

以首页为例,打开首页默认加载20条博客内容,看起来从数据库1条sql查询20条数据就够了对吧,如果需要补充上每条博客内容对应的分类、标签、评论人数,那假定都分开查询,大概是这样:

  • 1条sql查20条博客
  • 1条sql查这些博客对应的分类
  • 1条sql查这些博客对应的全部标签
  • 1条sql统计这些博客的评论数
  • 1条sql查右侧边栏的最新文章
  • 1条sql查右侧的最新评论
  • 1条sql统计游戏的归档信息

看起来10条以内的sql就够了,这点文本也不会消耗多少流量,实际呢?打开首页大概会发生200多条sql查询,为什么呢,因为Typecho的实际查询方式是一次性查出来20条博客,然后循环遍历渲染,渲染的过程中去查每条博客对应的分类、标签、评论等信息然后右侧的小组件也是这样。

因为流量消耗太快,我后来尝试写了一个Cloudflare R2的适配器,因为R2给的免费额度更高,结果调试的过程中,首页直接打不开!!!为什么呢,因为一次性几百条sql查询,走网络请求,太慢了,必然超时,100%,没有一次能完成打开。

都说这是一个轻量级的博客系统,感觉轻量的只是外观和功能,其实内部实现挺复杂的,各种设计模式魔术方法代理等,调试起来其实挺费劲的。

其实在最终回到传统VPS之前,我还尝试过Hugo、Hexo、Jekyll、NotionNext等各种系统,最后还是觉得这种有后台,随时写随机发布的用起来更省事,也不用执行什么脚本,也不用考虑图片、文件上传问题。

当然了我也不是为了这个博客才买的VPS,主要还是有其他需求,毕竟Cloudflare Tunnel稳定性还是没那么高的,有些服务隔三岔五的就打不开,加上Racknerd刚好黑五大促,就买了一台,可能超售,可能虚标,可能打开慢,但毕竟能用。