簡體   English   中英

Breeze js-如何從JSON字符串創建實體並將其導入到微風緩存中

[英]Breeze js - how to create an entity from a JSON string and import it into the breeze cache

我正在使用微風js,角度js,Web API,實體框架等的移動單頁網站上工作。

為了優化站點,我將微風元數據包含在捆綁的JavaScript中,該JavaScript包含站點需要的所有其他JavaScript。 理想情況下,我只希望瀏覽器請求的是index.html,它應該包含應用程序需要運行的所有內容,包括捆綁式和縮小式嵌入式樣式以及JavaScript。

但是,就像微風元數據對於站點正常運行非常重要,因此將其嵌入捆綁的JavaScript中一樣,站點還必須存在一個必需的復雜實體(具有某些其他實體的深層導航屬性)充分發揮作用。 我想將這個實體及其引用的所有實體也嵌入捆綁的JavaScript中。 我怎樣才能做到這一點?

我總是可以創建一個JSON字符串來表示該實體及其引用的所有實體。 然后將該JSON字符串與其余字符串一起嵌入捆綁的JavaScript中。 但是,如何使用嵌入在JavaScript中的實體JSON字符串輕松地將此復雜實體導入微風實體系統? 還是有一個更好的解決方案,可以用復雜的實體預加載微風實體系統而不必從服務器請求該實體?

我還想避免編寫服務器代碼來吐出在客戶端上創建實體的JavaScript。

最簡單的方法是對EntityManager.createEntity調用使用“ initializer”參數。

請參閱http://www.breezejs.com/documentation/creating-entitieshttp://www.breezejs.com/sites/all/apidocs/classes/EntityManager.html#method_createEntity

這個電話看起來像這樣。

myEntityManager.createEntity("Employee", { lastName: Smith", firstName: "John" });

因此,在您的情況下,您可以嘗試:

var initialValues = JSON.parse(json);
myEntityManager.createEntity("Employee", initialValues);

根據您的用例,您可能還需要設置這個新創建的實體的'entityState'。

我經常使用以下技術來創建用於自動化測試的實體數據:

制備

  • 在啟動時向EntityManager您想要的實體(和實體圖)。

  • 導出為帶有var exported = manager.exportEntities();的字符串var exported = manager.exportEntities(); exported字符串中嵌入了元數據,因此您不必分別將其降低。 二換一個!

  • 捕獲exported到JavaScript文件的內容,該JavaScript文件將作為腳本加載到index.html中 我的“捕獲”過程通常只是在控制台中顯示並抓取。

用法

現在,當您需要它時:

  • 加載該JavaScript元數據+數據文件。

  • 創建一個新的EntityManager (請記住以相同的數據服務終結點為目標)。

  • 導入您在腳本中捕獲的實體: manager.importEntities(launchData);

而且你很好。

閱讀EntityManager exportEntitiesimportEntities方法。

在“ Zza-Node-Mongo”的測試目錄中,您可以看到此技術的一種變體。

我個人不將數據與元數據合並,因此我使用“無元數據”選項導出。 我將元數據放在一個腳本中,將要加載的數據(通常是查找內容)放在一個單獨的腳本中,並將兩者都加載到index.html中

警告

你說

為了優化網站,我將微風元數據包含在捆綁的JavaScript中,該JavaScript包含網站需要的所有其他JavaScript。 理想情況下,我只希望瀏覽器請求的是index.html,它應該包含應用程序需要運行的所有內容,包括捆綁式和縮小式嵌入式樣式以及JavaScript。

提防過早的優化

我相當懷疑您是否可以通過將元數據和啟動日期嵌入腳本文件中來顯着改善應用程序的啟動時間。 如果瀏覽器緩存了這些腳本,則可能需要一段時間。 但這有其自身的風險,而且不是可靠的策略。

您想要的數據必須通過一種或多種方式通過有線方式傳遞給客戶端。 加載腳本文件-甚至最小化的腳本文件-都不比通過Web api AJAX調用從服務器提取元數據和啟動數據(都壓縮)更快。

我描述的技術確實可以加快測試速度,因為我必須在每次測試之前重新創建元數據和啟動數據。 我可以通過避免重復訪問服務器來衡量性能提升。 第一次旅行我一無所獲...相當於您的應用程序啟動。

做好心理准備,發現您辛辛苦苦的優化工作並沒有縮短啟動時間……甚至可能使某些用戶感到更糟糕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM