Javascript 数据应该在后端还是前端格式化?

Javascript 数据应该在后端还是前端格式化?,javascript,parsing,web,backend,Javascript,Parsing,Web,Backend,我有一个web应用程序,我想知道在前端还是后端格式化数据更好?他们都完成了任务,但有人能帮我集思广益,在两者之间选择哪一个更好 例如,假设我有一个后端,它以特定的格式返回名称的家族树,但在前端,我需要调整格式以匹配小部件期望的格式,这种调整是在后端还是在前端进行的 如果在后端完成,我可以直接将数据推送到前端的小部件中,否则,我必须事先在前端进行解析。有人能想到这种情况的利弊吗?谢谢。这实际上取决于您需要对数据进行的转换的性质,以及需要进行某种类型转换的频率 默认情况下,我会让后端返回原始数据,但

我有一个web应用程序,我想知道在前端还是后端格式化数据更好?他们都完成了任务,但有人能帮我集思广益,在两者之间选择哪一个更好

例如,假设我有一个后端,它以特定的格式返回名称的家族树,但在前端,我需要调整格式以匹配小部件期望的格式,这种调整是在后端还是在前端进行的


如果在后端完成,我可以直接将数据推送到前端的小部件中,否则,我必须事先在前端进行解析。有人能想到这种情况的利弊吗?谢谢。

这实际上取决于您需要对数据进行的转换的性质,以及需要进行某种类型转换的频率


默认情况下,我会让后端返回原始数据,但对于前端经常需要的特定数据格式,我会让后端端点接受一个请求参数,该参数告诉后端应该以什么格式返回数据。

我会与另一个我使用的开发人员一起处理这个问题。他喜欢在SQL中工作,并且基本上做那里的所有事情,业务逻辑、格式等等。让我烦透了。在我看来(至少对于我们正在开发的应用程序而言),SQL用于处理数据存储和检索,服务器代码/客户端代码用于向用户呈现数据并处理用户与该数据的交互

但这并不局限于SQL(或其他DB引擎)与应用程序代码的对比。在服务器代码更像是一个API的情况下,将数据传递给一个使用大量javascript的web应用程序,同样的情况也适用。API不知道UI可能希望如何处理数据,API的目的应该是交付原始数据,并让javascript/表示代码以所需的方式处理格式化数据

我肯定有例外,但这是我喜欢遵循的一般规则。格式化属于表示领域,而不是业务逻辑或数据检索领域。把它放在那里


编辑:我重读了你的问题,我想我错过了一个微妙但关键的要点。如果您有一个构造函数或模型,或者您有什么东西需要一个特定格式的输入,那么最好在SQL中进行格式化/转换,以避免在使用数据之前转换数据的额外步骤。不过,这在很大程度上取决于试图解决的问题,以及数据来自何处以及将在何处使用的具体情况。

好问题。我设计了一个受MVC启发的分层架构

后端

我根据后端数据的“自然”顺序对其进行建模(格式化)。换句话说,我遵循数据的内部组织。这是因为我的API经常被多个不断变化或发展的客户端使用,多次重写API或拥有多个版本需要花费太多的时间来维护

这并不意味着您应该在每次API调用时发送数据库的内容。您肯定应该为每个调用缩减数据模型,但它应该是后端(“自然”)数据模型的缩减版本,而不是为特定视图定制的数据结构

前端

在前端,我有一个紧密耦合的控制器,它从服务器接收数据,并将数据转换成与给定视图非常匹配的模型。根据客户端使用的技术,可能会有库支持(例如,用于Java的javascript/HTML Swing的AngularJS、用于C#的WPF等)


我发现这种架构可以实现干净的分离和高生产率

另一个需要考虑的方面是区域设置意识(千位分隔符、逗号分隔符、日期格式等)

如果消费应用程序是从具有区域设置意识的客户端(例如web浏览器)访问的,我更喜欢将格式尽可能地推到前端。从技术上讲,可以将区域设置作为参数发送到后端API,但是现代前端库在默认情况下处理区域设置方面通常非常好,这使得在前端处理区域设置更加容易


例外情况是,当您确信您的受众仅限于一种语言环境时。

我想提供一个前端开发人员/用户体验的观点和示例

现在,在我的前端,我正在循环通过一个从API接收的“原始”JSON对象,并将其“转换”为另一个JSON对象,该对象将直接输入到我的UI表中。请记住,在进行解析时,UI几乎是冻结的。作为一种解决方案,我可以在API中进行“转换”,只需传入一个对象,就可以直接将其输入到UI表中,而无需修改它


我确实看到了后端转换(关注点分离)的理论问题。我还看到了一个问题,即当其他一些UI组件需要相同的数据但格式不同时,构建/维护所需的时间更长。但我相信,让用户界面自由不被冻结是有道理的。

在这种情况下,我的经验中总会有一个权衡:我可以触摸后端吗?(并不总是确定…*新的格式过程需要很大的努力吗?通常,根据后端的当前负载,我更喜欢在后端和前端分配工作。现在的浏览器性能不错,除非您必须订购百万行,否则它是可以接受的。此外,根据您的需要,您可以在服务器端缓存格式化的数据。就我个人而言,我尝试将信息存储在数据库中,而不使用任何格式(名字、姓氏、日期为utc,无htmlencoding,…)并让UI负责格式化。如果经常使用某种格式,或者如果这种格式需要大量CPU