背景
一直使用 axios,今天看到还有很多其它的选择,所以来了解一下。
分析(star 截止 2024-11-05)
axios(106k🌟)
axios 是一个基于 Promise 的 HTTP 客户端,适用于浏览器和 Node.js 环境。
功能完整度:axios 提供了丰富的功能,包括请求和响应拦截器、请求取消、自动转换 JSON 数据、超时设置等,方便开发者进行封装和扩展。 知乎专栏
包体积:axios 的包体积相对较大,可能会影响前端性能,特别是在对包体积敏感的项目中。
ofetch(4.1k🌟)
ofetch 是一个基于 Fetch API 的轻量级 HTTP 客户端,适用于浏览器、Node.js 和 Worker 环境。
功能完整度:ofetch 提供了简化的 API,支持请求拦截器、响应拦截器、超时设置等功能,易于封装和使用。
包体积:ofetch 的包体积较小,适合对包体积有严格要求的项目。
ky(13.8k🌟)
ky 是一个基于 Fetch API 的小巧且优雅的 HTTP 客户端,专注于现代浏览器环境。
功能完整度:ky 提供了简洁的 API,支持请求和响应拦截器、超时设置、重试机制等功能,便于封装和扩展。
包体积:ky 的包体积非常小,适合需要精简包体积的项目。
alova(2.9k🌟)
alova 是一个新兴的请求工具,旨在简化 API 集成工作流,提供高性能的客户端和服务端请求策略。参考:https://www.v2ex.com/t/948621
功能完整度:alova 提供了类似 axios 的 API 设计,支持请求拦截器、响应拦截器、超时设置等功能。此外,alova 还提供了多级缓存模式、请求共享机制和数据预拉取等高级特性,提升应用性能和开发效率。
包体积:alova 的包体积适中,功能丰富且灵活,适合需要高性能和复杂请求策略的项目。
综合对比表(包体积截止 2024-11-05)
特性 | axios | ofetch | ky | alova |
---|---|---|---|---|
请求拦截器 | ✅ | ✅ | ✅ | ✅ |
响应拦截器 | ✅ | ✅ | ✅ | ✅ |
超时设置 | ✅ | ✅ | ✅ | ✅ |
自动 JSON 转换 | ✅ | ✅ | ✅ | ✅ |
请求取消 | ✅ | ❌ | ✅ | ✅ |
重试机制 | ❌ | ❌ | ✅ | ✅ |
多级缓存 | ❌ | ❌ | ❌ | ✅ |
请求共享 | ❌ | ❌ | ❌ | ✅ |
数据预拉取 | ❌ | ❌ | ❌ | ✅ |
包体积(小到大) | 大(2.5MB) | 小(912KB) | 最小(157KB) | 中等(1.1M) |
结论
- 如果项目需要功能全面且成熟的 HTTP 客户端,且对包体积要求不高,axios 是一个可靠的选择。
- 如果项目对包体积有严格要求,且需要在多种环境中运行,ofetch 是一个合适的选择。
- 如果项目专注于现代浏览器环境,且需要精简的包体积,ky 是一个理想的选择。
- (暂不考虑)
如果项目需要高性能、复杂的请求策略和高级特性,alova 提供了丰富的功能和灵活性,适合此类需求。 - (除此之外,vueuse 的useFetch也是可以使用的)
- (退一万步讲,自己封装一个 fetch 也不是不可以。。。🤣
(推荐一些工具)
- 查询包大小的网站:https://bundlephobia.com/
- 查询包实际大小的网站(包括包依赖的包):https://pkg-size.dev/