【发布时间】:2021-03-26 11:16:38
【问题描述】:
我有一个关于 React Native 应用程序和执行网络请求的问题。
我正在创建一个 React Native 应用程序,作为后端,我正在使用 NodeJS。
用户可以注册/登录,并存储刷新令牌。每次应用打开时,都会获取一个新的刷新令牌(如果用户已登录)。这是每次应用打开时都会发生的网络请求示例。
当应用程序打开并且用户登录时,我会进行第二次网络请求(在第一次网络请求访问令牌成功之后),以检查 redux 中的数据是否必须与数据库。我在数据库中存储了一些一般信息,例如本地用户名+。如果 - 出于任何原因 - 我必须更改数据库中的用户名,我将字段“shouldSync”设置为 true。应用程序向 /api/sync 发送请求,控制器看到 shouldSync = true 并将数据库中的所有数据发回给用户。
我还有第三个网络请求,每次应用打开时都会运行:检查是否有新版本。我向 /api/version 发出请求,响应类似于“1.0.0”。如果本地版本与响应中的版本不同,我会显示一条警报(仅一次),说明应用商店/Play 商店中有新版本。
当应用程序关闭/进入后台模式时,我还会向服务器发出网络请求以存储最后一个活动时间戳。
所有这些请求都有效,我还没有看到任何瓶颈,但我从未构建过生产级应用程序,所以我对这些网络请求有一些疑问。我希望有人能回答他们。
-
可以做 3 个单独的网络请求,还是应该尝试将三个请求合并为一个?我可以组合访问令牌请求 + 同步请求(因为这些请求在用户登录时运行),而不是版本请求(因为这个请求总是必须运行)。
-
在某些屏幕上,我需要来自数据库/服务器的动态数据。有时我同时运行 3-5 个单独的请求。我正在使用 axios,我的代码是这样的:
// first request
const requestOne = () => {
return axios({ ... });
};
// second request
const requestTwo = () => {
return axios({ ... });
};
// run these requests when the screen mounts
useEffect(() => {
axios.all([requestOne(), requestTwo()])
.then(axios.spread((requestOneRes, requestTwoRes) => {
// response from request one
console.log(requestOneRes.data);
// response from request two
console.log(requestTwoRes.data);
}));
}, []);
这是合并多个请求的好例子吗?
大多数请求没有很多响应数据。我在 Postman 中测试了一些请求,并检查了一些请求的响应大小,我在这里列出了它们:
每次应用打开时:
- /api/version: 463B 请求大小/231B 响应大小
当用户登录或注册时:
- /登录:476B 请求大小/1.16kB 响应大小
- /注册:472B 请求大小/408B 响应大小
应用打开时 + 用户登录时:
- /api/version: 463B 请求大小/231B 响应大小
- /refresh-access-token: 649B 请求大小 / 521B 响应大小
- /api/sync:633B 请求大小/244B 响应大小(未同步)或 592B 响应大小(同步)
总计:+/- 1.6kB 请求大小 / +/- 1.25kB 响应大小
我正在使用 express 和 BodyParser,并将限制设置为 2MB (2,000,000B)。
app.use(bodyParser.json({ limit: 2000000 }));
我在我的 NodeJS 后端安装了request-stats 来记录所有传入的请求。我将分别记录我的应用程序的所有部分并记录所有(大)请求,但目前我没有看到任何大于 10kB 的请求,即使这些请求也非常罕见。
抱歉,文字太长了。我想尽可能清楚。
【问题讨论】:
标签: react-native axios