我最近一直在嘗試breezejs,並且正在考慮將它用於許多個人和工作項目,因爲我喜歡它。我知道現在所有的風格都是單頁面應用程序,我明白了,但我們假設您不想引入新的路由框架,並且只是使用.NET MVC默認路由引擎。每次發生POST /重定向時,您都將失去breeze的實體管理器對元數據和其他實體的客戶端緩存功能。使用BreezeJS無SPA
其中一個問題是我們有一大組元數據(.5mb)針對每個請求發出。現在,如果在重定向之前客戶端有任何其他請求,那麼該元數據將被緩存並且一切正常。我試圖避免除了靜態列表之外還需要下載每個視圖的元數據,我還會在實體管理器中緩存這些靜態列表。我知道元數據可以通過製作更小的對象圖來優化,但我們不關注它。
我想出的一件事是將元數據存儲在localStorage中,然後在頁面加載中檢索它。
function exportMetadata() {
var metadata = emanager.metadataStore.exportMetadata();
window.localStorage.setItem('somename', metadata);
}
function importMetadata() {
var metadata = window.localStorage.getItem('somename');
var mstore = new breeze.MetadataStore();
mstore.importMetadata(metadataFromStorage);
manager.metadataStore = mstore;
}
雖然這工作(並與不同的語法靜態列表工作)感覺哈克,似乎違背圖書館怎樣來使用。我不禁想到BreezeJS與SPA架構相結合,將其所有功能都用作書面。也許我正在考慮錯誤的方式?有沒有關於如何在SPA之外使用BreezeJS的建議或例子?
當我說'hacky'時,我指的是在非SPA應用程序中使用Breeze。我的主要意圖是就Breeze是否應該用於非SPA應用程序而徵求一些迴應。你的第一句話會表明不是,但你也同意你會以同樣的方式解決我上面提到的問題。我們有一個使用.net MVC和WCF服務構建的完整應用程序。我認爲本地緩存方法只是在對Web API進行完全重構之前移除笨重的Web服務的一個障礙。當項目開始衰退時(對...),我們會跳到Durandal或Angular。 – totaldis
我明白了。是的,如果用戶一段時間沒有在網頁上生活,微風的價值就會有限。如果他們長時間保持放置狀態並且頁面只是回到服務器進行AJAX調用,它仍然很有價值。他們過去稱這種風格的應用程序爲「AJAX應用程序」。直到最近這個名字才變成了「SPA」(一個可怕的名字......但我不能決定)。 – Ward