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

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

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

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

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

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

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

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

最佳答案

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

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

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

关于javascript - 将node.js服务器javascript处理移至客户端,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9141663/

10-16 19:27