coerce_input_literal spends extra time on type checks and non-null recursion
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 78/100
- Tipo de issue
- Refactorización
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- python
- Área
- performance
Línea de trabajo
Lee src/graphql/utilities/coerce_input_value.py y el benchmark de tests/benchmarks/test_execution_arguments.py. Comprueba cómo coerce_input_literal maneja los tipos NonNull y llama a los tres auxiliares de comprobación de tipos; después, realiza los cambios propuestos y ejecuta las pruebas y el benchmark pertinentes. El trabajo estará terminado cuando el comportamiento siga siendo el mismo y el benchmark muestre la mejora de rendimiento indicada.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- Python
- Estrellas
- 534
- Forks
- 159
- Merge medio
- 1 d 10 h
- PR fusionados (30 d)
- 11
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Sin guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de graphql-python/graphql-core
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
graphql-python/graphql-core#304 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 35/100
graphql-python/graphql-core#278 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
graphql-python/graphql-core#257 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
graphql-python/graphql-core#223 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
documentation good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 35/100
graphql-python/graphql-core#220 · 4 comentarios ·
Los mantenedores suelen responder en 1 día
Todos los issues de graphql-python/graphql-core
Issues similares
-
bug good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
docs size:S
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 1-3 horas Aptitud para principiantes 88/100
Gathin23/cleanyourtv#3464 ·
Los mantenedores suelen responder en 1 día
-
documentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
strawberry-graphql/strawberry#4794 ·
Los mantenedores suelen responder en 1 día