1

我正在使用gcloudnodejs 模块。每当我进行更改时,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。

4

1 回答 1

0

我用以下代码尝试了这个:

> node
console.time(); require('gcloud'); console.timeEnd();

我第一次运行它时,我得到了将近 10 秒。每次之后,我得到大约 900ms-2.5s。我尝试了各种 gcloud 版本以及 Node 版本,并收到了细微的差异。

我开始深入研究哪些特定依赖项花费的时间最多。我发现了各种线索:google-auto-auth大约需要 375 毫秒。但实际上,这是一个依赖;google-auth-library-nodejs这占用了 370 毫秒的时间。所以我深入研究了它,发现它的依赖gtoken大约需要 366 毫秒。的一个依赖项node-forge, 需要 120 毫秒,而另一个依赖项则花费了其余的大部分时间。

基本上,因为 gcloud 有这么多的依赖,它必须解析很多 sync require,这意味着遍历文件系统并一直阻塞。如果没有模块化,对于它的大小和范围的库,我不确定可以做什么会对启动时间产生巨大的影响。

跑步npm dedupe可能会产生很小的影响。

如果你一直看到 10-20 秒,那很有趣。你能分享更多关于脚本运行的系统吗?您可以尝试升级到最新的 gcloud (0.23) 吗?

于 2015-10-03T01:04:08.737 回答