0

Java アノテーションを使用して、graphQL スキーマを生成しています。graphql-spqr ライブラリに感謝します。コードを呼び出しています

GraphQLSchemaGenerator schemaGenerator = new GraphQLSchemaGenerator()
            .withResolverBuilders(new AnnotatedResolverBuilder())
            .withValueMapperFactory(new JacksonValueMapperFactory())
            .withOperationsFromSingleton(<annotatedClassObject>);
GraphQLSchema schema = schemaGenerator.generate();

上記のコードは、graphQL API を呼び出すたびに実行されます。GraphQL Java ライブラリには、以下の行が文書化されていることを知っています。

/** Building this object is very cheap and can be done on each 
  * execution * if necessary.  Building the schema is often not
  * as cheap, especially if its parsed from graphql IDL schema 
  * format via {@link graphql.schema.idl.SchemaParser}.
 */

このスキーマを生成するための各呼び出しにかかる時間に関するメトリックを収集する方法はありますか?

4

1 に答える 1

1

私はgraphql-spqrの作者です。私が言えることは、すべてのリクエストに対してこれを呼び出すべきではないということです。graphql-java のドキュメントが参照しているのはGraphQLオブジェクトであり、実際に構築するのは安価ですが、スキーマはそうではありません。SPQR は、スキーマを生成するときにクラス階層全体をスキャンしますが、これは一般的にかなりコストがかかります。

あなたのユースケースは正確には何ですか?呼び出しごとに新しいスキーマ インスタンスを作成するのはなぜですか? あなたが達成しようとしているものは何でも - ほぼ確実にもっと良い方法があります。

時間の計測には、 JMH (Java Microbenchmark Harness)を利用できます。

于 2018-04-22T15:42:33.490 に答える