Benchmark various GraphQL resolving variants
There exists confusion about how a GraphQL execution engine like graphql-js does its work. The engine will invoke a resolve function for every [scalar] field in a request.
defaultFieldResolver: By default graphql-js will invoke its own
defaultFieldResolverresolve function when no explicit resolver was specified when generating the executable schema. This resolver needs to do some reflection on the request in order to determine what data to return.
explicitDefaultFieldResolver: We can also use graphql-js's
defaultFieldResolverexplicitly, which will skip a check for whether or not a field resolver function was specified when generating the executable schema.
customFieldResolver: We can also specify our own field resolver function that does not need to perform any reflection, as we know what type to return.
customAsyncFieldResolver: Custom field resolvers can also be async. This doesn't make their own execution time much worse, but scheduli