Mikakati miwili: inayotegemea offset (limit/offset) na inayotegemea cursor. GraphQL haina pagination iliyojengwa ndani, lakini kiwango cha jamii ni maelezo ya Relay Connection, ambayo hurasimisha cursor pagination.
Mikakati miwili: inayotegemea offset (limit/offset) na inayotegemea cursor. GraphQL haina pagination iliyojengwa ndani, lakini kiwango cha jamii ni maelezo ya Relay Connection, ambayo hurasimisha cursor pagination.
items(limit: 10, offset: 20)) ni rahisi lakini huvunjika kwenye data hai: ikiwa row imeingizwa mtumiaji akiwa anapitia kurasa, vitu husogea na unaona nakala au mapengo. Pia huwa polepole kwenye offsets za kina (DB bado huchambua rows zilizorukwa).Connection hufunga list ndani ya edges (kila moja ikiwa na cursor na node) pamoja na pageInfo:
type Query {
posts(first: Int!, after: String): PostConnection! # first = page size, after = cursor
}
type PostConnection {
edges: [PostEdge!]!
pageInfo: PageInfo!
}
type PostEdge {
cursor: String! # opaque token for THIS node's position
node: Post! # the actual item
}
type PageInfo {
endCursor: String # feed this back as 'after' for the next page
hasNextPage: Boolean! # so the client knows when to stop
}
// resolver: fetch ONE extra row to compute hasNextPage cheaply
const rows = await db.posts.find({ after: args.after, limit: args.first + 1 });
const hasNextPage = rows.length > args.first;
const page = rows.slice(0, args.first);
return {
edges: page.map((p) => ({ node: p, cursor: encodeCursor(p.id) })),
pageInfo: { endCursor: page.at(-1) && encodeCursor(page.at(-1).id), hasNextPage },
};
Cursor ni opaque — kwa kawaida base64 ya sort key — hivyo clients huitendea kama token, si namba.
Kuchagua offset dhidi ya cursor kunaonyesha unaelewa uthabiti chini ya maandishi ya wakati mmoja (concurrent writes) na utendaji wa ukurasa wa kina. Kujua muundo wa Relay connection ni muhimu kwa sababu clients za Apollo/Relay zina ushughulikiaji wa cache uliojengwa ndani kwa ajili yake.
Maktaba ya maswali ya mahojiano ya IT yenye majibu ya kina — kutoka Junior hadi Senior.
Changia