【问题标题】:gcloud module loading is slowgcloud 模块加载很慢
【发布时间】:2015-10-01 22:25:56
【问题描述】:

我正在使用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。

【问题讨论】:

    标签: node.js performance gcloud-node


    【解决方案1】:

    我尝试了以下代码:

    > 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 有这么多依赖,它必须解决许多同步requires,这意味着遍历文件系统并一直阻塞。如果没有模块化,对于它的大小和范围的库,我不确定可以做些什么来对启动时间产生巨大的影响。

    运行npm dedupe 可能会产生一点影响。

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

    【讨论】:

    • 感谢斯蒂芬的回答。我在通过 vagrant 创建的 VM 中运行 Ubuntu 14.04。我的主机是 Windows 10。我的 nodejs 应用程序文件夹位于与 Ubuntu VM 共享的 Windows 中。我会检查在非共享文件夹上是否需要这么多时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 2015-05-15
    • 1970-01-01
    相关资源
    最近更新 更多