Escaping.text and Escaping.attribute rebuilt a value that needed escaping one character at a time: result += String(character) for every unescaped character, plus the escaped form for each marker. Re-escaping a text node that holds a single '&' rebuilt the whole value grapheme by grapheme, and the per-character String construction and append dominated the serialize path for entity-bearing content. Copy each run between escapable characters in a single append and rewrite only the markers. The no-escaping-needed fast path (return the value unchanged) is untouched. The output is byte-identical: matching is per-Character so multibyte graphemes copy whole, and the escaped forms are the same. Measured serialize ~7% faster on the 20k-item generated corpus via a same-state A/B (~3.0x to ~2.8x slower than libxml2). Verified by EscapingBulkCopyTests (a per-character-oracle differential with multibyte cases), the Apache Xalan gold-output and C14N canonicalization suites, the full suite, the WASM build, and an adversarial review that included a 400k-input fuzz. |
||
|---|---|---|
| .. | ||
| design | ||
| plans | ||
| rules | ||
| benchmarks.md | ||
| onboarding-antigravity.md | ||
| production-readiness.md | ||
| release-hurdles.md | ||
| roadmap.md | ||
| schema-validity-burndown.md | ||
| validation-coverage-registry.txt | ||
| validation-field-registry.txt | ||
| xsts-deviations.md | ||