Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何测量Nodejs中的事件循环阻塞?_Node.js_Performance_Asynchronous_Nonblocking - Fatal编程技术网

Node.js 如何测量Nodejs中的事件循环阻塞?

Node.js 如何测量Nodejs中的事件循环阻塞?,node.js,performance,asynchronous,nonblocking,Node.js,Performance,Asynchronous,Nonblocking,我无法获得真正的事件循环阻塞时间。我已经在Google answers()中搜索过了,但它们对我没有帮助。我得到了不同的结果 我已经创建了Node/Express应用程序。并尝试使用不同的工具检测事件循环阻塞。我用了hrtime,pm2 1测试: server.js require('./routes')(app, passport, mongoData) routes/index.js router .get('/articles/:articleId(\\d+)', (req, res

我无法获得真正的事件循环阻塞时间。我已经在Google answers()中搜索过了,但它们对我没有帮助。我得到了不同的结果

我已经创建了Node/Express应用程序。并尝试使用不同的工具检测事件循环阻塞。我用了hrtime,pm2

1测试:

server.js

require('./routes')(app, passport, mongoData)
routes/index.js

router
  .get('/articles/:articleId(\\d+)', (req, res, next) => { 
      const blockedAt = require('blocked-at')
      blockedAt((time, stack) => {
         console.log(`Blocked for ${time}ms, operation started here:`, stack)
            },  {threshold:12})

      // my blocking script
      for (let i = 0; i <= 1000000000; i++) {
          let z = 10000 / Math.random()         
      }

      let ArticleController = require(path + 'app/controllers/ArticleController')
      let articleController = new ArticleController()
      articleController.index(req, res, next)
    })
我得到了1,233毫秒。我得到了很大的时间,但我感到困惑-因为所有的操作都在异步模式下工作,所以事件循环没有阻塞

如何测量事件循环块


我期望输出:“routes/index.js:12中的事件循环阻塞5000ms”,但实际输出没有捕获我的阻塞脚本。

阻塞事件循环的时间是您按顺序处理的时间。对于您的示例,它将是该函数的主体。因此,您可以对其计时并将其添加到变量中

let totalBlocked = 0;

router
  .get('/articles/:articleId(\\d+)', (req, res, next) => { 
      const start = new Date().getTime();

      // my blocking script
      for (let i = 0; i <= 1000000000; i++) {
          let z = 10000 / Math.random() ;        
      }

      let ArticleController = require(path + 'app/controllers/ArticleController');
      let articleController = new ArticleController();
      articleController.index(req, res, next);

      const total = new Date().getTime() - start;
      totalBlocked += total;
      console.log(`Blocked for ${total}. Total blocked time is ${totalBlocked}`);
    });

我被封锁了621.9093132019043。总阻塞时间为621.9093132019043。这是个糟糕的表演,不是吗?好的性能大约是50毫秒,不是吗?不太好。但是你确实有一个循环运行了10亿次!!是的,我找到了,现在:封锁了3.3080978393554688。
let totalBlocked = 0;

router
  .get('/articles/:articleId(\\d+)', (req, res, next) => { 
      const start = new Date().getTime();

      // my blocking script
      for (let i = 0; i <= 1000000000; i++) {
          let z = 10000 / Math.random() ;        
      }

      let ArticleController = require(path + 'app/controllers/ArticleController');
      let articleController = new ArticleController();
      articleController.index(req, res, next);

      const total = new Date().getTime() - start;
      totalBlocked += total;
      console.log(`Blocked for ${total}. Total blocked time is ${totalBlocked}`);
    });
const {performance } = require('perf_hooks');

let totalBlocked = 0;

router
  .get('/articles/:articleId(\\d+)', (req, res, next) => { 
      const start = performance.now();
      // Do stuff
      const total = performance.now() - start;
      totalBlocked += total;
      console.log(`Blocked for ${total}. Total blocked time is ${totalBlocked}`);
   });