繁体   English   中英

将node.js服务器javascript处理移至客户端

[英]Moving node.js server javascript processing to the client

我希望就移动处理的实际含义提出一些意见,这些移动处理通常是在由node.js Web应用程序中的客户端代替客户端处理的服务器上完成的。

案例研究示例:用户上载一个CSV文件,其中包含了价值一年的银行对帐单条目。 我们想解析文件,对每个条目进行分类,并为每个类别计算累积值,以便我们可以将新分类的语句存储在db中,并向用户显示支出分析。

这些条目通过描述中的匹配字符串进行分类。 类别很多,条目很多,处理时间很长。

在我们的node.js服务器中,我们可以在等待网络响应之类的时候愉快地释放事件循环,但是如果发生任何数据紧缩或类似的处理,服务器将无法响应请求,这似乎是不可避免的。

传统上,CSV文件将传递到服务器,服务器将进行处理,保存在db中,然后将处理结果发送回去。

在我们的单线程node.js服务器中,这种处理似乎是由浏览器处理的,输出显示并发送到服务器进行存储似乎很有意义。 当然,客户端将必须等待完成,但是它们的处理不会阻止服务器响应其他客户端的请求。

我很想看看是否有人使用此模型构建应用程序。

因此,问题是..在可能的情况下,使浏览器而不是服务器进行处理是否存在任何问题,这些处理将阻止事件循环? 这是Node.js应用程序开发的一种好/明智/可行的方法吗?

我认为信任客户端处理的数据不是一个好主意。

相反,您应该考虑创建一个工作队列,该工作队列将监听一个单独的进程,从而将CPU密集型任务与处理HTTP请求的node.js进程分开。


我建议的数据流为:

  1. HTTP上传请求
  2. 应用服务器(将原始文件保存在工作进程可以访问的位置)
  3. 通知“ csv”工作队列
  4. 工作者处理上载的csv文件。

尽管完全有可能,但是仅将处理转移到客户端计算机并不能解决基本问题。

现在,客户端的事件循环被阻止,从而阻止用户与浏览器进行交互。 浏览器倾向于检测到此问题,并完全停止执行页面脚本。 您的用户一定会讨厌。

委派工作或分担工作量是不可能的。 使用第二个进程(例如第二个节点实例)在服务器端进行数字运算具有附加的好处,即允许操作系统使用第二个CPU内核。 理想情况下,您需要在服务器中拥有CPU内核的情况下运行尽可能多的Node实例,并平衡它们之间的工作量。 看看二极管模块 ,了解如何在节点中实现多进程通信。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM