Expanded empty elements allocate a String per element
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 52/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- rust
- Ambito
- backend, performance
Direzione di ricerca
Start in src/reader/state.rs at close_expanded_empty and trace how opened_buffer supplies the name and how the resulting BytesEnd<'static> is used by the reader API. Check the existing tests for expand_empty_elements(true) and add a focused allocation or behavior check if the project has a suitable pattern. Done means expanded empty elements preserve the expected End event behavior while avoiding a per-element String allocation, or the issue explains why the API requires ownership.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
I think expand_empty_elements(true) may cost more than it needs to on input with many empty elements, because each expanded end tag allocates.
In src/reader/state.rs, close_expanded_empty takes the name with self.opened_buffer.split_off(...) and wraps it in Cow::Owned, so every expanded <a/> makes a new String for its End event.
What I measured, on quick-xml 0.42.0, in a release build on Linux arm64, walking a synthetic 100 MB part made of about 25 million <a/> elements with the same reader settings:
- with
expand_empty_elements(true): about 25 million allocations and 25 million frees for the walk; - with it set to
false, handlingEvent::Emptyinstead: no allocation per element, and about 41 % fewer instructions for the walk (callgrind, on a 5 MB sample of the same input).
This matters most for callers that turn the option on and cannot turn it off. The case I met is reading XLSX parts through a library that sets it.
I may well be missing a reason for this. close_expanded_empty returns BytesEnd<'static>, so the owned name may be needed by the current API. I have not tried a patch, and I don't know how small a fix could be. If the name could be borrowed from opened_buffer for the life of the event, I think the allocation would go away, but that may not be possible without an API change.
If this is useful I'm happy to test a patch on the same input. If it's by design, please feel free to close this.
- Lingua principale
- Rust
- Stelle
- 1.6k
- Fork
- 299
- Merge medio
- 2g 4h
- PR unite (30g)
- 9
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di tafia/quick-xml
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
DecodingReader::set_encoding panics when the XML declaration is longer than 64 bytesForse già presa @emschwartz l’ha presa 4 giorni fa. Apertabug encoding
Difficoltà 4/5 3-5 giorni Idoneità per principianti 30/100
tafia/quick-xml#1040 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
encoding optimization
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
tafia/quick-xml#1039 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 4/5 1-2 giorni Idoneità per principianti 53/100
tafia/quick-xml#1035 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di tafia/quick-xml
Issue simili
-
[Bug]: opencode_go chat route drops reasoning_effort (even 'none'), while the same endpoint honors it via custom_llm_provider=openaiForse già presa @arvindkumar-ship-it l’ha presa oggi. Apertallm translation
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
BerriAI/litellm#51871 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
comp-formats
Difficoltà 2/5 Mezza giornata Idoneità per principianti 64/100
ClickHouse/ClickHouse#131694 ·
I maintainer di solito rispondono entro 1 giorno
-
cli: `execCargoMetadata` decodes stdout per chunk, corrupting non-ASCII paths across pipe boundariesAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
C-Bug S-Needs-Triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
bevyengine/bevy#26558 ·
I maintainer di solito rispondono entro 2 giorni