· 3 分钟
构建时脚本设置
五一没回家。
倒不是不想回,是广州这b地到太原太远了,五天假去掉一半在路上,而且家里也忙。
上半月做好了光标和追番,刚好追番有现成的astro-bangumi,崭新发布啊我草。
进度有点慢,主要不是我磨洋工,实在平时太忙了,只是work sometime in gap
然后就是朋友圈和 Steam 游戏库这两天一直在抽风。
有时候打开能正常显示,有时候白屏,有时候转半天圈最后报个错,结果真的自己手动去fetch直接秒出我服了。

五一还去了网吧,从学校到最近的网吧都得三十里地。。
友圈
朋友圈用的是改版的 hexo-circle-of-friends,自己部署的,跑在服务器上。原理是定时爬取友链站的 RSS,聚合成一个 API,返回所有友链的最新文章。
服务本身没问题,问题出在网络和内存。除了老生常谈的网络问题,这个服务自己也有抽风的时候,内存涨上去就 OOM 了。
之前是在页面里直接 fetch 朋友圈 API,等它响应。API 抽风的时候页面就卡住,用户体验很差。
Steam
Steam 游戏库用的是 Steam Web API,GetOwnedGames 接口。这个接口倒是稳定,但慢。每次请求要等一两秒,页面打开就卡在那,干瞪眼。
而且 Steam API 有个限制,同一个 key 每秒请求次数有限,并发流量非常可能限流。
解决
追番那块已经用了构建时拉数据的方案,效果很好。朋友圈和 Steam 我选择照搬。
在 scripts/fetch-external-data.mjs 里加了两个函数,一个拉朋友圈一个拉 Steam,构建前一起跑。拉下来的数据写成 JSON 存到 content/data/ 目录下:
circle-data.json:友链朋友圈最新文章steam-data.json:Steam 游戏库列表
页面直接读本地 JSON,不依赖运行时网络请求。构建时拉失败的话,还有 content/fallback/ 下的兜底数据,不至于白屏。
兜底
老实说兜底数据很重要,没数据的白屏看着不够合乎周礼。
Steam 的兜底数据是手动导出的一份游戏列表,朋友圈的兜底是上次成功拉取的存档。
反正都是展示用的,最主要的还是给我自己一个人看的,旧一点无所谓。
效果
改完之后秒开仙人啊马上。
代价是数据不是实时的。这个得看影响怎么样,要不然就天天写文章,要不然就整个脚本定时构建就行了,网站最后是github pages和netlify pages,反正不担心麻烦
Steam 游戏库更无所谓了,这个tradeoff蛮划算的。
顺便
顺便把 B 站追番的数据也并进来了,fetch-external-data.mjs一个脚本,来了鹅城,只办三件事!追番!朋友圈!Steam!构建网页的时候先运行这个脚本,再跑 Astro build,最后跑 postbuild.mjs 做后处理。
package.json :
"build": "node scripts/fetch-external-data.mjs && astro build && node scripts/postbuild.mjs"
COMMENTS
留言