Javascript 在每次函数调用时创建新模式会影响性能吗?
根据我的需求,我必须在每次函数调用时创建新的Javascript 在每次函数调用时创建新模式会影响性能吗?,javascript,node.js,mongodb,graphql,graphql-js,Javascript,Node.js,Mongodb,Graphql,Graphql Js,根据我的需求,我必须在每次函数调用时创建新的schema 这确实有效,但我担心它的性能 我的代码: app.post('/', (req, res)=> { const {query, data} = req.body; doOperations(data, 'multiValueSearch', docs => { const RootQueryType = GraphQLObjectType({
schema
这确实有效,但我担心它的性能
我的代码:
app.post('/', (req, res)=> {
const {query, data} = req.body;
doOperations(data, 'multiValueSearch', docs => {
const RootQueryType = GraphQLObjectType({
name: "RootQuery",
fields: {
users: {
type: GraphQLList(UserType),
resolve: ()=> docs
}
}
});
const schema = new GraphQLSchema({
query: RootQueryType
});
graphql(schema, query).then(result => res.json(result)));
});
});
用户在任何时候搜索朋友时都会用到doOperations
。
因此,在每次搜索中,都会调用此doOperations
这是一个问题还是没有问题?担心不会影响graphql性能?
为什么我必须这样做?因为文档
基于我传递给db的数据返回
为什么我要这么做?因为文档是基于我传递给db的数据返回的
不,这不是每次调用都创建新模式的原因
您应该创建一个使用解析器的静态模式,该解析器从rootvalue
获取docs
,每个graphql查询execute()
都可以传递该文档
在你的情况下,你甚至不需要这个。不要对整个端点运行doOperations
,而应该在生成用户的解析器中运行它,并将数据
作为参数:
const RootQueryType = GraphQLObjectType({
name: "RootQuery",
fields: {
users: {
type: GraphQLList(UserType),
args: {
filter: {
type: GraphQLList(ConditionType),
},
},
resolve(_, {filter}) {
return doOperations(filter, 'multiValueSearch');
}
}
}
});
const schema = new GraphQLSchema({
query: RootQueryType
});
app.post('/', (req, res)=> {
const {query, variables} = req.body;
graphql(schema, query, null, {}, variables).then(result => {
res.json(result);
}, err => {
console.error(err);
res.status(500).json({error: 'A problem occurred.'});
});
});
query
来自哪里?callback
来自哪里?doOperations
是如何定义的(它是做什么的)?所有这些代码(调用doOperations()
的代码)都在哪里?它看起来奇怪地颠倒了-通常操作是在模式的解析器函数中完成的。@Bergi,查询来自客户端,使用req.body.query
,我在app.get('/',(req,res)=>{doOperations()}
中调用doOperations
;。。。或者如何使用?为什么?显示/描述上下文。。。看起来很奇怪。。。没有graphql服务器的graphql响应?@xadm,我刚刚发布了我的部分代码,以避免出现巨大的错误,因为我们不需要。我只想知道这是一个坏方法还是一个好方法。@Muhammad除了这个,你还有其他graphql端点吗?您的模式真的只有一个顶级字段吗?请再次检查,因为我添加了一些代码片段,可能会提供更多sencedata是我传递给mongodb的数组filtering@Muhammad什么数组?传递给用户的对象数组数据
。查找({$or:data})。节点的mongodb驱动器的toArray((err,docs))