perf(context): кэшировать MD-объект и mdoRef документа (lazy)#4180
Conversation
getMdObject() = findChild(getUri()) и getMdoRef() = MdoRefBuilder.getMdoRef(this) зависят только от URI документа и конфигурации, но вызывались на КАЖДЫЙ call-site / использование переменной при заполнении индекса ссылок — десятки тысяч раз на ребилд, заново резолвя один и тот же объект документа. Переведены на Lazy. Поскольку оба инвариантны к содержимому, а конфигурация инвариантна на время жизни DocumentContext (её перезагрузка через ServerContext.clear() выбрасывает все документы), поля НЕ сбрасываются в clearSecondaryData — считаются один раз на жизнь документа. Замер (JMH, -prof gc, конфиг ssl_3_2): findChild(uri) = 333 нс/op, 16 B/op → кэшированное чтение 0.63 нс/op, ~0 B/op. Эффект CPU-bound (сравнение URI + CaseInsensitiveMap). Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01HcK3qVwTH91rXtgprGmoWr
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthrough
ChangesLazy MD caching in DocumentContext
Estimated code review effort🎯 1 (Trivial) | ⏱️ ~4 minutes Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|



getMdObject() = findChild(getUri()) и getMdoRef() = MdoRefBuilder.getMdoRef(this) зависят только от URI документа и конфигурации, но вызывались на КАЖДЫЙ call-site / использование переменной при заполнении индекса ссылок — десятки тысяч раз на ребилд, заново резолвя один и тот же объект документа.
Переведены на Lazy. Поскольку оба инвариантны к содержимому, а конфигурация инвариантна на время жизни DocumentContext (её перезагрузка через ServerContext.clear() выбрасывает все документы), поля НЕ сбрасываются в clearSecondaryData — считаются один раз на жизнь документа.
Замер (JMH, -prof gc, конфиг ssl_3_2): findChild(uri) = 333 нс/op, 16 B/op → кэшированное чтение 0.63 нс/op, ~0 B/op. Эффект CPU-bound (сравнение URI + CaseInsensitiveMap).
Claude-Session: https://claude.ai/code/session_01HcK3qVwTH91rXtgprGmoWr
Описание
Связанные задачи
Closes
Чеклист
Общие
gradlew precommit)Для диагностик
Дополнительно
Summary by CodeRabbit