10+% slowdown in store.pushPayload with ember-data.beta-11?


#1

I’ve just updated my app to Ember 1.8 and Ember Data beta 11 (from Ember 1.7 and Ember Data beta 9) and I’ve noticed a 10+% slowdown on calls to store.pushPayload (with 5000+ items). The 10% difference is extremely noticeable because the call is already very slow on Android (my target platform).

Is this a known issue? Is there anywhere specific I should start looking to optimise this? Or a way to debug exactly what’s taking the time?

Thanks!


#2

Can you provide an example. In my tests we are doing significantly better on this metric. Maybe some later work regressed or some scenario (maybe yours) is worse.


#3

Does it happen on every route? Can you post your model definitions, do you have lots of hasMany relationships? I am working on lots of perf improvements for beta.12 would be great to test on your app.


#4

Thanks for the replies!

Weirdly I’ve just tried to reproduce and I’m not actually seeing a slowdown on Android. I am, however, seeing it in Chrome on desktop:

That’s just one run but it seems to be fairly consistent across runs.

The equipmentItems model which is slowing things down looks like:

import DS from "ember-data";

export default DS.Model.extend({
  qrId: DS.attr('number'),
  model: DS.attr('string'),
  year: DS.attr('string'),
  size: DS.attr('string'),
  soleLength: DS.attr('number'),
  type: DS.belongsTo('equipment_type'),
  typeId: DS.attr('number'), // Duplicate of type - used so we don't have to query a relationship when putting the items into buckets by type for a much faster startup.
  package: DS.belongsTo('package_level'),
  currentRentals: DS.hasMany('rented_item')
});

So there is a few relationships involved.

Let me know if there is more I can do to help test…


#5

@vitch can you by any chance provide an running example, or just add another route + scenario to github.com/stefanpenner/perf-stress

I would love to get my hands on this.


#6

@stefan - I’d love to help but I’m afraid I can’t provide a running example - the data is a client’s and contains confidential information. I can try and add a scenario to the perf-stress repo - what should the example do? Just load some data which is indicative of the data I am loading where performance regressed? And does the perf-stress setup include a way to measure regressions between versions of ember?

Thanks!


#7

Please provide an example that accurately represents the complexity + data volume that your client app has.

Currently the regression measurement is still manual. But regardless, providing your scenario (with representative relationships models and sanitized data and likely a similar rendering strucutre) will allow us to identify specific bottlenecks and improve them.

Any scenarios you add to the perf-stress app will likely become part of the future planned perf regression suite.


#8

Sorry for the slow reply! I’ve just found the time to put together a pull request on the perf-stress repo:

Hopefully it’s helpful in recreating the slowdown and getting to the bottom of what has caused it…

Thanks!


#9

You could also try this branch and see if it helps.

https://github.com/emberjs/data/tree/dont_filter_non_filter_live_array