Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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
Javascript 在每次函数调用时创建新模式会影响性能吗?_Javascript_Node.js_Mongodb_Graphql_Graphql Js - Fatal编程技术网

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))