我使用的是gcloud
nodejs模块。每当我进行更改时,nodeJS将重新加载(使用nodemon),并且必须加载所有依赖项。一切都很快,除了gcloud
。只加载那个模块需要相当长的时间(比如10-20秒)。
我所做的就是:
console.log('Loading gCloud Module');
var gcloud = require('gcloud');
console.log('Done.');
为什么?我正在运行NodeJs 4.1.1。
我尝试了以下代码:
> node
console.time(); require('gcloud'); console.timeEnd();
我第一次跑的时候,我跑了将近10秒。之后的每一次,我都得到了大约900毫秒-2.5秒。我已经尝试了不同的gcloud版本,以及Node版本,并收到了微小的差异。
我开始深入研究哪个特定的依赖耗费了最多的时间。我发现了各种引线:google-auto-auth
大约需要375ms。但实际上,这是一种依赖;google-auth-library-nodejs
占用了370ms的时间。所以我深入研究了一下,发现它的依赖gtoken
大约需要366ms。的依赖项之一node-forge
需要120ms,另一个占用了其余的大部分时间。
基本上,因为gcloud有如此多的依赖,它必须解决许多同步require
s,这意味着遍历文件系统并一直阻塞。如果没有模块化,对于这样一个大小和范围的库,我不确定能做些什么来对启动时间产生巨大的影响。
运行npm dedupe
可能会有一点不同。
如果你持续看到10-20秒,那就很有趣了。您能分享更多关于运行脚本的系统的信息吗?你可以尝试升级到最新的gcloud(0.23)吗?