本项目早期灵感来源于 HostLoc 论坛上的一篇帖子,当时测试了一下自己的网站,因为该网站没有配置任何访问频率限制,结果很轻松的就将服务器资源给占满了,觉得这个小工具挺有意思的,就想着自己也搭建一个用来给网站进行请求基准测试。
经过对原作者 @主机玩家 询问是否开放源代码,最终没有收到答复,于是决定自己动手写一个。原网站核心代码经过了混淆无法阅读,所以本项目仅参考了原网站的思路,并以此为基础进行了重新开发。
本项目命名为 F5 Bench,即网站请求基准测试 (Fetch Benchmark) 的意思,F5 既可以用来表示键盘上的刷新键,也可以表示 Fetch 的缩写。
本项目的原理也很简单,就是通过 Fetch API 来频繁的请求目标网站,从而对目标网站进行请求基准测试,也就是 HostLoc 论坛里常常提到的玩笑梗,通过 F5 刷新对目标网站发起请求基准测试,从而使目标网站服务器资源占满导致崩溃。
得益于 Fetch API 拥有 no-cors 模式,因此本项目可以绕过 CORS 限制,直接对目标网站发起跨域请求,从而实现请求基准测试。
- 🚀 基于 vinext + Next.js App Router API 构建,支持 Cloudflare Pages 与 Vercel 静态部署
- 🎨 使用 Semi Design 组件库 + Tailwind CSS 构建 UI
- 🌍 支持 11 种语言的国际化(简体中文、繁体中文、English、日本語、한국어、Français、Deutsch、Español、Português、Русский、العربية)
- 🌙 支持亮色/暗色主题切换
- 🔧 可配置并发线程数
- 📊 实时显示请求统计(总请求数、请求速度、总耗时)
| 技术 | 说明 |
|---|---|
| Next.js | React 全栈框架 |
| vinext | Next.js API 的 Vite 运行时 |
| React | UI 构建库 |
| TypeScript | 类型安全的 JavaScript |
| Tailwind CSS | 原子化 CSS 框架 |
| Semi Design | 企业级 UI 组件库 |
| next-intl | Next.js 国际化方案 |
| pnpm | 快速、节省磁盘空间的包管理器 |
基于 Fetch API 发起的网络请求,会携带本机设备的 IP 信息,因此请勿将本工具用于任何非法用途,本项目仅限于开发者用于对自己的网站发起请求基准测试,除此之外的一切使用场景,使用者本人需承担所有责任,本项目不对任何使用场景负责。
本项目使用 Cloudflare Pages 进行部署在线演示,禁止使用其进行非法请求基准测试,托管平台会对使用者以及使用记录进行日志文件留存(仅用于规避责任风险)。
在本项目 Release 页面下载最新版本的压缩包,将其上传到任意静态网站主机中,然后解压到网站根目录即可。
# 克隆项目
git clone https://github.com/ikxin/f5-bench.git
cd f5-bench
# 安装依赖
pnpm install
# 启动开发服务器
pnpm dev
# 构建生产版本
pnpm build构建完成后,静态产物会输出到 dist/client,可部署到任意静态网站主机。
# 构建静态产物
pnpm run build
# 部署到 Cloudflare Pages
wrangler pages deploy dist/client --project-name=f5-bench仓库已包含 wrangler.jsonc,Cloudflare Pages 构建输出目录配置为 dist/client。首次通过 Wrangler 部署前需要通过 wrangler login 登录,或在 CI 中配置 CLOUDFLARE_API_TOKEN 与 CLOUDFLARE_ACCOUNT_ID。
仓库已包含 vercel.json,连接到 Vercel 后会使用 pnpm run build 构建,并将 dist/client 作为静态输出目录发布。cleanUrls 会让 /zh-CN.html 正常以 /zh-CN 访问,不生成 Vercel Functions。
pnpm run build欢迎参与项目贡献!请阅读 贡献指南 了解详情。
Code with ❤️ by 一纸忘忧
Copyright (c) 2024 ~ Present