Fix memory leaks (#1054)

This commit is contained in:
Jake Archibald
2021-06-15 10:45:53 +01:00
committed by GitHub
parent 5595525c8a
commit 828f9a5eeb
2 changed files with 23 additions and 11 deletions

View File

@@ -34,6 +34,8 @@ export default class TwoUp extends HTMLElement {
*/
private _everConnected = false;
private _resizeObserver?: ResizeObserver;
constructor() {
super();
this._handle.className = styles.twoUpHandle;
@@ -45,13 +47,6 @@ export default class TwoUp extends HTMLElement {
childList: true,
});
// Watch for element size changes.
if ('ResizeObserver' in window) {
new ResizeObserver(() => this._resetPosition()).observe(this);
} else {
window.addEventListener('resize', () => this._resetPosition());
}
// Watch for pointers on the handle.
const pointerTracker: PointerTracker = new PointerTracker(this._handle, {
start: (_, event) => {
@@ -68,8 +63,6 @@ export default class TwoUp extends HTMLElement {
);
},
});
window.addEventListener('keydown', (event) => this._onKeyDown(event));
}
connectedCallback() {
@@ -84,12 +77,28 @@ export default class TwoUp extends HTMLElement {
}</svg>
`}</div>`;
// Watch for element size changes.
if ('ResizeObserver' in window) {
this._resizeObserver = new ResizeObserver(() => this._resetPosition());
this._resizeObserver.observe(this);
} else {
window.addEventListener('resize', this._onResize);
}
window.addEventListener('keydown', this._onKeyDown);
if (!this._everConnected) {
this._resetPosition();
this._everConnected = true;
}
}
disconnectedCallback() {
window.removeEventListener('keydown', this._onKeyDown);
window.removeEventListener('resize', this._onResize);
if (this._resizeObserver) this._resizeObserver.disconnect();
}
attributeChangedCallback(name: string) {
if (name === orientationAttr) {
this._resetPosition();
@@ -97,7 +106,7 @@ export default class TwoUp extends HTMLElement {
}
// KeyDown event handler
private _onKeyDown(event: KeyboardEvent) {
private _onKeyDown = (event: KeyboardEvent) => {
const target = event.target;
if (target instanceof HTMLElement && target.closest('input')) return;
@@ -122,7 +131,9 @@ export default class TwoUp extends HTMLElement {
this._relativePosition = this._position / bounds[dimensionAxis];
this._setPosition();
}
}
};
private _onResize = () => this._resetPosition();
private _resetPosition() {
// Set the initial position of the handle.

View File

@@ -377,6 +377,7 @@ export default class Compress extends Component<Props, State> {
componentWillUnmount(): void {
updateDocumentTitle({ loading: false });
this.widthQuery.removeListener(this.onMobileWidthChange);
this.mainAbortController.abort();
for (const controller of this.sideAbortControllers) {
controller.abort();