data
data copied to clipboard
feat: paginated relationships
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:
- Replace the storage for all collection relationships with the paginated version
- Add
isPaginated
somewhere in the schema (either viakind
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.