Тема
Отладка и метрики
Raph предоставляет read-only snapshots для инспекции graph, routes и derived lifecycle.
Default runtime debug
ts
import { Raph } from '@endge/raph'
Raph.options({ debug: true })
const flat = Raph.debug.getFlat()
const tree = Raph.debug.getTree()getFlat() возвращает для каждой ноды:
idиtype;- parent и child ids dependency graph;
- tracked routes.
getTree() возвращает иерархию нод с children и routes для визуального инспектора.
Debug lease
Временный inspector может удерживать сбор debug state через lease:
ts
const lease = Raph.debug.acquire()
try {
inspect(Raph.debug.getFlat())
}
finally {
lease.release()
}Debugger остаётся включённым, пока действует manual debug: true или существует хотя бы один lease.
Derived snapshots
ts
const registration = handle.snapshot()
const manager = runtime.getDerivedSnapshot()Проверяйте:
status,staleиlastError;- количество full и incremental computes;
- число target writes;
- размеры derived graph;
- pending keys и errors;
- отсутствие registrations после cleanup.
Runtime counters
ts
console.log({
ups: runtime.ups,
eps: runtime.eps,
nps: runtime.nps,
frame: runtime.frame,
})Counters помогают увидеть активность live runtime, но не заменяют профилирование. На них влияют scheduler, частота входных событий, browser throttling и активность loop.
Что проверять при утечке
- Освобождены ли watch/effect/subscription disposers.
- Вызван ли
dispose()у derived handles. - Освобождены ли loop leases.
- Уничтожены ли runtime lanes, которые больше не используются.
- Не удерживает ли application disposed nodes внешними ссылками.
- Обнулился ли derived manager snapshot для уничтоженного scope.