rsnext/packages/next
Tyler Deitz ec430ea77d
Fix memory leak in useIntersection (#20407)
This pull request adds an `elements.delete` operation to the `useIntersection`'s cleanup function: `unobserve`.

Without this delete operation, next.js holds onto an unreachable reference of every observed element indefinitely (automatically every Link and Image is observed, so that means every rendered Link and Image element adds to the leak). I found this memory leak when building out an infinite feed in next.js with thousands of Link elements.

The final code block of the `unobserve` function body:

```tsx
  // Destroy observer when there's nothing left to watch:
  if (elements.size === 0) {
    observer.disconnect()
    observers.delete(id)
  }
```

Is effectively unreachable without this delete operation, as the `elements` map will never decrease in size as it is currently. This means that there will always be at least one IntersectionObserver instance in memory if useIntersection has been used once, regardless of if there are currently any components still using the hook.
2020-12-30 20:04:57 +00:00
..
bin Update experimental profiling (#20357) 2020-12-21 16:02:41 +00:00
build Ensure domain locales are redirected client-side (#20562) 2020-12-30 06:44:07 +00:00
bundles/babel ncc 0.25.0 upgrade and fixes (#18873) 2020-11-06 02:33:14 +00:00
cli Update experimental profiling (#20357) 2020-12-21 16:02:41 +00:00
client Fix memory leak in useIntersection (#20407) 2020-12-30 20:04:57 +00:00
compiled Add profiling to webpack loaders (#20392) 2020-12-29 21:21:35 +00:00
export Ensure domain locales are redirected client-side (#20562) 2020-12-30 06:44:07 +00:00
lib fix(build): require test files be full name or extension (#20605) 2020-12-30 15:49:37 +00:00
next-server fix(router): consistent scroll behavior for Link/Router#push (#20606) 2020-12-30 16:10:59 +00:00
pages Remove unnecessary unfetch polyfill for dev (#20589) 2020-12-29 21:01:42 +00:00
server Remove import type syntax from core files (#20379) 2020-12-28 22:04:51 +00:00
telemetry ncc 0.25.0 upgrade and fixes (#18873) 2020-11-06 02:33:14 +00:00
types Remove unnecessary unfetch polyfill for dev (#20589) 2020-12-29 21:01:42 +00:00
amp.d.ts Remove re-exports of default when they don't exist (#9450) 2019-11-18 20:11:59 -06:00
amp.js Move next-server back into next package (#8613) 2019-09-04 10:00:54 -04:00
app.d.ts Move syntax formatting to prettier (#7454) 2019-05-29 13:57:26 +02:00
app.js
babel.d.ts Remove re-exports of default when they don't exist (#9450) 2019-11-18 20:11:59 -06:00
babel.js
client.d.ts Move syntax formatting to prettier (#7454) 2019-05-29 13:57:26 +02:00
client.js
config.d.ts Move next-server back into next package (#8613) 2019-09-04 10:00:54 -04:00
config.js Move next-server back into next package (#8613) 2019-09-04 10:00:54 -04:00
constants.d.ts Remove default export from constants.d.ts (#8979) 2019-10-07 14:30:07 +02:00
constants.js Move next-server back into next package (#8613) 2019-09-04 10:00:54 -04:00
data.d.ts Remove re-exports of default when they don't exist (#9450) 2019-11-18 20:11:59 -06:00
data.js amp-bind data injection (#6840) 2019-04-02 16:09:34 +02:00
document.d.ts Move syntax formatting to prettier (#7454) 2019-05-29 13:57:26 +02:00
document.js
dynamic.d.ts Move next-server back into next package (#8613) 2019-09-04 10:00:54 -04:00
dynamic.js Move next-server back into next package (#8613) 2019-09-04 10:00:54 -04:00
error.d.ts Move syntax formatting to prettier (#7454) 2019-05-29 13:57:26 +02:00
error.js
experimental-script.d.ts Script loader component (#18281) 2020-12-01 19:10:16 +01:00
experimental-script.js Script loader component (#18281) 2020-12-01 19:10:16 +01:00
head.d.ts Move next-server back into next package (#8613) 2019-09-04 10:00:54 -04:00
head.js Move next-server back into next package (#8613) 2019-09-04 10:00:54 -04:00
image.d.ts Image component foundation (#17343) 2020-10-14 11:57:10 +02:00
image.js Image component foundation (#17343) 2020-10-14 11:57:10 +02:00
license.md Update year on license files 2020-04-21 12:24:08 +02:00
link.d.ts Move syntax formatting to prettier (#7454) 2019-05-29 13:57:26 +02:00
link.js
package.json v10.0.5-canary.4 2020-12-30 10:26:25 -06:00
README.md Update logo for dark mode (#20047) 2020-12-09 23:57:07 +00:00
router.d.ts Move syntax formatting to prettier (#7454) 2019-05-29 13:57:26 +02:00
router.js
taskfile-babel.js ncc 0.25.0 upgrade and fixes (#18873) 2020-11-06 02:33:14 +00:00
taskfile-ncc.js Update terser-webpack-plugin to support webpack 4 (#20089) 2020-12-12 20:28:53 +00:00
taskfile.js Add profiling to webpack loaders (#20392) 2020-12-29 21:21:35 +00:00
tsconfig.json Move next-server back into next package (#8613) 2019-09-04 10:00:54 -04: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.

Authors