2013-08-18 191 views
0

我有一個頁面將向所有用戶顯示某種特定類型的所有可用數據。數據將以多個標準分隔顯示,我正在思考某些設計問題。Ajax:與一次大型呼叫相比,許多(較小)呼叫

使事情更容易理解,比如說我有每月,每個類別和每個位置的銷售數據。在頁面上,我將爲每個月創建一個手風琴,其中每個類別都有一個表格,每個表格中都有一個位置列表。

所以我不知道,這是更好:

1),其獲取的所有數據和單個控制器的方法: a)作出從數據庫返回的表格格式轉換爲分級結構的工作(因爲這是前端導航更容易),如:

{ Month, { Category, { Location, Value } } } 

b)中返回類似

{ Month, Category, Location, Value } 

表格式數據nd讓JQuery在前端循環使其成爲分層結構

2)許多較小的方法每個都返回不同的數據,並且需要由前端調用?例如,返回有數據的明確月份列表的方法將被調用一次,但是JQuery需要遍歷結果以查詢類別,這些類別本身可以循環以獲取位置,有點像這樣的:

for (var m in GetMonths()) { 
    for (var c in GetCategories(m)) { 
     GetLocations(m, c); 
     } 
    } 

最後一點,通過「更好的」我的意思是這兩個系統將在重負載下有更好的表現,並且該代碼在一個更容易維護和乾式結構。

感謝您的考慮

回答

0

沒有實際性能參數進行個人查詢的答案必須包含相當多的猜想。但是這裏有一些概括。

如果數據正在呈現給「所有用戶」,那麼您最重要的決定就是緩存數據。話雖如此,代碼的服務器端性能將不那麼重要。不是不重要的,但是如果你每次生成服務器數百,數千或數百萬次,你可以容忍更多的服務器端工作。

對於可擴展性,更多的調用更少地調用服務器。這將指向返回所有數據的單一控制器方法。除非獲取數據比僅獲取一個月的數據花費更多的時間,否則這將是您更好的選擇。

爲了將數據轉換爲服務器上的層次結構與客戶端上的層次結構,我傾向於在客戶端上執行此操作。如果有大量這些數據,那麼如果客戶端在服務器上完成,則客戶端體驗可能會更好,但在客戶端上做到這一點有一定的優勢。首先,客戶端代碼是自動分發的。如果您試圖獲得最高的吞吐量,將邏輯(特別是表示邏輯)移動到客戶端將釋放服務器以完成其他工作。 另外,通過在客戶端上進行轉換,您的服務器方法並不依賴於視圖。如果您稍後決定採用不同的顯示屏會更好,則可能只是視圖更改。

但是,回到答案的開頭,如果您要創建一次數據並將其緩存起來,那麼在服務器上執行轉換就可以避免每個客戶端都需要對其進行轉換。