Node.js shelljs的性能很慢

Node.js shelljs的性能很慢,node.js,shelljs,Node.js,Shelljs,我一直在使用shelljs 在我的超高速系统上,我执行以下操作: var shell = require('shelljs') const exec = require('child_process').exec console.time('shell mktemp -d') shell.exec('mktemp -d', {silent: true}) console.timeEnd('shell mktemp -d') console.time('child exec mktemp -d

我一直在使用shelljs

在我的超高速系统上,我执行以下操作:

var shell = require('shelljs')
const exec = require('child_process').exec

console.time('shell mktemp -d')
shell.exec('mktemp -d', {silent: true})
console.timeEnd('shell mktemp -d')

console.time('child exec mktemp -d')
exec('mktemp', ['-d'], function(error, stdout, stderr) {
  if (error) {
    console.error('stderr', stderr)
    throw error
  }
  console.log('exec stdout', stdout)
  console.timeEnd('child exec mktemp -d')
})
它给出了以下执行时间:

外壳温度-d:208.126ms

exec stdout/tmp/tmp.w22tyS5Uyu

子执行器mktemp-d:48.812ms


为什么shelljs要慢4倍?有什么想法吗?

看看shelljs是如何实现的:

它完全依赖于node.js fs库。这个库是跨平台的,用C++编写,但不如C语言的性能。更一般地说,你不能在JS中有你在C

另一件事,抽象层: 我认为,您使用的是execCommand,这里的Command是C定制的Linux C。机器创建线程并在其中执行命令。 在使用shell.js时,有许多机制可以确保跨平台,将命令抽象为函数,并将结果作为变量。参见shell.js中exec的代码: 它实际上并不是在做与您的代码行相同的事情


希望有帮助

看看shelljs是如何实现的:

它完全依赖于node.js fs库。这个库是跨平台的,用C++编写,但不如C语言的性能。更一般地说,你不能在JS中有你在C

另一件事,抽象层: 我认为,您使用的是execCommand,这里的Command是C定制的Linux C。机器创建线程并在其中执行命令。 在使用shell.js时,有许多机制可以确保跨平台,将命令抽象为函数,并将结果作为变量。参见shell.js中exec的代码: 它实际上并不是在做与您的代码行相同的事情


希望有帮助

您的代码示例将async child_process.exec与sync shell.exec进行了比较,这不完全是一个公平的比较。我想您会发现shell.exec…,{async:true}的性能要好一点:这是因为sync shell.exec做了额外的工作来提供实时stdio,同时仍然捕获stdout/stderr/return代码作为其返回值的一部分;async shell.exec可以免费提供相同的功能


即使有{silent:true},额外的工作仍然是必要的。shell.exec构建在child_process.execSync之上,它只返回标准输出。为了返回返回代码和stderr,我们需要执行同样的额外工作。

您的代码示例将async child_process.exec与sync shell.exec进行了比较,这不完全是一个公平的比较。我想您会发现shell.exec…,{async:true}的性能要好一点:这是因为sync shell.exec做了额外的工作来提供实时stdio,同时仍然捕获stdout/stderr/return代码作为其返回值的一部分;async shell.exec可以免费提供相同的功能


即使有{silent:true},额外的工作仍然是必要的。shell.exec构建在child_process.execSync之上,它只返回标准输出。为了返回返回代码和stderr,我们需要执行同样的额外工作。

您是否查看了shelljs代码以了解其工作原理和功能?您是否查看了shelljs代码以了解其工作原理和功能?