Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

require('google-cloud') takes 12 seconds to execute #1605

Closed
martincad opened this issue Sep 20, 2016 · 13 comments
Closed

require('google-cloud') takes 12 seconds to execute #1605

martincad opened this issue Sep 20, 2016 · 13 comments
Assignees
Labels

Comments

@martincad
Copy link

martincad commented Sep 20, 2016

The require for the google-cloud package takes a lot to execute, about 12 seconds.

Environment details

  • OS: Ubuntu 14.04 / OSX 10.11.6
  • Node.js version: v4.2.3 / v4.2.3
  • npm version: 2.14.7 / 2.14.7
  • google-cloud-node version: 0.40.0

Steps to reproduce

  1. mkdir tmp
  2. cd tmp
  3. npm init -y
  4. npm install --save google-cloud
  5. npm dedupe
  6. time node -e "require('google-cloud')"
real 0m10.932s
user 0m8.482s
sys 0m1.036s
@stephenplusplus
Copy link
Contributor

Ouch. We will look into that.

@callmehiphop
Copy link
Contributor

callmehiphop commented Sep 20, 2016

This actually looks to be related to another issue (#1590) we're looking into. Have you thought about upgrading to npm3? Testing locally cut it down from 12 seconds to about 1 for me.

@martincad
Copy link
Author

@callmehiphop we are using gcloud package (the old one) on a Production environment and were planning to upgrade to google-cloud lib, but we are using Node Argon, and don't think we can migrate until Node 6 is flagged as LTS.

Do you think is there any work-around for node 4 and npm 2 to avoid this huge load time ?

@stephenplusplus
Copy link
Contributor

Possibly running 'npm dedupe' after installing dependencies, and before starting your program. You can also upgrade npm to 3 'npm install -g npm' without affecting the Node version.

@martincad
Copy link
Author

@s3ththompson The issue can be reproduce by just installing google-cloud package on an empty directory, so there is nothing to dedupe. (Just in case I tested it, but is still taking a lot).

@stephenplusplus
Copy link
Contributor

dedupe should flatten all of our dependencies between our modularized google-cloud-* packages into one common place, which should make the 'require' times quicker, since they're not scattered all over the disk. So after installing, you ran 'npm dedupe', then ran your program, and still experienced 12 second startup times?

@martincad
Copy link
Author

Let me share the steps with you, just in case I'm doing something wrong:

  1. mkdir tmp
  2. cd tmp
  3. npm install google-cloud
  4. npm dedupe
  5. time node -e "require('google-cloud')"

real 0m10.932s
user 0m8.482s
sys 0m1.036s

I have reproduced this on Mac and Ubuntu (14.04), weird why nobody reported this

@stephenplusplus
Copy link
Contributor

Do you end up with a node_modules directory inside of tmp? Maybe try 'npm init -y && npm install --save google-cloud'. Not sure if dedupe will work without a package.json. Is there any sign the dedupe command is working?

@martincad
Copy link
Author

@stephenplusplus You are right, npm dedupe was not doing anything without a package.json. The bad thing if after adding the package and run dedupe ( and seeing a lot of dedupe output which was not there before) the bug still persists ( at least on Mac ).

Will try the same thing on Ubuntu trusty later and will let you know.

Thanks

@stephenplusplus
Copy link
Contributor

I believe this is a symptom of having our sub-modules (i.e. @google-cloud/storage) depend on different versions of @google-cloud/common.

The common package has a dependency on grpc, which is a massive one. Today, we will release all of our sub-modules and a new google-cloud, which will all have a dependency on the same version of grpc. That should mean after running dedupe, the require times should be more in line with what you'd expect.

I'll update here once the new release is out.

@stephenplusplus
Copy link
Contributor

After the release tonight of v0.41.0, the times went down dramatically for me:

node -e "require('google-cloud')"
2.36s user 0.27s system 56% cpu 4.692 total

Can you let me know if you're seeing the same improvement if you repeat the steps from the opening post?

@stephenplusplus
Copy link
Contributor

We're definitely much better now with v0.41.2, a release we just put out which uses shrinkwrap to force deduplication:

$ time node -e "require('google-cloud')"
0.93s user 0.11s system 101% cpu 1.025 total

@martincad
Copy link
Author

@s3ththompson worked like a charm. Thanks a lot:

time node -e "require('google-cloud')"

real 0m0.831s
user 0m0.638s
sys 0m0.097s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants