解决困扰我多时的JS重复请求问题

解决困扰我多时的JS重复请求问题

2025-11-18
这篇文章记录了博客在接入动态访问量统计后,因 Swup 处理不当而产生重复请求的问题,以及最终的排查与修复过程

正式开始

正如标题所说,我的博客是在 saicaca/fuwari: ✨A static blog template built with Astro. 的基础上深度改造而来的。

和 Fuwari 原版一样,它本质上仍然是一个 静态博客:文章以 Markdown 文件形式维护,构建后输出为 HTML。

但原项目在设计之初并没有重点考虑 动态功能,例如我现在用到的 访问量显示,因此后续接入这类能力时就容易出现一些问题。

关于访问量显示的整体思路,我已经在 这篇文章 中讲过。简单来说,它分为两步:1. 先获取全局分享 Token;2. 再使用这个 Token 请求实际访问量数据。

当时出现了一个比较奇怪的问题:第一步会发生多次重复请求。分析之后我发现,博客里有三个位置都用了同一套逻辑,而且彼此独立。也就是说,用户一打开页面,博客既会获取全站访问量,也会同时请求首屏几篇文章的访问量。

但这个全局分享 Token 在很长一段时间内其实都不会变化,这就导致出现了不少冗余请求。为了解决这个问题,我当时写了一个中间层:首次请求后把 Token 缓存在用户浏览器里,后续直接复用,不再重复请求。

不过后来还是有读者发现,某些页面依旧会多次请求 Umami,如图所示:

于是他提交了一个 issue:Bug: 站内转跳时由于swup处理不当导致的多umami实例 · Issue #79 · afoim/fuwari。问题的核心是 Swup 不应该接管这类脚本资源,把相关 JS 排除后,问题确实得到了解决。

按 issue 中的方法调整后,我们随便打开一个页面,再来分析一次请求情况: 我们只看Umami请求:

到这里,问题就算彻底解决了:没有多余实例,也没有冗余请求,整体请求链路也干净了很多。