对于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,
},
...
]
这是否合理/这是一个合理的要求吗?
答案 0 :(得分:2)
我处于类似的情况,我最初选择后端处理过滤的路线,前端处理只是将数据绑定到d3。
问题是这非常慢。每个$ http请求需要1-3秒,因此过滤体验不是很好,因为您必须单击过滤器并等待查看响应。
实际上,将尽可能多的数据发送到前端并在那里进行过滤要容易得多。因此,虽然初始页面加载需要更长时间,但过滤是即时的。我最终重写了后端和前端,以便在前端完成工作。我试图使后端发送的初始数据尽可能平坦,并迭代通过该数组,并将相关数据推送到javascript对象的属性,以快速转换数据。
如果我再次做这个项目,我可能会尝试探索库dc.js和crossfilter,以尽量避免编写我的一些过滤逻辑。
以下是客户端过滤速度的示例: