2014-02-27 24 views
0

我有以下問題:Breezejs,瀏覽器凍結而經理assemples對象

  • 微風獲取元數據(23.4KB)
  • 微風獲取查找(4.5MB)右後查找

下載後,瀏覽器將在30秒內無響應。在此之後,一切都像魅力一樣。

爲什麼微風不使用超時通知用戶界面?

Firefox抱怨長文字操作,無反應等。任務管理器(顯示Firefox/Chrome /等)沒有響應。

我做錯了什麼,或者這是設計?

如果這是通過設計,我可以使用'Web Worker'來完成所有沉重的操作,然後返回整個模型或其他東西?

+0

「微風讀取查找(4.5MB)」 聽起來查找的一個瘋狂量。我猜想你正在查找超過100k條記錄,然後Breeze必須映射這些查找的所有相關屬性。你有沒有想過要把它減少到只需要什麼? –

+0

當然,認爲這是我需要的。 這就像一個Web應用程序的管理工具。 我不希望速度更快,因爲數據綁定尚未初始化,所以我預計它會有所響應 – user2731973

+0

http://windyroad.com.au/2007/03/30/web-apps-the-new-單線程gui/ 即使有一個簡單的setTimeout是IS響應 – user2731973

回答

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數據到達了。

EDIT 回答與webWorker這裏提供:BreezeJs with dedicated web worker

0

我想我明白你的觀點。 Breeze在處理那些成千上萬個到達的實體時處理UI線程。如果微風能夠以某種方式意識到它做了多少工作,並且會這樣做,那麼它可能會在那裏拋出暫停,讓UI有機會呼吸。

我不確定這將是多麼安全,因爲微風將不得不選擇一個時刻,不會從某人的角度使緩存處於不穩定狀態。

我相信你可以通過將一個巨大的Lookups調用分成幾個更小的對象來簡化你自己。如果這對您的應用程序至關重要,您仍然可以異步地等待所有較小的查找承諾的完成。事實上,他們是獨立的承諾回調應該給你你所尋求的救濟。

請試試看,並告訴我們它是如何工作的。

P.S .:你也有一個很酷的機會在這裏選擇性地緩存這些查找本地存儲(indexdb),所以你不必每次都下載它們。當然,你需要一個版本控制方案和一些管道工程,所以一旦事情看起來不錯,這就是你的未來。