BreezeJS RequireJS针对生产进行了优化

时间:2014-06-28 18:39:09

标签: node.js angularjs mongodb requirejs breeze

使用BreezeJS,RequireJS,AngularJS和NodeJS以及MongoDB作为后端,我正在构建一个胖客户端应用程序,到目前为止取得了巨大的成功,因为BreezeJS带走了保持我的域模型持久化的工作。但它正在增长,如果它们没有缓存在localhost上,加载所有文件需要花费超过五秒钟,如果您尝试使用远程服务器进行快速演示,则会发生灾难性的事件。

R优化器警告:

  

bower_components / breezejs / breeze.debug.js有多个匿名定义。   可能是来自另一个构建系统(如Ender)的构建文件。跳绳   正常化。

尝试运行已编译的生产文件抛出:

  

未捕获的错误:匿名的define()模块不匹配:function(){return definition(global); }   (breeze.debug.js L10)

有没有人将BreezeJS + RequireJS投入生产?

3 个答案:

答案 0 :(得分:0)

看看breeze.samples.js GitHub回购中的Todo-Require样本。

答案 1 :(得分:0)

Todo-KO-Require示例向您展示了如何使用require进行编码,但它没有向您展示如何打包生产。如果您要求按需下载每个文件,您将会受到影响。

你需要优化捆绑和缩小......在微风范围之外的主题,而不是我们急于制作的东西。或许你想把那头牛带到角落里并与我们其他人分享。

为什么要担心?

[更新,2014年7月2日]

让我们退一步,重新发现所有这一切。 需要做什么?

我将它与KO一起用作依赖注入的载体。这是它在Durandal中的角色。

Angular带有自己的DI,它将Ng应用程序中require的作用降低到异步文件加载器。这通常是" meh"对我来说,部分是因为很快就遇到了你所描述的文件加载乱序。这导致捆绑,这是一个令人头疼的问题,并且可以使用其他工具轻松完成。

  

我在带有动态加载模块的大型应用程序中看到了这个值。但是除了异步文件加载之外,Ng在这方面很可悲。他们将在第2节中解决的问题。

我很高兴让你发表相反的意见。因此,让我们考虑如果我们无法解决这个问题会发生什么。 如果使用 r 无法优化微风怎么办?

我的直觉是将微风与其他任何东西捆绑起来并不是最佳选择!

最小化的微风本身相当大。对我而言,通过将其与您的应用程序资产捆绑在一起,您将获得任何性能优势并不明显。当然,您希望减少服务器请求的数量。但两个请求的有效载荷是否比一个大请求慢1/2?你知道你的目标环境吗?

我并不是那种坚持每个脚本都按要求发送的迂腐者。使用脚本标记分别加载BreezeJS然后将其提供给其他需要感知的模块(我假设您知道如何执行此操作)是微不足道的。那会是什么可怕的事情?

虽然我们期待您的repro示例(请参阅下面的评论),但我可能难以证明优先关注此问题。不然说服我。

答案 2 :(得分:0)

我设法编译了我的项目,省去了微风。通过对微风mongo dataservice文件头的小调整。使用r optimizer config

paths: {
  'breeze': 'empty:',
  'breeze-dataservice-mongo': 'empty:'
}

Breeze mongodataservice可以像lib / breeze-angular一样包含在内。

(function () {
  "use strict";
  requirejs.config({
    paths: {
      'breeze': 'bower_components/breezejs/breeze.debug',
      'breeze-dataservice-mongo': 'lib/breeze.dataService.mongo'
    }
  });

  require(['angular', 'jquery', 'core/logger', 'fastclick', 'core/index', 'domready!'], function (angular, $, logger, fastClick) {
    logger.info('iaGastro client is booting');
    fastClick.attach(document.body);
    angular.bootstrap(document, ['iaApp']);
  });
})();

完全放弃SaveQueueing,我想我可以为我的并发保存错误找到不同的解决方案..

@Ward: RequireJS执行静态文件加载,例如我的域类,模板和json文件。现在它还连接了我的所有文件,并用一个参数缩小它们。可能是文档,这不是最好的,因为我觉得我不是唯一一个有时会误解RequireJS的人。 此外,它的错误消息可能令人沮丧(循环依赖...)。