首页 > 网站 > 建站经验 > 正文

充分发挥Nod!e.js程序性能的一些方法介绍

2019-11-02 15:47:01
字体:
来源:转载
供稿:网友

   这篇文章主要介绍了充分发挥Node.js程序性能的一些方法介绍,Node.js是把JavaScript用于服务器端的框架,需要的朋友可以参考下

  一个Node.JS 的进程只会运行在单个的物理核心上,就是因为这一点,在开发可扩展的服务器的时候就需要格外的注意。

  因为有一系列稳定的API,加上原生扩展的开发来管理进程,所以有很多不同的方法来设计一个可以并行的Node.JS运用。在这篇博文里,我们就来比较下这些可能的架构。

  这篇文章同时也介绍compute-cluster 模块:一个小型的Node.JS库,可以用来很方便的管理进程,从来二线分布式计算。

  遇到的问题

  我们在Mozilla Persona的项目中需要可以处理大量不同特征的请求,所以我们尝试用使用Node.JS。

  为了不影响用户体验,我们设计的‘Interactive' 请求只需要轻量级的计算消耗,但是提供更快地反映时间使得UI没有卡壳的感觉。相比之下,‘Batch'操作大概需要半秒的处理时间,而且有可能由于其他的原因,会有更长的延迟。

  为了更好的设计,我们找了很多符合我们当前需求的方法去解决。

  考虑到扩展性和成本,我们列出以下关键需求:

  效率:能有效的使用所有空闲的处理器

  响应:我们的“应用”能实时快速的响应

  优雅:当请求量过多到不能处理的时候,我们处理我们能处理的。不能处理的要清晰的把错误反馈

  简单:我们的解决方案使用起来必须简单方便

  通过以上几点我们可以清楚、有目标的去筛选

  方案一:直接在主线程中处理.

  当主线程直接处理数据的时候,结果很不好:

  你不能充分利用多核CPU的优势,在交互式的请求/响应中,必须等待当前请求(或响应)处理完毕,毫无优雅可言。

  这个方案唯一的优点是:够简单

  ?

  1

  2

  3

  4function myRequestHandler(request, response) [

  // Let's bring everything to a grinding halt for half a second.

  var results = doComputationWorkSync(request.somesuch);

  }

  在 Node.JS 程序中,希望同时处理多个请求,又想同步进行处理,那你准备弄个焦头烂额吧。

  方法 2: 是否使用异步处理.

  如果在后台使用异步的方法来执行是否一定会有很大的性能改善呢?

  答案是不一定.它取决于后台运行是否有意义

  例如下面这种情况:如果在主线程上使用javascript或者本地代码进行计算时,性能并不比同步处理更好时,就不一定需要在后台用异步方法去处理

  请阅读以下代码

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  14

  15

  16function doComputationWork(input, callback) {

  // Because the internal implementation of this asynchronous

  // function is itself synchronously run on the main thread,

  // you still starve the entire process.

  var output = doComputationWorkSync(input);

  process.nextTick(function() {

  callback(null, output);

  });

  }

  function myRequestHandler(request, response) [

  // Even though this *looks* better, we're still bringing everything

  // to a grinding halt.

  doComputationWork(request.somesuch, function(err, results) {

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表