JJuan Martinfix: restore ArcGIS table captures. Ref #503
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix: bound the frame wait in fromString | 12 天前 | |
feat(capture): bring back fast: false as a time-sliced capture fast: false yields about every frame and redoes a clone torn while yielding; 'auto' (experimental) yields only past 40 ms. #503 table: no task over 50 ms. Ref #503 | 4 天前 | |
fix: restore filter and filterMode alongside exclude Both policies run in one capture with independent hide/remove modes and exclude wins on overlap. Semantic exports, the removed-height estimate and the canvas engine honour filterMode. | 12 天前 | |
fix: reuse canvas targets from iframe documents | 12 天前 | |
fix: restore ArcGIS table captures. Ref #503 | 16 小时前 | |
fix: restore ArcGIS table captures. Ref #503 | 16 小时前 | |
feat!: memoize from the first capture, snapdom.preCapture(), and no more preCache Three decisions from 2026-09-04, taken together because each one leans on the others. Memoization engages on an element's FIRST capture. The "three captures in two seconds" threshold is gone: an unchanged element is served and a changed one is invalidated or rebuilt through the diff path either way. What the threshold really guarded is guarded directly now: a cap of 64 live memos with LRU teardown (disposeState drops observers, listeners and the retained clone; the element captures fresh next time), the canvas exclusion that never left, and the one interaction state a memo served stale: `:hover`. Hover produces no record and is deliberately not wired as an event, so a snapshot taken with the pointer on an element kept the hover styles after it left, memo or no memo. Asked once per capture instead: styles.js compares the document's `:hover` chain with the previous capture's and stamps every node that entered or left it (18 µs on the 500-row table); burst.js compares the same chain, filtered to the element's own line, before serving. The two hover cases of regression.interaction.staleness.test.js run as plain `it` now; the selection case stays open. `snapdom.preCapture()` is the only prefetch: link prefetch, translated. A link declares its destination and the browser picks the moment, on intent, 100 to 400 ms before the click. A capture has no href, so the destination is learned: a capture that runs within a second of a press is attributed to the pressed control, and from then on intent over that control (pointer over it, focus, pointer down) captures its element with the same options, so the click is a memo hit and pays only the export. Before any control is known, the first intent warms the visible viewport once (a `clip: 'viewport'` capture of body, discarded): every visible element's snapshots, fonts and images are then warm (corpus, 79 demos: 1.1x steady state against 3.3x cold). No argument, no attribute, no background work; a programmatic capture is its own notice. `preCache` is removed, API, subpath and IIFE global. With memoization from the first capture, preCache(el) was literally snapdom(el) discarding the result, and preCache(document) recovered 10% of a cold first capture on the corpus (335 of 3434 ms) at a cost proportional to the page's images. The eight demos that imported it capture the same pixels without it. `__warmOnly`, `precacheCommonTags` and the auto-burst tracker go with it. Pinned by core.burst.firstCapture.test.js (memo from the first call, the cap, LRU by serve), api.preCapture.test.js (viewport warm on the first intent, learned control, prefetch on intent), regression.interaction.staleness.test.js (hover), and the reworked core.capture.autoburst.test.js; each red with its mechanism removed. | 17 天前 | |
feat!: memoize from the first capture, snapdom.preCapture(), and no more preCache Three decisions from 2026-09-04, taken together because each one leans on the others. Memoization engages on an element's FIRST capture. The "three captures in two seconds" threshold is gone: an unchanged element is served and a changed one is invalidated or rebuilt through the diff path either way. What the threshold really guarded is guarded directly now: a cap of 64 live memos with LRU teardown (disposeState drops observers, listeners and the retained clone; the element captures fresh next time), the canvas exclusion that never left, and the one interaction state a memo served stale: `:hover`. Hover produces no record and is deliberately not wired as an event, so a snapshot taken with the pointer on an element kept the hover styles after it left, memo or no memo. Asked once per capture instead: styles.js compares the document's `:hover` chain with the previous capture's and stamps every node that entered or left it (18 µs on the 500-row table); burst.js compares the same chain, filtered to the element's own line, before serving. The two hover cases of regression.interaction.staleness.test.js run as plain `it` now; the selection case stays open. `snapdom.preCapture()` is the only prefetch: link prefetch, translated. A link declares its destination and the browser picks the moment, on intent, 100 to 400 ms before the click. A capture has no href, so the destination is learned: a capture that runs within a second of a press is attributed to the pressed control, and from then on intent over that control (pointer over it, focus, pointer down) captures its element with the same options, so the click is a memo hit and pays only the export. Before any control is known, the first intent warms the visible viewport once (a `clip: 'viewport'` capture of body, discarded): every visible element's snapshots, fonts and images are then warm (corpus, 79 demos: 1.1x steady state against 3.3x cold). No argument, no attribute, no background work; a programmatic capture is its own notice. `preCache` is removed, API, subpath and IIFE global. With memoization from the first capture, preCache(el) was literally snapdom(el) discarding the result, and preCache(document) recovered 10% of a cold first capture on the corpus (335 of 3434 ms) at a cost proportional to the page's images. The eight demos that imported it capture the same pixels without it. `__warmOnly`, `precacheCommonTags` and the auto-burst tracker go with it. Pinned by core.burst.firstCapture.test.js (memo from the first call, the cap, LRU by serve), api.preCapture.test.js (viewport warm on the first intent, learned control, prefetch on intent), regression.interaction.staleness.test.js (hover), and the reworked core.capture.autoburst.test.js; each red with its mechanism removed. | 17 天前 |