kyo5uke/sushidash
GitHub: kyo5uke/sushidash
一款用于加速网页游戏「寿司打」Unity WebGL 加载速度的 Chrome 扩展,通过动态修补二进制数据跳过启动画面并缓存资源文件。
Stars: 0 | Forks: 0
# sushidash
[English](README.en.md) | 日本語
加速寿司打 (Unity WebGL) 加载速度的 Chrome 扩展。
[](https://github.com/kyo5uke/sushidash/actions/workflows/ci.yml)
[](LICENSE)

```
[sushidash] patcher initialized (XHR override active)
[sushidash] intercepting XHR: https://sushida.net/files/v1_3/Web.data.unityweb
[sushidash] splash byte patched at block 0 offset 4200
[sushidash] web.data patched in 12.4ms: 7411331 → 7490398 B
[sushidash] cache stored: Web.data.unityweb (7,490,398 B)
[sushidash] canvas first draw via drawArrays
```
每次打开寿司打都要盯着 Unity 的 Neutral logo (splash) 看 2 秒,实在是太无聊了。sushidash 不会将文件打包,而是在浏览器中动态修补 `Web.data.unityweb` 以跳过 splash,并将 3 个 `.unityweb` 文件缓存到 Cache Storage 中,使得第 2 次及以后的加载实现零网络请求。
这是一个为了个人学习而制作的非官方扩展,与 sushida.net 的运营方无关。
关于如何重写二进制文件(UnityWebData / UnityFS / LZ4 / splash byte)的细节,我详细写在了 [Zenn 文章](https://zenn.dev/kyo5uke/articles/ec6eb050427880) 中。
## 功能
- 关闭 Unity splash (Neutral logo) — 启动缩短约 2 秒
- 将 3 个 `.unityweb` 文件保存到 Cache Storage — 第 2 次及以后实现零网络请求
- 在 `document_start` 阶段预取 3 个文件 — 首次加载也能通过并行下载提前进行
- 为 canvas 添加 500ms 的 fade-in 效果
- 将广告 (AdSense) 延迟至 canvas 首次绘制 +1.5 秒后显示(最终必定会显示)
## 安装说明
从 [Releases](https://github.com/kyo5uke/sushidash/releases) 下载最新的 `sushidash-*.zip` 并解压,然后
1. 打开 `chrome://extensions/`
2. 打开右上角的“开发者模式”
3. 点击“加载已解压的扩展程序” -> 选择解压后的文件夹
从源码安装(面向开发者):
```
git clone https://github.com/kyo5uke/sushidash
```
进行克隆,然后在步骤 3 中选择 `src/` 文件夹。
扩展程序本身不包含游戏主体(`.unityweb`)。补丁每次都会针对从 sushida.net 获取的实时数据在浏览器内进行应用。
## 使用方法
只需打开 [sushida.net/play.html](https://sushida.net/play.html)。如果没有出现 Neutral logo,并且游戏画面直接淡入,则说明运行成功。DevTools 的 Console 中会输出 `[sushidash]` 的日志。
| 日志 | 含义 |
| --- | --- |
| `splash byte patched at block 0 offset N` | splash 补丁成功 |
| `web.data patched in Xms: A → B` | 补丁执行时间及前后大小 |
| `cache stored: ...` | 已保存到 Cache Storage |
| `cache hit (XHR/fetch): ...` | 第 2 次及以后,从缓存中提供 |
| `prefetched: ...` | 预取完成 |
| `canvas first draw via ...` | 游戏画面开始渲染 |
可以通过 `src/enhance.js` 开头的 `CONFIG`(fade 时间、广告延迟等)来调整运行行为。
## 原理(简述)
文件不包含在扩展中,而是在浏览器内动态进行重写。
1. 在 `document_start` 阶段拦截 `XMLHttpRequest` / `fetch`
2. 展开 `Web.data.unityweb`(UnityWebData -> UnityFS -> LZ4 块),将 splash 标志的 1 个字节从 `0x01 -> 0x00`
3. 由于没有实现 LZ4 编码器,因此重写后的块将以未压缩的形式写回(数据会因此增加约 80KB)
4. 将已打补丁的数据保存到 Cache Storage,第 2 次及以后将从这里提供
关于二进制的解析步骤和遇到的坑,请参考 [Zenn 文章](https://zenn.dev/kyo5uke/articles/ec6eb050427880)。
## 注意事项
- 这是一个非官方扩展。请各自确认 sushida.net 的使用条款。
- 如果网站端更新了文件版本 (`v1_3`),splash 补丁将变为 no-op,并恢复原始行为(故障安全)。预取会返回 404 并在 Console 中输出 warn,请更新 `patcher.js` 中的 `PREFETCH_VERSION`。
- 由于没有实现 LZ4 编码器,首块将以未压缩形式写回。Unity 读取的数据会增加约 80KB(从 sushida.net 的传输量是不变的)。
- 广告会延迟约 1.5 秒显示。
## 许可证
[MIT](LICENSE)
标签:CMS安全, JavaScript, Unity WebGL, Web性能优化, 数据可视化, 浏览器扩展, 游戏辅助, 缓存管理, 自定义脚本