在每次功能调用时创建新模式会影响性能吗?
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.'});
});
});
根据我的要求,我必须在每次函数调用时创建新的 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.'});
});
});