data icon indicating copy to clipboard operation
data copied to clipboard

feat: paginated relationships

Open runspired opened this issue 10 months ago • 0 comments

Once complete, this removes what is probably the largest blocker to us quickly shipping @warp-drive/schema-record and/or building decorators for @ember-data/model to replace belongsTo and hasMany with new semantics.

There are two paths forward with this PR:

  1. Replace the storage for all collection relationships with the paginated version
  2. Add isPaginated somewhere in the schema (either via kind or via something on options) and switch handling in the graph based on schema.

There's a case to be made for either, though I have a preference for the first as it likely offers the largest amount of test coverage by default and a single set of codepaths is simpler to maintain in the long run.

However, for the unpaginated case, performance may be slightly better in the old storage mechanism. I suspect though this will be easily offset by a couple of perf gains I noticed while implementing the storage for pagination in this PR: (1) we no longer need a separate array for remoteState and (2) construction of localState is ~15% faster if we use copy the set, delete the removals, and the Array.from the result.

The best case for (2) is that it may make handling the migration easier for legacy relationships, as editing those relationships generally uses patterns we want to discourage in new relationship primitives.

runspired avatar Apr 05 '24 01:04 runspired