55 lines
6.9 KiB
Markdown
55 lines
6.9 KiB
Markdown
# Апрель 2027 — редакторское ревью после переписывания
|
||
|
||
## Объём партии
|
||
|
||
- `editorial-2027-04-practice-build-evolution` — 5 508 знаков основного текста;
|
||
- `editorial-2027-04-mechanism-build-evolution` — 5 074 знака;
|
||
- `editorial-2027-04-field-build-evolution` — 5 488 знаков.
|
||
|
||
Stable slugs сохранены. Три статьи разбирают разные вопросы frontend-сборки: сравнимость замеров, ключ cache и поиск источника роста bundle.
|
||
|
||
## Проход 1 — факты, техника, пример и источники
|
||
|
||
- **Practice.** До: сравнение сборок сводилось к «новый инструмент быстрее». После: `compareBuildRuns()` сначала проверяет `inputFingerprint`, затем считает delta времени и размера. Причина: пример не выдаёт разные входы за один benchmark.
|
||
- **Mechanism.** До: cache описывался как общий ускоритель. После: `makeDependencyCacheKey()` включает lockfile, config, runtime и source digest и показывает invalidation при изменении lockfile. Причина: cache получил явный контракт входов.
|
||
- **Field.** До: рост bundle предлагалось оценивать по размеру одного файла. После: `summarizeBundleDiff()` сравнивает esbuild-подобные `inputs`, сортирует delta bytes и ведёт к chunk/source map/network. Причина: код показывает конкретный путь от симптома к модулю.
|
||
|
||
Источники проверены HTTP 200 и применены с границами:
|
||
|
||
- [webpack Caching Guide](https://webpack.js.org/guides/caching/) — webpack 5 guide, проверен 31 July 2026; contenthash/deterministic ids и условия воспроизводимого output; не даёт данных конкретного проекта.
|
||
- [webpack cache configuration](https://webpack.js.org/configuration/cache/) — webpack 5 reference, проверен 31 July 2026; memory/filesystem cache; не знает состояние конкретного CI.
|
||
- [esbuild Metafile](https://esbuild.github.io/api/#metafile) — API documentation, проверена 31 July 2026; JSON inputs/outputs/bytes; не измеряет браузерную доставку.
|
||
- [Vite dependency pre-bundling](https://vite.dev/guide/dep-pre-bundling.html) — официальное руководство, проверено 31 July 2026; lockfile, config, environment и linked dependency invalidation; относится к Vite optimizer.
|
||
- [MDN SourceMap header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/SourceMap) — MDN Web Docs, page modified 21 November 2025; связь DevTools с картой; не подтверждает доступность карты и скорость ресурса.
|
||
|
||
## Проход 2 — структура, голос, плотность и мета-лексика
|
||
|
||
- **Practice.** До: первым шёл секундомер. После: первые два абзаца называют разные input/config/cache/output и цену ложного сравнения, а секундомер появляется после условий. Причина: действие поставлено после постановки проблемы.
|
||
- **Mechanism.** До: cache hit звучал как доказательство корректного результата. После: отдельные разделы разводят key, invalidation, hit/miss и проверку содержимого output. Причина: техническая речь называет, что именно повторяется.
|
||
- **Field.** До: «bundle вырос» сразу вёл к удалению библиотеки. После: текст проходит metafile diff, input, chunk, source map и browser measurement. Причина: каждый шаг сужает место причины и не смешивает bytes с latency.
|
||
|
||
Запрещённая мета-лексика в body не найдена. В каждой статье есть конкретный reader-facing симптом, стоимость ошибки, объяснение механизма, runnable example, ordered steps, ограничения и следующий шаг. Общих 12-словных фрагментов с январём–мартом нет.
|
||
|
||
## Проход 3 — визуал, мобильная читаемость, доступность и повторы
|
||
|
||
- **Practice.** До: timeline показывал редакционную передачу конфигураций. После: SVG показывает input → config → cache → замер → output diff и красную ветку другого fingerprint. Причина: рисунок объясняет условие сравнимости.
|
||
- **Mechanism.** До: матрица содержала synthetic shape и статусы отсутствующих данных. После: строки описывают input, config, cache, runner и output; нижняя ветка останавливает несопоставимый замер. Причина: визуал служит cache/benchmark механизму.
|
||
- **Field.** До: схема показывала hand-off. После: она сравнивает два metafile, считает delta, ведёт к chunk/map/network и возвращает при несовпадении input. Причина: диаграмма соответствует `summarizeBundleDiff()`.
|
||
|
||
SVG получили русские title/desc, доступные alt/caption и компактные подписи. Sharp 375 px проверил таблицу, стрелки, красные ветки и отсутствие обрезки. Опасные SVG-элементы и внешние ресурсы отсутствуют.
|
||
|
||
## Проверки
|
||
|
||
```text
|
||
node --check scripts/upgrade-2027-04.mjs — PASS
|
||
node scripts/upgrade-2027-04.mjs --verify-fixture — PASS, 4/4
|
||
npm run audit:draft -- scripts/upgrade-2027-04.mjs — PASS, 3/3
|
||
локальные build/cache/bundle examples — PASS, 12/12 для всей партии
|
||
xmllint --noout для 3 SVG — PASS
|
||
SVG safety scan — PASS
|
||
Sharp resize width=375 для 3 SVG — PASS; визуально проверены timeline, matrix и bundle loop
|
||
strict cross-article scan января–апреля: 12 статей, 66 сравнений, sources excluded, code included — collisions: []
|
||
```
|
||
|
||
Git, registry, README, `articles.json`, приложение и файлы других месяцев не изменялись.
|