将node.js服务器的javascript处理转移到客户端
Moving node.js server javascript processing to the client
我想就将传统上在服务器上完成的处理转移到node.js web应用程序中由客户端处理的实际含义发表一些意见。
示例案例研究:用户上传一个CSV文件,其中包含他们多年的银行对账单条目。我们想解析文件,对每个条目进行分类,并计算每个类别的累积值,这样我们就可以将新分类的报表存储在数据库中,并向用户显示支出分析。
条目按描述中的匹配字符串进行分类。有许多类别和许多条目,处理需要相当长的时间。
在我们的node.js服务器中,我们可以在等待网络响应等的同时愉快地释放事件循环,但如果有任何数据处理或类似的处理,服务器将被阻止响应请求,这似乎是不可避免的。
传统上,CSV文件将被传递到服务器,服务器将进行处理,保存在数据库中,并发回处理的输出。
在我们的单线程node.js服务器中,这种处理由浏览器处理,并显示输出并发送到服务器进行存储,这似乎是有道理的。当然,客户端必须等待,但它们的处理不会阻止服务器响应其他客户端的请求。
我很想看看是否有人有使用这种模型构建应用程序的经验。
所以,问题是…如果可能的话,让浏览器而不是服务器来处理任何会阻止事件循环的处理,是否存在任何问题?这是node.js应用程序开发的一种好的/明智的/可行的方法吗?
我不认为信任客户端处理的数据是个好主意。
相反,您应该考虑创建一个单独的进程侦听的工作队列,将CPU密集型任务与处理HTTP请求的node.js进程分开。
我建议的数据流是:
- HTTP上传请求
- 应用程序服务器(将原始文件保存到工作进程可以访问的位置)
- 通知"csv"工作队列
- 工作进程上载了csv文件
尽管完全可能,但简单地将处理转移到客户端机器并不能解决基本问题。
现在,客户端的事件循环被阻止,从而阻止用户与浏览器进行交互。浏览器往往会检测到这个问题,并完全停止执行页面的脚本。这是你的用户肯定会讨厌的。
既没有办法委派也没有办法分担工作量。使用第二个进程(例如第二个节点实例)在服务器端进行数字运算还有一个额外的好处,那就是允许操作系统使用第二CPU内核。理想情况下,只要服务器中有CPU核心,就可以运行尽可能多的Node实例,并在它们之间平衡工作负载。看看二极管模块,了解如何在节点中实现多进程通信。
- 可以't让我的if语句处理js中的html表单输入
- keyup事件处理程序更改焦点不适用于快速键入
- 如何使用jquery处理php循环通过元素
- angular.js没有'无法在PhoneGap中处理视图标记
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- 后焦点更改为IE 11中的地址栏,而不是转移到表单中的下一个控件
- 提示使用服务器端事件处理程序激活JavaScript
- javascript:如何在antlr生成的Lexer中进行错误处理
- 如何轻松地将服务器端变量从Java代码转移到客户端代码
- 如何编写一个具有公共标头的批处理
- 在同一个服务工作者中处理service-worker.js有任何影响吗
- 如何处理node.js节点mongodb中的连接和查询队列
- 通过命令行/批处理文件打开页面时,将javascript代码注入Google Chrome
- 如何处理10页以上的静态页眉/页脚
- 将事件处理程序绑定到任何可能的事件
- 通过ajax将坐标传递到php服务器端,并在处理后检索到javascript
- python到“;流“;字典处理
- 使用javascript进行实时图像处理
- 导入jQuery脚本获胜'我不处理html文件
- 将node.js服务器的javascript处理转移到客户端