next.js 为什么服务器操作不能并发执行?

wvmv3b1j  于 2023-11-18  发布在  其他
关注(0)|答案(1)|浏览(131)

bounty将在6天后过期。回答此问题可获得+50声望奖励。acupoftea希望引起更多关注此问题。

考虑以下函数:

async function printAB() {
  console.log("A");
  await new Promise((resolve) => setTimeout(resolve, 1000));
  console.log("B");
}

async function f() {
  printAB();
  printAB();
}

字符串
f()的通常预期输出为

A
A
B
B


因为console.log('A')语句可以与超时并发执行。事实上,如果函数都在服务器上(操作或在服务器组件中定义)或都在客户端上,我们就会得到这样的结果。但是,如果printAB是服务器操作,而f是用户组件中的函数,我们会得到

A
B
A
B


.为什么会发生这种情况?如果我们同时使用多个操作,这种行为可能会导致性能降低,有没有办法避免它?

5tmbdcev

5tmbdcev1#

react.dev "use server" docs(强调我的):
Server Actions是为更新服务器端状态的变化而设计的;不建议用于数据获取。因此,实现Server Actions的框架通常一次处理一个action,并且没有缓存返回值的方法。
我仍然不明白为什么,以及它是如何工作的细节。这是在服务器端完成的吗?这是否意味着如果有很多用户,他们将不会被并行服务,例如DB写?

相关问题