1

我最近一直在尝试使用breathjs,并考虑将它用于个人和工作中的一些项目,因为我喜欢它。我知道现在风靡一时的是单页应用程序,我明白了,但是假设您不想引入新的路由框架并且只使用 .NET MVCs 默认路由引擎就很舒服。每次有 POST/Redirect 时,您都将失去针对元数据和其他实体的微风实体管理器的客户端缓存功能。

其中一个问题是,对于每个发出的请求,我们都会收集大量元数据 (.5mb)。现在,如果在重定向之前客户端有任何其他请求,则该元数据被缓存并且一切都很好。除了我还将缓存在实体管理器中的静态列表之外,我试图避免下载每个视图的元数据。我知道可以通过制作更小的对象图来优化元数据,但我们不要专注于此。

我想出的一件事是将元数据存储在 localStorage 中,然后在页面加载时检索它。

function exportMetadata() {
   var metadata = emanager.metadataStore.exportMetadata();
   window.localStorage.setItem('somename', metadata);
}
function importMetadata() {
   var metadata = window.localStorage.getItem('somename');
   var mstore = new breeze.MetadataStore();
   mstore.importMetadata(metadataFromStorage);
   manager.metadataStore = mstore;
}

虽然这有效(并且适用于具有不同语法的静态列表),但它感觉很hacky并且似乎违背了该库的使用方式。我不禁认为 BreezeJS 与 SPA 架构相结合,可以利用它所写的所有功能。也许我想错了?有没有关于如何在 SPA 之外使用 BreezeJS 的建议或示例?

4

1 回答 1

2

Breeze 适用于假定在页面刷新之间具有较长用户会话的单页面应用程序 (SPA)。我不确定您为什么不想要客户端路由框架(例如,Durandal 或 Angular)。但是,您肯定会不时地切换页面。

当您的应用程序实际上是较小的模块化应用程序(每个应用程序独立开发和维护)并且用户跨过从一个模块到另一个模块的“桥梁”时,这甚至是推荐的做法。

您的解决方案正是我会做的:从浏览器本地存储存储和恢复元数据。您可以将其与存储/恢复元数据和(主要是)静态引用列表实体结合在一个序列化缓存中......正如您所说。

采用这种做法一点也不奇怪。我们打算 Breeze 以这种方式工作。事实上,这是为“常规” SPA 获得更快启动和加载时间的好方法。

我很想知道你为什么认为这是“hacky”。我对您对 Breeze 在没有这种做法的情况下可以为您做什么的想法感兴趣。理想的世界会是怎样的?

于 2013-10-31T23:03:12.653 回答