Ajax:许多(较小的)呼叫与单个大呼叫

时间:2013-08-18 18:45:09

标签: asp.net-mvc-3 jquery

我有一个页面,可以向所有用户显示某种类型的所有可用数据。数据将以多个标准分开显示,我正在思考某些设计问题。

让事情更容易理解,比如我每个月,每个类别和每个地点都有销售数据。在页面上,我将为每个月创建一个手风琴,我将在每个类别中有1个表格,每个表格中都有一个位置列表。

所以我想知道,哪个更好:

1)一个控制器方法,用于获取所有数据,并且:    a)将从数据库返回的表格格式转换为层次结构(因为这对前端导航更容易)的工作如下:

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

b)返回表格数据,如

{ Month, Category, Location, Value }

并让前端的JQuery循环使其成为分层

2)许多较小的方法,每个方法都返回不同的数据,需要由前端调用?例如,一个返回有数据的月份的明确列表的方法将被调用一次,但是JQuery需要循环遍历结果以查询类别,这些类别本身将被循环以获取位置,有点像这样:

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

作为最后一点,“更好”是指系统在繁重负载下表现更好,并且代码以更易维护和干燥的方式构建。

感谢您的考虑

1 个答案:

答案 0 :(得分:0)

如果没有单个查询的实际性能数字,答案必须包含相当多的猜想。但这里有一些概括。

如果数据被呈现给“所有用户”,那么您最重要的决定就是缓存数据。话虽如此,代码的服务器端性能将不那么重要。并非不重要,但如果你每次生成服务器数百,数千或数百万次,你就可以容忍更多的服务器端工作。

对于可扩展性,通过更多呼叫,更少需要调用服务器。这将指向返回所有数据的单一控制器方法。除非获取数据的时间非常短,只需要一个月的数据,这将是您更好的选择。

为了将数据转换为服务器上的层次结构与客户端上的层次结构,我倾向于在客户端上执行此操作。如果有大量此类数据,如果在服务器上完成,您的客户端体验可能会更好,但在客户端上执行此操作可能会有一些优势。首先,客户端代码自动分发。如果您正在尝试获得最高吞吐量,则将逻辑(尤其是表示逻辑)移动到客户端将释放服务器以执行其他工作。 此外,通过在客户端上执行转换,您的服务器方法不依赖于视图。如果您以后决定使用不同的显示器,那么可能只是视图更改。

但是,回到答案的开头,如果您要创建一次这样的数据并对其进行缓存,那么在服务器上进行转换就不需要每个客户端对其进行转换。