coerce_input_literal spends extra time on type checks and non-null recursion
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 78/100
- Type d'issue
- Refactorisation
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- python
- Domaine
- performance
Piste de recherche
Lisez src/graphql/utilities/coerce_input_value.py et le benchmark dans tests/benchmarks/test_execution_arguments.py. Vérifiez comment coerce_input_literal traite les types NonNull et appelle les trois fonctions auxiliaires de vérification des types, puis effectuez les modifications proposées et exécutez les tests et le benchmark concernés. Le travail est terminé lorsque le comportement reste identique et que le benchmark montre l’amélioration des performances signalée.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
coerce_input_literal in src/graphql/utilities/coerce_input_value.py runs for every literal argument in a query. For example, it runs for multiplier: 2 once per item in tests/benchmarks/test_execution_arguments.py.
The function does two kinds of extra work:
- For a
NonNulltype, it calls itself again with the inner type. The second call checks for a variable node and a non-null type again. - It uses the
is_non_null_type,is_list_typeandis_input_object_typehelper functions. Each helper is one more function call around anisinstancecheck.
Measured on Python 3.12, median of 3 runs (time per call):
| Situation | Now | With direct checks | Change |
|---|---|---|---|
Int! literal (multiplier: 2) |
734 ns | 479 ns | 35% faster |
[Int!] list of 10 ints |
7557 ns | 5089 ns | 33% faster |
input object {a: 1, b: "x"} |
2355 ns | 1717 ns | 27% faster |
variable $v |
172 ns | 156 ns | no real change |
execute_sync of the 1000-item benchmark query |
5.32 ms | 5.00 ms | 6% faster |
Proposed fix: unwrap the NonNull type in place instead of calling the function again. Use direct isinstance checks against GraphQLNonNull, GraphQLList and GraphQLInputObjectType in this one function. The results stay the same, and the full test suite passes with the change.
Environment: graphql-core main at 0aaea71, CPython 3.12.13, Linux x86_64.
- Langage dominant
- Python
- Étoiles
- 534
- Forks
- 159
- Merge moyen
- 1 j 10 h
- PR mergées (30 j)
- 11
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Aucun guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de graphql-python/graphql-core
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
graphql-python/graphql-core#304 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 35/100
graphql-python/graphql-core#278 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 3/5 1-2 jours Accessibilité débutants 45/100
graphql-python/graphql-core#257 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 3/5 1-2 jours Accessibilité débutants 35/100
graphql-python/graphql-core#223 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
documentation good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 35/100
graphql-python/graphql-core#220 · 4 commentaires ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de graphql-python/graphql-core
Issues similaires
-
bug good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
docs size:S
Difficulté 1/5 Moins d'une heure Accessibilité débutants 88/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 1-3 heures Accessibilité débutants 88/100
Gathin23/cleanyourtv#3464 ·
Les mainteneurs répondent en général sous 1 jour
-
documentation
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
strawberry-graphql/strawberry#4794 ·
Les mainteneurs répondent en général sous 1 jour