-
Notifications
You must be signed in to change notification settings - Fork 27.4k
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
Use Sharp if available for Image Optimization #27346
Conversation
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In order to test this, you could add another workflow to GH Actions with the following:
yarn add sharp && yarn testheadless test/integration/image-optimizer
And maybe add one more test to ensure that no warning is printed in this case.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
Co-authored-by: Steven <[email protected]>
This comment has been minimized.
This comment has been minimized.
Co-authored-by: Steven <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚀
Stats from current PRDefault Build (Decrease detected ✓)General Overall increase
|
vercel/next.js canary | atcastle/next.js optional-sharp | Change | |
---|---|---|---|
buildDuration | 16.4s | 16.6s | |
buildDurationCached | 3.7s | 3.7s | |
nodeModulesSize | 49.5 MB | 49.5 MB |
Page Load Tests Overall decrease ⚠️
vercel/next.js canary | atcastle/next.js optional-sharp | Change | |
---|---|---|---|
/ failed reqs | 0 | 0 | ✓ |
/ total time (seconds) | 2.785 | 2.724 | -0.06 |
/ avg req/sec | 897.7 | 917.61 | +19.91 |
/error-in-render failed reqs | 0 | 0 | ✓ |
/error-in-render total time (seconds) | 1.585 | 1.618 | |
/error-in-render avg req/sec | 1576.9 | 1545.06 |
Client Bundles (main, webpack, commons)
vercel/next.js canary | atcastle/next.js optional-sharp | Change | |
---|---|---|---|
359.HASH.js gzip | 2.96 kB | 2.96 kB | ✓ |
745.HASH.js gzip | 180 B | 180 B | ✓ |
framework-HASH.js gzip | 42.2 kB | 42.2 kB | ✓ |
main-HASH.js gzip | 21 kB | 21 kB | ✓ |
webpack-HASH.js gzip | 1.53 kB | 1.53 kB | ✓ |
Overall change | 67.9 kB | 67.9 kB | ✓ |
Legacy Client Bundles (polyfills)
vercel/next.js canary | atcastle/next.js optional-sharp | Change | |
---|---|---|---|
polyfills-HASH.js gzip | 31.1 kB | 31.1 kB | ✓ |
Overall change | 31.1 kB | 31.1 kB | ✓ |
Client Pages
vercel/next.js canary | atcastle/next.js optional-sharp | Change | |
---|---|---|---|
_app-HASH.js gzip | 803 B | 803 B | ✓ |
_error-HASH.js gzip | 3.06 kB | 3.06 kB | ✓ |
amp-HASH.js gzip | 554 B | 554 B | ✓ |
css-HASH.js gzip | 329 B | 329 B | ✓ |
dynamic-HASH.js gzip | 2.52 kB | 2.52 kB | ✓ |
head-HASH.js gzip | 2.28 kB | 2.28 kB | ✓ |
hooks-HASH.js gzip | 903 B | 903 B | ✓ |
image-HASH.js gzip | 5.61 kB | 5.61 kB | ✓ |
index-HASH.js gzip | 261 B | 261 B | ✓ |
link-HASH.js gzip | 1.66 kB | 1.66 kB | ✓ |
routerDirect..HASH.js gzip | 319 B | 319 B | ✓ |
script-HASH.js gzip | 387 B | 387 B | ✓ |
withRouter-HASH.js gzip | 320 B | 320 B | ✓ |
bb14e60e810b..30f.css gzip | 125 B | 125 B | ✓ |
Overall change | 19.1 kB | 19.1 kB | ✓ |
Client Build Manifests
vercel/next.js canary | atcastle/next.js optional-sharp | Change | |
---|---|---|---|
_buildManifest.js gzip | 490 B | 490 B | ✓ |
Overall change | 490 B | 490 B | ✓ |
Rendered Page Sizes
vercel/next.js canary | atcastle/next.js optional-sharp | Change | |
---|---|---|---|
index.html gzip | 530 B | 530 B | ✓ |
link.html gzip | 543 B | 543 B | ✓ |
withRouter.html gzip | 525 B | 525 B | ✓ |
Overall change | 1.6 kB | 1.6 kB | ✓ |
Webpack 4 Mode (Increase detected ⚠️ )
General Overall increase ⚠️
vercel/next.js canary | atcastle/next.js optional-sharp | Change | |
---|---|---|---|
buildDuration | 12.7s | 12.9s | |
buildDurationCached | 5.2s | 4.9s | -270ms |
nodeModulesSize | 49.5 MB | 49.5 MB |
Page Load Tests Overall increase ✓
vercel/next.js canary | atcastle/next.js optional-sharp | Change | |
---|---|---|---|
/ failed reqs | 0 | 0 | ✓ |
/ total time (seconds) | 2.717 | 2.792 | |
/ avg req/sec | 920.26 | 895.32 | |
/error-in-render failed reqs | 0 | 0 | ✓ |
/error-in-render total time (seconds) | 1.685 | 1.563 | -0.12 |
/error-in-render avg req/sec | 1483.36 | 1599.19 | +115.83 |
Client Bundles (main, webpack, commons)
vercel/next.js canary | atcastle/next.js optional-sharp | Change | |
---|---|---|---|
17.HASH.js gzip | 2.98 kB | 2.98 kB | ✓ |
18.HASH.js gzip | 185 B | 185 B | ✓ |
677f882d2ed8..HASH.js gzip | 13.7 kB | 13.7 kB | ✓ |
framework.HASH.js gzip | 41.9 kB | 41.9 kB | ✓ |
main-HASH.js gzip | 8.4 kB | 8.4 kB | ✓ |
webpack-HASH.js gzip | 1.22 kB | 1.22 kB | ✓ |
Overall change | 68.5 kB | 68.5 kB | ✓ |
Legacy Client Bundles (polyfills)
vercel/next.js canary | atcastle/next.js optional-sharp | Change | |
---|---|---|---|
polyfills-HASH.js gzip | 31.3 kB | 31.3 kB | ✓ |
Overall change | 31.3 kB | 31.3 kB | ✓ |
Client Pages
vercel/next.js canary | atcastle/next.js optional-sharp | Change | |
---|---|---|---|
_app-HASH.js gzip | 791 B | 791 B | ✓ |
_error-HASH.js gzip | 3.76 kB | 3.76 kB | ✓ |
amp-HASH.js gzip | 552 B | 552 B | ✓ |
css-HASH.js gzip | 333 B | 333 B | ✓ |
dynamic-HASH.js gzip | 2.71 kB | 2.71 kB | ✓ |
head-HASH.js gzip | 2.97 kB | 2.97 kB | ✓ |
hooks-HASH.js gzip | 911 B | 911 B | ✓ |
index-HASH.js gzip | 231 B | 231 B | ✓ |
link-HASH.js gzip | 1.64 kB | 1.64 kB | ✓ |
routerDirect..HASH.js gzip | 298 B | 298 B | ✓ |
script-HASH.js gzip | 3.02 kB | 3.02 kB | ✓ |
withRouter-HASH.js gzip | 294 B | 294 B | ✓ |
e025d2764813..52f.css gzip | 125 B | 125 B | ✓ |
Overall change | 17.6 kB | 17.6 kB | ✓ |
Client Build Manifests
vercel/next.js canary | atcastle/next.js optional-sharp | Change | |
---|---|---|---|
_buildManifest.js gzip | 500 B | 500 B | ✓ |
Overall change | 500 B | 500 B | ✓ |
Rendered Page Sizes
vercel/next.js canary | atcastle/next.js optional-sharp | Change | |
---|---|---|---|
index.html gzip | 577 B | 577 B | ✓ |
link.html gzip | 588 B | 588 B | ✓ |
withRouter.html gzip | 569 B | 569 B | ✓ |
Overall change | 1.73 kB | 1.73 kB | ✓ |
Fixes typo mentioned in #27346 (comment)
amazing work, thanks a lot :) |
* Use sharp for image transformations when available * Refactor resizeImage and add sharp warning * only show sharp warning once per instance * Modify sharp error message * Add documentation for optional sharp dependency * Update docs/basic-features/image-optimization.md Co-authored-by: Steven <[email protected]> * Import types for sharp * Update lockfile * Add testing against sharp * use fs-extra for node 12 * Rename test sharp path variable * Apply suggestions from code review Co-authored-by: Steven <[email protected]> * update squoosh specific test * Apply suggestions from code review Co-authored-by: Steven <[email protected]> * update tests * Apply suggestions from code review Co-authored-by: Steven <[email protected]> Co-authored-by: Steven <[email protected]> Co-authored-by: JJ Kasper <[email protected]>
Fixes typo mentioned in vercel#27346 (comment)
This PR adds support for using
sharp
for image transformations, but does not add is as a dependency to Next.js. The feature is described more thoroughly in #27073.