对于SO社区来说,这个问题可能过于宽泛/概念化,但我还是试试看。
快速项目概述:
我有一个项目,它由一个前端应用程序组成,通过角$http请求从数据库请求数据。每个请求几乎都被映射成一个带有控制器的控制器,该控制器可以可视化该请求中指定的数据。
例如,我可以在特定的时间框架内指定关键字,包括:
get/A/kwords/?year=2013&month=9
并收到:
[
{"kword": "a", "count": 100, },
{"kword": "b", "count": 200, },
...
]然后我将其插入到d3 directive中。
问题是:
在这个项目中,我不得不把额外的工作交给开发后端或前端的人。按照目前的应用程序,数据库发送大量JSON数据,然后前端必须应用转换函数,以便将数据格式化为不同d3 directives所需的格式。例如,一些JSON请求发送前端需要逻辑的多余数据,以标准化输入指令的数据。
这是逻辑,我不认为前端应该被迫处理。在我看来,前端应该只需要与JSON请求参数交互,而不是实际数据的格式。我认为后端能够根据URL参数以一致格式提供数据更有意义。
例如,不是后端以这样的格式提供数据:
/get/B/kwords/?year=2013&month=9&limit=6
[
{
"kword": "a",
"data": [{"impressions": 100, "clicks": 150, "conversions": 200} ]
},
{
"kword": "b",
"data":[{"impressions": 50, "clicks": 60, "conversions": 70} ]
},
...
]并且强迫前端拆分这个数组对象数组对象,我应该能够在请求中指定一个data=impressions参数:
/get/B/kwords/?year=2013&month=9&limit=6&data=impressions
[
{
"kword": "a",
"data": 100,
},
{
"kword": "b",
"data": 50,
},
...
]这是合理的要求吗?
发布于 2014-06-27 02:55:42
我在类似的情况下,我最初使用的是后端处理过滤的路由,前端处理的只是将数据绑定到d3。
问题是这是非常缓慢的。每个$http请求花费1-3秒,所以过滤体验不是很好,因为您必须单击一个过滤器并等待看到响应。
实际上,将尽可能多的数据发送到前端并在那里进行过滤要容易得多。因此,虽然初始页面加载需要更长的时间,但是过滤是即时的。最后,我重写了后端和前端,完成了前端的工作。我试图使从后端发送的初始数据尽可能平坦,并遍历该数组,并将相关数据推送到javascript对象上的属性以快速转换数据。
如果我再次做这个项目,我可能会尝试探索库dc.js和交叉过滤器,以避免编写一些我的过滤逻辑。
以下是客户端过滤速度的例子:
https://stackoverflow.com/questions/24442189
复制相似问题