数据库 - 前端应用程序结构

时间:2014-06-27 00:12:59

标签: database angularjs web-applications d3.js

对于SO社区来说,这个问题可能过于宽泛/过于概念化,但我会给它一个机会。

快速项目概述:

我有一个项目,包括一个前端应用程序,通过Angular $http请求从数据库请求数据。每个请求都与控制器一对一映射,控制器可视化该请求中指定的数据。

例如,我可以使用以下内容在特定时间范围内指定关键字:

获取/ A / K字/年= 2013&安培;一个月= 9

并收到:

[
    {"kword": "a", "count": 100, },
    {"kword": "b", "count": 200, },
    ...
]
然后我将其插入d3 directive

问题:

我已经达到了项目的重点,我不得不向开发后端或前端的人员提供额外的工作。当应用程序当前所在时,数据库会发送大块JSON数据,然后前端必须应用变换函数,以便将数据整形为不同d3 directives所需的格式。例如,一些JSON请求发送前端需要逻辑的多余数据,以标准化输入指令的数据。

这是逻辑,我不认为应该强制前端处理。 在我看来,前端应该只需要与JSON请求参数进行交互,而不是实际数据的格式。我认为后端能够提供服务更有意义根据URL参数,以一致的格式提供数据。

例如,代替后端提供格式化的数据:

/获得/ B / K字/年= 2013&安培;一个月= 9&安培;极限= 6

[
    {
    "kword": "a",
    "data": [{"impressions": 100, "clicks": 150, "conversions": 200} ]
    },
    {
    "kword": "b",
    "data":[{"impressions": 50, "clicks": 60, "conversions": 70} ]
    },
    ...
]

并强制前端拆分此array-object-array-object,我应该能够在请求中指定 data = impressions 参数:

/获得/ B / K字/年= 2013&安培;一个月= 9&安培;极限= 6&安培;数据=曝光

[
    {
    "kword": "a",
    "data": 100,
    },
    {
    "kword": "b",
    "data": 50,
    },
    ...
]

这是否合理/这是一个合理的要求吗?

1 个答案:

答案 0 :(得分:2)

我处于类似的情况,我最初选择后端处理过滤的路线,前端处理只是将数据绑定到d3。

问题是这非常慢。每个$ http请求需要1-3秒,因此过滤体验不是很好,因为您必须单击过滤器并等待查看响应。

实际上,将尽可能多的数据发送到前端并在那里进行过滤要容易得多。因此,虽然初始页面加载需要更长时间,但过滤是即时的。我最终重写了后端和前端,以便在前端完成工作。我试图使后端发送的初始数据尽可能平坦,并迭代通过该数组,并将相关数据推送到javascript对象的属性,以快速转换数据。

如果我再次做这个项目,我可能会尝试探索库dc.js和crossfilter,以尽量避免编写我的一些过滤逻辑。

以下是客户端过滤速度的示例:

http://dc-js.github.io/dc.js/

http://square.github.io/crossfilter/