在每次功能调用时创建新模式会影响性能吗?

Will affect on performance the creating new schema at every functional call?

根据我的要求,我必须在每次函数调用时创建新的 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 性能?

为什么我必须这样做? 因为 docs returns 基于 data 我正在传递给 db.

Why I am have to do this? because the docs returns based on data I am passing to db.

不,这不是在每次调用时创建新模式的理由。

您应该创建一个使用解析器的静态模式,该解析器从 rootvalue 中获取 docs,每个 graphql 查询 execute()ion 都可以传递。


在你的情况下,你实际上甚至不需要那个。而不是 运行ning doOperations 整个端点,你应该 运行 它在生成用户的解析器中并使 data 成为一个参数:

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.'});
    });
});