Select the types of activity you want to include in your feed.
Speed up ID map traversal with TreeWalker
Replace querySelectorAll("[id]") scans in ID mapping with a TreeWalker-based descendant pass to reduce selector overhead in hot morph paths while keeping matching behavior unchanged.
···11const SUPPORTS_MOVE_BEFORE = "moveBefore" in Element.prototype
22const ELEMENT_NODE_TYPE = 1
33const TEXT_NODE_TYPE = 3
44+const TREE_WALKER_SHOW_ELEMENT = 1
4556const IS_PARENT_NODE_TYPE = [
67 0, // 0: (unused)
···804805 #mapIdArrays(node: ParentNode): void {
805806 const idArrayMap = this.#idArrayMap
806807807807- for (const element of node.querySelectorAll("[id]")) {
808808+ forEachDescendantElementWithId(node, (element) => {
808809 const id = element.id
809810810810- if (id === "") continue
811811+ if (id === "") return
811812812813 let currentElement: Element | null = element
813814···821822 if (currentElement === node) break
822823 currentElement = currentElement.parentElement
823824 }
824824- }
825825+ })
825826 }
826827827828 // For each node with an ID, add that ID into the IdSet on the IdSetMap, for each of its parent elements.
828829 #mapIdSets(node: ParentNode): void {
829830 const idSetMap = this.#idSetMap
830831831831- for (const element of node.querySelectorAll("[id]")) {
832832+ forEachDescendantElementWithId(node, (element) => {
832833 const id = element.id
833834834834- if (id === "") continue
835835+ if (id === "") return
835836836837 let currentElement: Element | null = element
837838···845846 if (currentElement === node) break
846847 currentElement = currentElement.parentElement
847848 }
848848- }
849849+ })
849850 }
850851}
851852···883884 }
884885885886 new Morph(flushOptions, null, from).morph(from as ChildNode, to)
887887+}
888888+889889+function forEachDescendantElementWithId(node: ParentNode, callback: (element: Element) => void): void {
890890+ const root = node as Node
891891+ const ownerDocument = root.nodeType === 9 ? (root as Document) : root.ownerDocument
892892+ if (!ownerDocument) return
893893+894894+ const walker = ownerDocument.createTreeWalker(root, TREE_WALKER_SHOW_ELEMENT)
895895+ let current = walker.nextNode()
896896+897897+ while (current) {
898898+ const element = current as Element
899899+ if (element.id !== "") callback(element)
900900+ current = walker.nextNode()
901901+ }
886902}
887903888904function nodeListToArray(nodeList: NodeListOf<ChildNode>): Array<ChildNode>