Skip to content

Микрорантайм шва: bitmask-специализация + erasure результата + кросс-чанковый дедуп + build-кэш #239

Description

@lemone112

Вердикт свипа (2026-07-23): STRONG. Цель: «артефакт + шов» уверенно ниже конкурентных 866 B, с квитанцией из #237.

  1. Feature-bitmask специализация шва: плагин видит все пониженные вызовы (planNanoLowering) → эмитит виртуальный модуль \0lab-motion:runtime под профиль билда: нет string-селекторов → без querySelectorAll-ветки (~40 B), нет delay/stagger → без арифметики (~35 B), reduced статичен → без matchMedia-ветки (~45 B; иначе хойст в module-level MQL). Байты — физическое удаление веток внутри функции, недоступное tree-shaking. C4-сьют — снапшот-матрица по маскам.
  2. Erasure результата: статически доказанный отброшенный результат (ExpressionStatement-позиция) → executor без Promise.all/finished/NanoControls, только animate + onfinish=commitStyles;cancel (−60…120 B шва, −2 alloc/элемент на бёрстах).
  3. Инлайн-порог: при count(lowered) ≤ 2 (cost-модель N×len(inline) < len(shim)+N×len(callsite)) инлайнить специализированный el.animate({...},{...}) прямо в call-site — ~0 B шва. Лендинг с одним hero-вызовом: −250…330 B.
  4. Кросс-чанковый хойст артефактов \0motion-artifacts (строка зависит только от (m,k,c)): честно — внутри одного чанка gzip-окно 32 KB дедупит почти бесплатно, настоящая дельта между чанками: −(K−1)×вес строки.
  5. Build-кэш Map&lt;springKey&gt; в замыкании motionCompiler(): компиляция O(уникальных пружин), не O(вызовов). Дешёвый под-шаг, делать сразу: ключ LRU в compositor/cache.ts как (k/m, c/m) бит-в-бит вместо (m,k,c) — солвер использует только w и a; масс-эквивалентные конфиги становятся одним hit.

Связи: #221, #237, #232.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions