0

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

为了让事情更容易理解,假设我有每个月、每个类别和每个位置的销售数据。在页面上,我将为每个月创建一个手风琴,其中每个类别有一个表,每个表中都有一个位置列表。

所以我想知道哪个更好:

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);
        }
     }

最后一点,“更好”是指系统在重负载下会表现得更好,并且代码的结构更易于维护和干燥。

谢谢您的考虑

4

1 回答 1

0

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

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

对于可伸缩性,宁愿对服务器的调用更少而不是更多调用。这将指向返回所有数据的单个控制器方法。除非获取数据比仅获取一个月的数据更耗时,否则这将是您更好的选择。

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

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

于 2013-08-19T12:40:51.840 回答