Javascript Breeze js-如何从JSON字符串创建实体并将其导入Breeze缓存
我正在一个使用breeze js、angular js、web API、实体框架等的移动单页网站上工作 为了优化站点,我将breeze元数据包含在一个包含站点所需的所有其他JavaScript的捆绑JavaScript中。理想情况下,我只希望浏览器请求index.html,它应该包含应用程序运行所需的所有内容,包括捆绑和缩小的内联样式和JavaScript 然而,正如breeze元数据对于站点的功能非常重要,因此嵌入到捆绑的JavaScript中一样,也必须存在一个复杂的实体(对于某些其他实体具有一些深度导航属性),该实体也必须存在,站点才能完全发挥功能。我想把这个实体和它引用的所有实体也嵌入到绑定的JavaScript中。我该怎么做 我总是可以创建一个JSON字符串来表示这个实体及其引用的所有实体。然后将该JSON字符串与其他字符串一起嵌入绑定的JavaScript中。但是,如何使用嵌入JavaScript中的实体JSON字符串轻松地将这个复杂实体导入breeze实体系统?或者,有没有更好的解决方案,可以使用复杂的实体预加载breeze实体系统,而不必从服务器请求该实体Javascript Breeze js-如何从JSON字符串创建实体并将其导入Breeze缓存,javascript,json,entity-framework,asp.net-web-api,breeze,Javascript,Json,Entity Framework,Asp.net Web Api,Breeze,我正在一个使用breeze js、angular js、web API、实体框架等的移动单页网站上工作 为了优化站点,我将breeze元数据包含在一个包含站点所需的所有其他JavaScript的捆绑JavaScript中。理想情况下,我只希望浏览器请求index.html,它应该包含应用程序运行所需的所有内容,包括捆绑和缩小的内联样式和JavaScript 然而,正如breeze元数据对于站点的功能非常重要,因此嵌入到捆绑的JavaScript中一样,也必须存在一个复杂的实体(对于某些其他实体具
我还希望避免编写服务器代码来抛出在客户端上创建实体的JavaScript。最简单的方法是对EntityManager.createEntity调用使用“initializer”参数 看 及 这个电话看起来像这样
myEntityManager.createEntity("Employee", { lastName: Smith", firstName: "John" });
因此,在您的情况下,您可以尝试:
var initialValues = JSON.parse(json);
myEntityManager.createEntity("Employee", initialValues);
根据您的用例,您可能还需要设置这个新创建实体的“entityState” 我经常使用以下技术为自动化测试创建实体数据: 准备工作
- 使用您希望在启动时可用的实体(和实体图)初始化
EntityManager
- 使用
var exported=manager.exportEntities()导出为字符串代码>。导出的
字符串中嵌入了元数据,因此您不必单独将其删除。二对一
- 将导出的
的内容捕获到一个JavaScript文件中,作为脚本加载到index.html中。我的“捕获”过程通常只是显示在控制台中并对其进行刮取
- 加载JavaScript元数据+数据文件
- 创建一个新的
(请记住以相同的dataservice端点为目标)EntityManager
- 导入脚本中捕获的实体:
manager.importenties(launchData)代码>
exportEntities
和importEntities
方法
例子
您可以在“Zza Node Mongo”的测试目录中看到此技术的一个变体
我个人不将数据与元数据结合,因此我使用“无元数据”选项导出。我将元数据放在一个脚本中,将在启动时加载的数据(通常是查找)放在一个单独的脚本中,并在index.html中加载这两个脚本
小心
你说
为了优化站点,我将breeze元数据包含在一个包含站点所需的所有其他JavaScript的捆绑JavaScript中。理想情况下,我只希望浏览器请求index.html,它应该包含应用程序运行所需的所有内容,包括捆绑和缩小的内联样式和JavaScript
谨防过早优化
我很怀疑,通过在脚本文件中嵌入元数据和启动日期,您是否能够显著地缩短应用程序的启动时间。如果浏览器缓存这些脚本,可能会有一段时间。但这也有其自身的风险,并不是一个可靠的策略
您需要的数据必须以某种方式通过线路传输到客户端。加载脚本文件(即使是最小化的脚本文件)比通过web api AJAX调用从服务器上拉取元数据和启动数据(都是gzip)要快,这一点是不言而喻的
我描述的技术确实加快了测试速度,因为我必须在每次测试之前重新创建元数据和启动数据。我可以通过避免重复访问服务器来衡量性能增益。第一次旅行我什么也得不到。。。这相当于您的应用程序启动
请做好心理准备,发现您辛苦获得的优化工作并没有改善启动时间。。。甚至可能让一些用户的情况变得更糟。避开话题,但你觉得我在这里的评论如何@LenielMacaferi-Wow。我以前没见过那篇文章。下周我将与我们的团队进行内部讨论。这似乎好得难以置信。我会跟进的。