Breezejs,浏览器冻结,而经理解释对象

时间:2014-02-27 13:31:16

标签: javascript breeze

我有以下问题:

  • Breeze获取元数据(23.4KB)
  • Breeze抓取查询(4.5MB)

在下载查找后,浏览器将在大约30秒内无响应。 在此之后,一切都像魅力一样。

为什么微风不会使用超时来通知用户界面?

Firefox抱怨脚本操作很长,没有响应等。任务管理器(显示Firefox / Chrome /等)没有响应。

我做错了什么,或者这是设计的?

如果这是设计的,我可以使用'Web Worker'来完成所有繁重的操作,然后返回整个模型或其他东西吗?

2 个答案:

答案 0 :(得分:0)

我想我明白你的意思了。在处理数千个到达实体时,Breeze占用了UI线程。如果Breeze能够以某种方式意识到它正在做多少工作,并且会做什么,那么它可能会在那里暂停,让UI有机会呼吸。

我不确定Breeze会不会选择一个不会从某人的角度将缓存置于不稳定状态的时刻,这是多么安全。

我相信你可以通过将一个巨大的Lookups调用分成几个较小的调用来让自己变得更容易。如果对您的应用程序至关重要,您仍然可以异步等待所有较小的查找承诺的完成。事实上,他们是独立承诺回调应该给你你寻求的救济。

请尝试并告诉我们它是如何运作的。

P.S。:您还有一个很酷的机会可以选择性地将这些查找缓存在本地存储(indexdb)中,这样您就不必每次都下载它们。你当然需要一个版本控制方案和一些管道,所以一旦看起来不错,这就在你的未来。

答案 1 :(得分:0)

我试过这样的事情:

var test = function (name) {
        return Q.fcall(function () {
            setTimeout(function () {
                toastr.success(name); // Notify me
                return EntityQuery.from(name)
                      .using(manager).execute()
            }, 1000) // This should be zero
        });
    };

    var primeData = function (name) {
        return test('Languages')
                .then(test('dummy1'))
                .then(test('dummy2'))
                .then(test('dummy3'))
                .then(test('dummy4'))
    };

然而,通知似乎同时弹出,表示

return EntityQuery.from(name)
                      .using(manager).execute()

在实体构造完成时不返回,但是当该实体的JSON数据到达时。

<强> 修改 回答这里提供的webWorker:BreezeJs with dedicated web worker