firstInDocumentOrder() computed a document-order key even for a zero- or one-node set. The key walks a node up to the root, taking its index among each parent's children, which is a linear scan of a wide parent. string(@x) and value-of take the string-value of a (usually single) node-set through this path, so an XSLT transform over a wide flat fan-out rescanned the wide parent once per extraction, turning the transform quadratic. For a set of zero or one node the document order is irrelevant: the node is trivially first. Return it directly without computing the key, the same count <= 1 early-out sortedByDocumentOrder() already has. A transform reading a couple of attributes and child values per element over a 20k-element document drops from ~2.3s to ~0.65s (~3.5x). The output is unchanged: the full suite, the Apache Xalan XSLT gold-output corpus, the W3C XPath/XSLT/EXSLT tests, and the WASM build stay green, and FirstInDocumentOrderTests pins the single-node fast path and the multi-node document-first selection. |
||
|---|---|---|
| .. | ||
| 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 | ||