Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用异步挂钩的性能影响_Node.js_Asynchronous_Rpc_Nodejs Server_Async Hooks - Fatal编程技术网

Node.js 使用异步挂钩的性能影响

Node.js 使用异步挂钩的性能影响,node.js,asynchronous,rpc,nodejs-server,async-hooks,Node.js,Asynchronous,Rpc,Nodejs Server,Async Hooks,我是Node.js库的作者,我想用它来改进DX。但我担心表现 我读过一些故事,说一切都很好,也读过一些故事,说性能是一个拦路虎 从理论上讲,异步性应该只发生在IO操作上,而性能惩罚应该相当于~0。(因为IO操作比运行JS代码要贵几个数量级。) 但是,在实践中,在每个异步调用上运行额外的JS是否会导致不可忽略的性能下降 您对异步钩子的性能有何经验 用例 具体的用例是我使用异步钩子的地方,它为通配符用户提供了出色的人体工程学: const{server}=require(@wildcardapi/s

我是Node.js库的作者,我想用它来改进DX。但我担心表现

我读过一些故事,说一切都很好,也读过一些故事,说性能是一个拦路虎

从理论上讲,异步性应该只发生在IO操作上,而性能惩罚应该相当于~0。(因为IO操作比运行JS代码要贵几个数量级。)

但是,在实践中,在每个异步调用上运行额外的JS是否会导致不可忽略的性能下降

您对异步钩子的性能有何经验

用例 具体的用例是我使用异步钩子的地方,它为通配符用户提供了出色的人体工程学:

const{server}=require(@wildcardapi/server”);
const{context}=require(@wildcardapi/context”);
const db=require(“./path/to/db”);
//用于用户登录的服务器端点
server.login=async(用户电子邮件、密码)=>{
如果(!检查凭据(用户电子邮件、密码)){
返回{errorCredentials:true};
}
const{userId,userName}=wait db.getUser(userEmail);
//上下文修改被持久化。(引擎盖下,
//通配符使用Cookies来持久化上下文。)
context.user={
用户ID,
用户名,
};
};
//获取登录用户的待办事项列表的服务器端点。
server.getToList=async()=>{
//“context.userId”在这里可用!
const{userId}=context;
如果(!userId){
返回{notLoggedIn:true};
}
const todos=await db.getTodoList(userId);
返回待办事项;
};
//这里最妙的一点是,以下方法也适用:
{/*              ...                  */}
{/*在反应树的深处…*/}
{/*              ...                  */}
{
//通配符“context”在这里可用!
//多亏了异步钩子,通配符才知道是哪个钩子
//HTTP请求'context'也属于该请求(在执行SSR时)
context.userId?:
}
;
;
多亏了异步钩子,通配符
上下文
在HTTP请求生命周期内的任何地方(!)都可用

通配符的异步钩子,但在HTTP请求的上下文中为发生的每个异步调用运行


这里的主要危险是内存泄漏,但通配符的测试任务是检查是否存在内存泄漏。

与AsyncLocalStorage作者讨论性能问题:由于有更多的函数调用跟踪所有
asyncId
,因此肯定会对性能产生一些影响,老实说,我发现性能影响可以忽略不计,因为您将需要另一种管理
上下文的方法,这几乎是一样的。下面是我在一些微测试中的回复,
AsyncLocalStorage
的性能非常好