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