ruby-on-rails - Rails/React.js:如何避免重复计算
问题描述
我有一个带有 React.js 前端的 Rails 应用程序。用户可以上传包含一些 JSON 数据的文件,我的应用程序将读取数据并根据数据以漂亮的图表向用户显示一些统计信息。
我还需要一个 API,它可以接收带有 JSON 数据的请求,执行相同的计算以获取相同的统计信息,并以请求中指定的格式(例如 YAML 或 JSON 或纯文本)将文件返回给用户。
问题是,我到底在哪里进行计算?
如果我在组件的某个位置在前端执行它们,那么我必须在后端编写类似的逻辑,以便 API 可以返回统计信息。
另一方面,由于我没有将任何内容保存到数据库中,因此创建一个完成计算的模型并没有什么意义。
不知道正确的结构是什么。
解决方案
因为您需要公开原始 API,所以在 Rails 应用程序的服务器端具有逻辑是不可避免的。从您提供的细节来看,您的主要考虑似乎应该是避免重复业务逻辑。那只剩下一个解决方案:将计算代码放在 Rails 后端,并通过 API 公开它。
您没有将任何内容保存到数据库这一事实很好。服务器通常负责执行操作而不存储任何类型的持久状态。如果不是这种情况,我们将依赖客户端代码在各处执行大量计算——这意味着人们的本地机器将试图通过浏览器处理大数据之类的东西;非常不切实际。
在服务器端构建 API 后,在 React 应用程序中利用这些 API 端点。流程可能类似于:
- 用户点击上传文件
- React 应用程序获取文件,读取其中的数据
- React 应用程序获取相关数据,调用 Rails 应用程序上的 API 端点来执行计算
- React 应用程序接受响应并将这些漂亮的图表放在一起
推荐阅读
- html - 为什么这个响应式 CSS 不能改变我的布局?
- user-interface - 如何在我的用户界面中显示计数器的增量?
- excel - 将控制声明为特定类型
- vue.js - 在调用 getter 以通过 id 获取项目时未定义
- android - SendTextMessage 成功但未在所有手机上接收
- java - 如何使用spring boot batch在不同的类中赋予不同的Bean
- postgresql - 有没有办法在 PostgreSQL 中上传 212 列 csv 文件
- html - 使用悬停时图像不显示
- java - Integer.parseInt 做什么?
- c++ - 为什么 STL 的置换函数在这里不起作用?