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

[Bug]: Dramatic performance drop with ESM since v14.0.0 #8650

Closed
feesler opened this issue Jul 7, 2022 · 4 comments · Fixed by #8652
Closed

[Bug]: Dramatic performance drop with ESM since v14.0.0 #8650

feesler opened this issue Jul 7, 2022 · 4 comments · Fixed by #8652
Labels

Comments

@feesler
Copy link

feesler commented Jul 7, 2022

Bug description

Steps to reproduce the problem:

  1. Set package type as module, install puppeteer v13.7.0 dependency
  2. import puppeteer from 'puppeteer';
  3. Run some script and measure performance
  4. Update puppeteer to v14.0.0 and repeat step 3

For convenience, I created a https://github.com/feesler/puppeteer-perf package to test this issue.

git clone https://github.com/feesler/puppeteer-perf.git
cd puppeteer-perf
npm install
npm test
npm install puppeteer@14.0.0
npm test

Script will automatically download Chromium revision 982053 to discard possible difference in browser performance.

Temporary solution to fix performance for ESM packages:

- import puppeteer from 'puppeteer';
+ import puppeteer from 'puppeteer/lib/cjs/puppeteer/puppeteer.js';

Puppeteer version

14.0.0 - 15.3.1

Node.js version

16.15.1 - 18.2.0

npm version

8.1.4

What operating system are you seeing the problem on?

Windows

Relevant log output

Node: v16.15.1
Puppeteer: 13.7.0
Browser: HeadlessChrome/101.0.4950.0
Duration: 77.40569996833801

Node: v16.15.1
Puppeteer: 14.0.0
Browser: HeadlessChrome/101.0.4950.0
Duration: 730.2374999523163

Node: v16.15.1
Puppeteer: 15.3.1
Browser: HeadlessChrome/101.0.4950.0
Duration: 742.4602999687195

Node: v18.2.0
Puppeteer: 13.7.0
Browser: HeadlessChrome/101.0.4950.0
Duration: 72.06540012359619

Node: v18.2.0
Puppeteer: 14.0.0
Browser: HeadlessChrome/101.0.4950.0
Duration: 711.3672997951508

Node: v18.2.0
Puppeteer: 15.3.1
Browser: HeadlessChrome/101.0.4950.0
Duration: 770.1029999256134
@feesler feesler added the bug label Jul 7, 2022
@OrKoN
Copy link
Collaborator

OrKoN commented Jul 7, 2022

I am able to reproduce. It looks like dynamic imports are much worse performing with the ESM loader compared to the CJS loader. I suggest we cache the dynamic imports on our side.

@OrKoN
Copy link
Collaborator

OrKoN commented Jul 7, 2022

Caching seems to help and the numbers go back down for me: #8652 Could anyone confirm?

@feesler
Copy link
Author

feesler commented Jul 7, 2022

Checked patch on my environment. Still 30% slower than v13.7.0, but it way more better than last results.
Thanks!

Node: v18.2.0
Puppeteer: 15.3.1
Browser: HeadlessChrome/101.0.4950.0
Duration: 93.32049989700317

@feesler feesler closed this as completed Jul 7, 2022
@OrKoN
Copy link
Collaborator

OrKoN commented Jul 8, 2022

On my machine, it's almost identical with Node 18:

❯ npm test

> puppeteer-perf@1.0.0 test
> node index.js

Node: v18.4.0
Puppeteer: 13.7.0
Browser: HeadlessChrome/101.0.4950.0
Duration: 47.12399911880493

~/pptr-test/puppeteer-perf main*
❯ npm test

> puppeteer-perf@1.0.0 test
> node index.js

Node: v18.4.0
Puppeteer: 13.7.0
Browser: HeadlessChrome/101.0.4950.0
Duration: 45.374149322509766

~/pptr-test/puppeteer-perf main*
❯ npm test

> puppeteer-perf@1.0.0 test
> node index.js

Node: v18.4.0
Puppeteer: 15.3.2
Browser: HeadlessChrome/101.0.4950.0
Duration: 47.71191596984863

~/pptr-test/puppeteer-perf main* 21s
❯ npm test

> puppeteer-perf@1.0.0 test
> node index.js

Node: v18.4.0
Puppeteer: 15.3.2
Browser: HeadlessChrome/101.0.4950.0
Duration: 42.071983337402344

~/pptr-test/puppeteer-perf main*
❯ npm test

> puppeteer-perf@1.0.0 test
> node index.js

Node: v18.4.0
Puppeteer: 15.3.2
Browser: HeadlessChrome/101.0.4950.0
Duration: 49.50673818588257

feesler added a commit to feesler/JezveTest that referenced this issue Jul 8, 2022
@jrandolf jrandolf removed their assignment Feb 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants