2017-09-06 100 views
1

我一直在使用shelljsshelljs性能很慢

在我的超級快速的系統我執行此過:

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') 
}) 

它給下面的執行時間:

殼mktemp的-d: 208.126ms

exec stdout /tmp/tmp.w22tyS5Uyu

child exec mktemp -d:48.812ms

爲什麼shelljs會慢4倍?有什麼想法嗎?

+1

你看過shelljs代碼,看看它是如何工作的,它是做什麼的? – jfriend00

回答

1

,看一下shelljs是如何實現的: enter image description here

它完全依賴於node.js的FS庫。這個庫是跨平臺的,用C++編寫,但不像C語言那麼高性能。更一般地說,你不能在JS中獲得C中的perfs ...

另一件事,抽象層: 你使用的是exec(Command),其中Command是C定製的(Linux C在這裏我認爲)。機器創建一個線程並在其中執行一個命令。 當使用shell.js時,有許多機制可以確保交叉平臺的形式,並將命令的抽象保留爲函數並將結果保留爲變量。請參閱shell.js中的exec代碼: https://github.com/shelljs/shelljs/blob/master/src/exec.js 它並不真正與您的代碼行完全相同。

希望有幫助!