首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在前端做计算什么时候合适?

在前端做计算什么时候合适?
EN

Software Engineering用户
提问于 2014-08-04 11:38:08
回答 2查看 35.4K关注 0票数 30

我的团队正在开发一个基于WEB的金融应用程序,并且与一位同事有过一点争论,那就是把计算保存在哪里--纯后端,还是将一些保存在前端?

简要说明:我们在前端使用Java (ZK,Spring),后端使用Advancement4GL。涉及到一些核心数学和数据库数据的计算被保存在后端,所以我不是在谈论它们。我指的是用户输入值X的情况,然后将其添加到值Y(显示在屏幕中),结果显示在字段Z. Pure和简单的jQuery-ish操作中。

那么,这里的最佳做法是什么:

1)使用JavaScript添加值,以保存从后端和后端保存的值,然后在后端"on“验证它们?

2)将所有业务逻辑保持在同一个位置--因此将值带到后端并进行计算吗?

3)在前端进行计算;然后将数据发送到后端,在那里验证它们,再次进行计算,只有在结果有效和相等的情况下,才能将它们显示给用户?

4)还有什么别的吗?

注意:我们在Java中进行了一些基本的验证,但与所有其他业务逻辑一样,大多数验证仍然处于后端。

通过重新计算后端中的所有内容而发送的数据量的增加不会成为问题( XML大小小,服务器和带宽将承受用户增加的操作量)。

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2014-08-04 11:46:15

像往常一样,这样的决定涉及不同目标之间的权衡,其中有些目标彼此冲突。

  • 效率建议您在前端执行计算,这是因为这样用户的计算机使用更多的电源,而您的服务器使用的更少,而且用户看到更快的反馈,从而改善用户体验。
  • 安全性要求任何状态更改操作都不能依赖于在客户端计算机中检查或计算的数据,因为客户端计算机可能处于恶意攻击者的控制之下。因此,必须验证来自不受信任的源服务器端的任何内容。
  • 编程效率和可维护性表明,由于浪费精力,您不应该进行两次相同的计算。

从表面上看,这听起来好像所有事情都必须由服务器端来完成,但情况并不总是如此。如果您可以轻松地维护重复的代码(例如,通过从服务器端Java验证器自动生成javascript验证器),那么重复计算可能是一个很好的解决方案。如果所涉及的数据都是不重要的,例如,如果用户只能欺骗自己,而不是你,如果他们操纵值,那么服务器端验证是不必要的。如果您的响应时间被完全不同的瓶颈所支配,那么往返延迟是不可察觉的,那么UX的考虑并不是决定性的,等等。因此,您必须考虑这些压力在您的情况下有多大,并做出相应的决定。

票数 46
EN

Software Engineering用户

发布于 2014-08-04 12:38:37

有充分的理由在后端

中进行计算

  • 业务逻辑不属于表示层
  • JavaScript中的业务逻辑构成了威胁
  • 您假设存在一个单前端->单向后端关系,而这种关系并不总是正确的,后端应该被认为具有能力或服务于多个前端应用程序,因此您不能假设任何事情。
  • 如果计算使用大量的数据,那么将其保存在前端是不有效的。
  • 如果计算使用数据库,则无法在前端复制它。

我的推荐

  • 让数据库在模型中强制执行尽可能多的业务规则,包括外键、主键、检查约束和触发器
  • 当未满足业务规则时,业务层抛出异常(要么是因为数据库返回了错误,要么是因为业务层本身验证了数据)
  • 如果并且只有在响应时间不可接受的情况下,使用Ajax进行验证或预处理(工作不会在JavaScript中真正完成,它将在后端完成,而不必重新加载页面)
  • 您可以在JavaScript中进行简单的验证,比如不允许空值、太长的值或超出范围的值(对于后者,您可能希望在后端生成范围)。
票数 21
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/252224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档