【问题标题】:Using BreezeJS without SPA在没有 SPA 的情况下使用 BreezeJS
【发布时间】:2013-10-31 20:16:31
【问题描述】:

我最近一直在尝试使用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 的建议或示例?

【问题讨论】:

    标签: javascript .net asp.net-mvc entity-framework breeze


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 当我说“hacky”时,我指的是在非 SPA 应用程序中使用 Breeze。我的主要目的是就是否应该在非 SPA 应用程序中使用 Breeze 征求一些意见。你的第一句话表示不,但你也同意你会以同样的方式解决我上面提到的问题。我们有一个使用 .net MVC 和 WCF 服务构建的完整应用程序。我认为本地缓存方法只是在完全重构 Web API 之前删除庞大的 Web 服务的权宜之计。当项目开始结束时(是的,没错......),我们会跳到 Durandal 或 Angular。
    • 我明白了。是的,如果用户暂时不在页面中,那么微风的价值是有限的。如果它们确实保持较长时间并且页面只是返回到服务器以进行 AJAX 调用,那么它仍然很有价值。他们曾经将这种风格的应用程序称为“AJAX 应用程序”。直到最近这个名字才变成“SPA”(一个可怕的名字......但我无法决定)。
    猜你喜欢
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 2013-06-03
    • 2021-10-30
    • 2010-12-09
    • 2018-03-02
    • 2019-06-20
    • 2014-10-07
    相关资源
    最近更新 更多