求助:Github+Cloudflare部署的PhaserJS网页游戏无法在线更新
已访问过PhaserJS游戏页面的用户无法加载1.1新版本的排查与解决
问题背景
我用PhaserJS开发的游戏推送1.1版本后,从未访问过页面的用户能正常看到新版本,但所有已访问过的用户刷新后仍显示1.0版本,网站其他页面更新正常。
已尝试的无效操作
- 清除本地浏览器缓存
- 在Cloudflare中清除全部缓存并开启开发者模式(绕过客户端缓存)
- 清空游戏核心文件
index.js代码后重新部署 - 删除Github上整个游戏目录后重新推送新代码
可行的排查与解决方向
1. 检查静态资源的缓存头配置
PhaserJS游戏依赖的index.js、纹理、音频等静态资源,如果HTTP响应头设置了过长的Cache-Control(例如max-age=31536000),边缘节点或浏览器可能仍留存旧资源:
- 登录Cloudflare查看游戏目录的专属缓存规则,确认是否存在覆盖全局设置的策略;
- 检查服务器返回的
Cache-Control、ETag、Last-Modified字段,确保资源更新时能触发重新请求。
2. 为资源添加内容哈希(Content Hash)
这是解决静态资源缓存问题的标准方案:资源内容变化时,文件名同步加上哈希值(如index.abc123.js),浏览器会自动识别新文件名并请求最新资源:
- 若使用Webpack、Vite等构建工具,配置输出文件名加入
[contenthash]即可自动生成; - 手动维护文件的话,每次更新后修改文件名,并同步更新HTML中的资源引用路径。
3. 排查Service Worker缓存
如果页面注册了Service Worker,它会在后台独立缓存资源,普通缓存清除操作无法触及其更新:
- 打开浏览器开发者工具的
Application面板,找到Service Workers选项,手动注销对应的Service Worker后刷新页面; - 确认新版本代码中更新了Service Worker逻辑,或在不需要时移除注册代码。
4. 精准清除Cloudflare缓存
全局缓存清除可能未覆盖特定资源路径,尝试针对游戏目录的具体资源(如/minigames/greenearth/index.js)单独执行缓存清除操作。
5. 检查硬编码的资源版本参数
确认HTML文件中的资源引用是否写死了旧版本参数,比如<script src="index.js?v=1.0"></script>,需同步将版本号更新为v=1.1。
内容的提问来源于stack exchange,提问作者LeftClickMage
相关产品推荐
相关产品推荐

