coerce_input_literal spends extra time on type checks and non-null recursion
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 78/100
- Issue-Typ
- Refactoring
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- python
- Bereich
- performance
Rechercherichtung
Lies src/graphql/utilities/coerce_input_value.py und den Benchmark unter tests/benchmarks/test_execution_arguments.py. Prüfe, wie coerce_input_literal NonNull-Typen behandelt und die drei Typprüfungshelfer aufruft, setze dann die vorgeschlagenen Änderungen um und führe die relevanten Tests und den Benchmark aus. Fertig, wenn das Verhalten gleich bleibt und der Benchmark die gemeldete Leistungsverbesserung zeigt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
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.
- Vorherrschende Sprache
- Python
- Sterne
- 534
- Forks
- 159
- Ø Merge
- 1 T. 10 Std.
- Gemergte PRs (30 T.)
- 11
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Kein Beitragsleitfaden
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus graphql-python/graphql-core
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
graphql-python/graphql-core#304 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 35/100
graphql-python/graphql-core#278 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 45/100
graphql-python/graphql-core#257 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 35/100
graphql-python/graphql-core#223 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
documentation good first issue
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 35/100
graphql-python/graphql-core#220 · 4 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in graphql-python/graphql-core
Ähnliche Issues
-
bug good first issue
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
-
docs size:S
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 88/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 1/5 1-3 Stunden Anfängerfreundlichkeit 88/100
Gathin23/cleanyourtv#3464 ·
Maintainer antworten meist innerhalb von 1 Tag
-
documentation
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 74/100
strawberry-graphql/strawberry#4794 ·
Maintainer antworten meist innerhalb von 1 Tag