API
GraphQL N+1: повторение на припоминание
Припоминание сильнее перечитывания. На каждый промпт скажи или напиши полный ответ по памяти, прежде чем открыть модельный — усилие припоминания и закрепляет механизм, когда ты в следующий раз увидишь страницу на 51 запрос.
Восстанови хребет юнита — почему изоляция порождает N+1, как DataLoader батчит и почему важен scope, контракт batch, federation и слои защиты по форме запроса — не подглядывая в уроки.
- 01Почему GraphQL получает N+1, когда REST-контроллер на тех же данных обычно нет?
- 02Когда DataLoader запускает batch и почему граница тика лучше фиксированного таймера?
- 03Почему DataLoader надо инстанцировать на каждый запрос и что именно ломается с инстансом в module scope?
- 04Сформулируй контракт порядка batchLoadFn и как ты его выполняешь, включая отсутствующие строки.
- 05В федеративном графе что router батчит бесплатно, а что всё ещё за тобой внутри subgraph'а?
- 06DataLoader работает. Перечисли защиты по форме запроса, которые он не заменяет, и что каждая останавливает.
Если ты восстановил каждый ответ по памяти, ты держишь хребет юнита: изоляция резолверов порождает N+1, DataLoader батчит на границе тика, но безопасно — только с пер-запросным scope и контрактом batch с тем же порядком; federation отдаёт сетевой batch, но DB-batch в __resolveReference всё ещё за тобой, а защиты по форме запроса (depth, мультипликативный complexity, trusted documents, алиас- и batch-капы) охраняют всё, что DataLoader не может. DataLoader чинит, сколько обращений к БД делает запрос; слои защиты решают, какие формы вообще допущены к запуску.