如何将更快的语言与Express.js后端集成?

How can I integrate a faster language with an Express.js backend?

本文关键字:js Express 后端 集成 语言      更新时间:2023-09-26

一些背景:我目前正在做一个在Azure服务器上运行的网站。它本质上是一个奇怪的MEAN堆栈,因为MongoDB部分被DocumentDB取代,Azure的原生NoSql数据库。

网站的输出需要大量的常量运算,随着网站的增长,JavaScript被证明太慢了。

  1. 如果我使用node-gyp c++ 编译成Javascript,代码是否最终作为Javascript运行,并减少使用c++的速度优势?

  2. Java是一个可行的替代计算主力吗?这是在计算速度,内存使用和必须与Javascript通信方面。

一些附加信息:

  • 该网站不断地从chrome插件中提取信息,并将其输入数字计算器。
  • 被计算的值包括浮点数、整数、字符串和布尔值,这些值来自数据库和运行值,以及写入到DB。

注:请不要建议用c#代替Java。我知道它已经很好地集成到Azure中,但我不用它,现在也没有时间去学习。

编辑:问一个更好的问题。

NodeJS使用事件驱动的单进程/线程模型。它不适合用于CPU密度计算。当你有一个数字运算器在一个事件请求中花费大量cpu时间时,Node的事件循环将被阻塞。

所以如果你需要做CPU密度计算,我认为你可以使用Node API的child_process。派生一个子进程作为worker来完成它。您可以参考https://nodejs.org/api/child_process.html.

有一些简单的库可以让NodeJS做得比API "child_process"更好。

  1. 节点-计算-集群:跨多个进程分配计算https://github.com/lloyd/node-compute-cluster
  2. 神经元:最简单的事件驱动作业管理器,FIFO队列和"基于任务的缓存"https://github.com/flatiron/neuron

如果你只需要一个后端作业,我建议使用WebJob & &;Azure上的ServiceBus。请参考https://azure.microsoft.com/en-us/documentation/articles/web-sites-create-web-jobs/和https://azure.microsoft.com/en-us/documentation/articles/service-bus-nodejs-how-to-use-queues/。

当然,你可以使用Java(Azure上的Java WebJob)作为计算工具,并使用Azure上的ServiceBus与NodeJS通信。

如果你需要大量的数字计算,我认为带有NumPy的Python可能是最好的语言选择。

根据我的经验,如果你需要一些实时性能要求,你需要添加更多实例来扩展节点服务。

致以最亲切的问候。