我有以下问题:
在下载查找后,浏览器将在大约30秒内无响应。 在此之后,一切都像魅力一样。
为什么微风不会使用超时来通知用户界面?
Firefox抱怨脚本操作很长,没有响应等。任务管理器(显示Firefox / Chrome /等)没有响应。
我做错了什么,或者这是设计的?
如果这是设计的,我可以使用'Web Worker'来完成所有繁重的操作,然后返回整个模型或其他东西吗?
答案 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