is_printable_as_block_string checks each character in a Python loop
Mantenedores costumam responder em até 1 dia
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 83/100
- Tipo de issue
- Refatoração
- Clareza
- Claramente especificada
- Status de atividade
- Ativa
- Stack de tecnologia
- python
- Domínio
- performance
Direção de pesquisa
Leia is_printable_as_block_string() e as quatro verificações correspondentes em GraphQL.js; em seguida, examine tests/language/test_block_string.py para identificar a cobertura do comportamento existente. Substitua o loop de caracteres pelas verificações descritas com métodos de string, preservando os resultados para todas as entradas. Execute esse arquivo de teste e compare os casos medidos; o trabalho estará concluído quando o comportamento permanecer igual e os casos com descrições longas apresentarem o ganho de velocidade informado.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
print_schema() and print_ast() call is_printable_as_block_string() once for each description. The function walks the string one character at a time in a Python for loop. It keeps four boolean flags for each character. For long descriptions, this loop is a large part of the time that print_schema() uses.
Measured with Python 3.12 on one isolated CPU core (best of 7 runs):
| Situation | Now | With str methods | Change |
|---|---|---|---|
| One-line description (30 chars) | 1405 ns | 184 ns | 87% less time |
| Description with 12 lines | 19.2 µs | 2.7 µs | 86% less time |
print_schema() of the GitHub schema fixture |
25.5 ms | 16.3 ms | 36% less time |
| String that starts with a new line | 106 ns | 427 ns | 0.3 µs slower |
The last row is the only slower case. The old loop stops at the first character there. Such strings are rare in real schemas.
Proposed fix: keep the same checks, but use str methods instead of the character loop. A str.isprintable() pre-check and a regex find control characters. Then str.split("\n") gives the lines for the leading, trailing and indent checks. The result stays the same for all inputs, and tests/language/test_block_string.py passes.
This is a Python-specific change only. It keeps the four rules of isPrintableAsBlockString in GraphQL.js as four short checks with the same comments, so a later sync with upstream stays easy.
Environment: graphql-core main (1d505c1), CPython 3.12.13, Linux x86_64.
- Linguagem predominante
- Python
- Estrelas
- 534
- Forks
- 159
- Merge médio
- 1d 18h
- PRs com merge (30d)
- 9
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Sem guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de graphql-python/graphql-core
-
collect_fields spends extra time on selections without directivesTalvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
graphql-python/graphql-core#315 ·
Mantenedores costumam responder em até 1 dia
-
natural_comparison_key: faster sort keys for names without digitsTalvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
graphql-python/graphql-core#310 ·
Mantenedores costumam responder em até 1 dia
-
Make is_awaitable faster for values that are not awaitableTalvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
graphql-python/graphql-core#308 ·
Mantenedores costumam responder em até 1 dia
-
assert_name checks each character in a Python generatorTalvez já em andamento @swayamdudhela assumiu há 2 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
graphql-python/graphql-core#304 · 4 comentários ·
Mantenedores costumam responder em até 1 dia
-
coerce_input_literal spends extra time on type checks and non-null recursionTalvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
graphql-python/graphql-core#302 ·
Mantenedores costumam responder em até 1 dia
Todas as issues de graphql-python/graphql-core
Issues semelhantes
-
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 76/100
Mantenedores costumam responder em até 1 dia
-
bug documentation good first issue help wanted testing
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
Mantenedores costumam responder em até 1 dia
-
Show evidence time and supersede warnings in the memory inspectorTalvez já em andamento @Sinchanak-212 assumiu hoje. Abertaarea: ux good first issue priority: medium
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 86/100
daniel-ospina/tortoise#11649 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 86/100
ComposioHQ/awesome-claude-skills#2438 ·
Mantenedores costumam responder em até 15 dias