No description
Find a file
Jimmy Lai 7208535786
perf: fix memory leaks in the edge runtime in dev (#57235)
This PR fixes a memory leak when using `next dev` where on HMR, we would always retain the memory associated with the old VM instance, leading to pretty egregious usage of RAM after only a few edits.

The leak itself comes from methods like `setTimeout` and `setInterval` capturing the context in which they were called and somehow never releasing, even if the timeout happened, when running in a Node.js `vm`. This is probably a Node.js bug.

The fix consists of taking ownership of all timeouts and clearing them ourselves manually at the end of each VM lifecycle.

Tested manually:
- hello world Next.js app with edge runtime
- triggered hmr 10 times
- memory usage
  - base: 400MB
  -  before: 800MB
  - after: 400MB
2023-10-23 17:51:06 +00:00
.cargo Update rust-toolchain to nightly-2023-10-06 (#56541) 2023-10-07 09:05:44 +00:00
.config Remove next-dev and its test suite and benchmarks (#55983) 2023-09-26 05:22:39 +02:00
.devcontainer re-enable next-dev-tests (#47087) 2023-03-14 16:05:19 +01:00
.github chore: Add condition to skip update-fonts workflow on forks (#57165) 2023-10-21 00:50:36 -07:00
.husky Replace pre-commit with husky (#38350) 2022-07-06 11:14:16 -05:00
.vscode Add next.config.js options to turbopack warning file (#56207) 2023-09-29 14:08:40 +02:00
bench chore: remove chalk in favor of picocolors (#55992) 2023-09-27 21:00:52 +00:00
contributing change those->some for clarity (#56688) 2023-10-12 16:14:08 +00:00
docs Remove the experimental serverActions flag (#57145) 2023-10-20 20:45:25 +00:00
errors chore(next/image)!: mark domains as deprecated in favor remotePatterns (#57062) 2023-10-19 20:24:48 +00:00
examples chore(next/image)!: mark domains as deprecated in favor remotePatterns (#57062) 2023-10-19 20:24:48 +00:00
packages perf: fix memory leaks in the edge runtime in dev (#57235) 2023-10-23 17:51:06 +00:00
scripts chore: revert back to moving files w/ fs-extra (#57030) 2023-10-19 13:29:19 +00:00
test Fix unmatched WebSocket upgrade requests being closed (#57245) 2023-10-23 17:23:34 +00:00
.alexignore Integrate next-* crates from Turbopack (#47019) 2023-03-13 14:33:17 +01:00
.alexrc docs: Add "special" to the Alex allowlist (#48021) 2023-04-06 16:32:06 +02:00
.eslintignore chore: replace issue triaing actions with nissuer (#55525) 2023-09-19 11:11:00 +00:00
.eslintrc.json Update eslint config (#57146) 2023-10-20 19:15:24 +00:00
.gitattributes chore: update gitattributes with linguist-vendored (#54683) 2023-08-28 21:50:19 +00:00
.gitignore Optimize webpack memory cache garbage collection (#54397) 2023-08-23 15:46:32 +02:00
.node-version Update .node-version (#56460) 2023-10-05 07:40:12 +00:00
.npmrc fix: npm publish provenance permissions (#48757) 2023-04-24 14:08:55 +00:00
.prettierignore Remove next-dev and its test suite and benchmarks (#55983) 2023-09-26 05:22:39 +02:00
.prettierignore_staged chore: replace issue triaing actions with nissuer (#55525) 2023-09-19 11:11:00 +00:00
.prettierrc.json Prettier trailingComma default value to es5 since 2.0 (#14391) 2020-06-22 13:25:24 +02:00
.rustfmt.toml build(cargo): move workspaces manifest to top level (#48198) 2023-04-19 18:38:36 +02:00
azure-pipelines.yml chore: lower Node.js version requirement (#56943) 2023-10-17 23:15:31 +02:00
Cargo.lock Update swc_core to v0.86.10 (#57121) 2023-10-23 05:01:31 +02:00
Cargo.toml Update swc_core to v0.86.10 (#57121) 2023-10-23 05:01:31 +02:00
CODE_OF_CONDUCT.md updated code of conduct to v2.1 (#34208) 2022-02-10 18:11:42 -06:00
contributing.md chore: improve repo templates (#46629) 2023-03-01 09:25:51 -08:00
jest.config.js chore: drop form-data (#57141) 2023-10-20 19:25:42 +00:00
jest.replay.config.js Add Replay integration for dev e2e tests (#40955) 2022-09-29 14:45:10 -07:00
lerna.json v13.5.7-canary.16 2023-10-23 03:07:00 +00:00
license.md Update license year (#44403) 2023-01-01 11:12:49 +01:00
lint-staged.config.js add cargo fmt to lint staged (#56430) 2023-10-04 17:46:44 +00:00
package.json chore: drop form-data (#57141) 2023-10-20 19:25:42 +00:00
plopfile.js Opt-in to dynamic rendering when reading searchParams (#46205) 2023-03-16 21:46:35 +01:00
pnpm-lock.yaml v13.5.7-canary.16 2023-10-23 03:07:00 +00:00
pnpm-workspace.yaml Remove next-dev and its test suite and benchmarks (#55983) 2023-09-26 05:22:39 +02:00
readme.md
release.js Fix labels for release sections 2021-11-21 13:11:54 +01:00
run-tests.js chore: reduce fs-extra usage in scripts/ (#56917) 2023-10-17 19:31:19 +00:00
rust-toolchain Update rust-toolchain to nightly-2023-10-06 (#56541) 2023-10-07 09:05:44 +00:00
socket.yaml chore(ci): add socket.yaml (#54446) 2023-08-23 18:12:51 +00:00
test-file.txt Add additional file serving tests (#12479) 2020-05-04 11:58:19 -05:00
tsconfig-tsec.json Integrate tsec into the linting process (#33746) 2022-02-24 16:59:18 -08:00
tsconfig.json chore: upgrade jest (#56909) 2023-10-19 17:38:24 +00:00
tsec-exemptions.json Move core files to src folder and move JS files to TypeScript (#44405) 2023-01-03 10:05:50 +01:00
turbo.json Implement granular rust caching (#54582) 2023-08-26 18:54:14 -07:00
UPGRADING.md (Fix)Broken upgrading.mdx link (#54234) 2023-08-18 17:10:38 +00:00
vercel.json Silence GH Comments for Preview URLs (#18766) 2020-11-03 21:59:47 +00:00

Next.js

Getting Started

Visit https://nextjs.org/learn to get started with Next.js.

Documentation

Visit https://nextjs.org/docs to view the full documentation.

Who is using Next.js?

Next.js is used by the world's leading companies. Check out the Next.js Showcase to learn more.

Community

The Next.js community can be found on GitHub Discussions, where you can ask questions, voice ideas, and share your projects.

To chat with other community members you can join the Next.js Discord.

Our Code of Conduct applies to all Next.js community channels.

Contributing

Please see our contributing.md.

Good First Issues

We have a list of good first issues that contain bugs that have a relatively limited scope. This is a great place to get started, gain experience, and get familiar with our contribution process.

Authors

Security

If you believe you have found a security vulnerability in Next.js, we encourage you to responsibly disclose this and not open a public issue. We will investigate all legitimate reports. Email security@vercel.com to disclose any security vulnerabilities.

https://vercel.com/security