余烬数据和关系.性能



这是我的第二个余烬应用程序,以下问题一直是反复出现的主题。

我正在使用启用了查询参数的 Ember js 和 Ember 数据的 Canary 构建。

假设我们有以下关系:

  • A 有很多 B
  • A 有很多 C
  • A 有很多 D
  • A 有很多 E

模型B,C,D,E是巨大的模型,渲染资源繁重。所以一直加载它们不是最佳的。

假设我的应用程序有一个仪表板,可以快速浏览应用程序的状态,并且它侧重于模型 A。我不需要显示B,C,D,E中的任何内容。因此,JSON 不会从example.com/api/a终结点返回关系 ID 数组。

如果用户点击模型 A 的show路由,那么我应该如何加载模型 B、C、D、E?

谢谢大家

比尔,我在 Ember 论坛上回答了你的问题,但我也要在这里复制答案,以便回答问题。

我已经使用非常旧版本的Ember Data很长时间了,并且 几天前我刚刚更新到最新版本。正因为如此, 对我说的话持保留态度。:)但我相信余烬数据 仅延迟加载记录/关系。所以你应该返回ID 对于 B、C、D、E 以及 A 的 JSON,然后 Ember 数据应该 引用它们后立即自动加载它们的记录。

编辑:差点忘了。您必须为此包含异步:true 选项 去工作。

App.A = DS.Model.extend({
    b: DS.hasMany('b', { async: true });
});

这可能比它的价值更麻烦......余烬约定是将 A 与其关系 ID 加载到 B、C、D、E。如果您在服务器上缓存响应,则第二次应该会更快。

否则,您可以在仪表板页面上更改请求之前的ajaxPrefilter,以具有一些标头,您可以在服务器中使用这些标头来更改其默认响应。

Ember.$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
 jqXHR.setRequestHeader('no_relationship_ids', 'true');
});

然后在您的显示页面中,您始终必须在渲染之前.reload()模型(显然不包括上面的标题)。

最新更新