Skip to content

Commit bc942ef

Browse files
authored
Merge pull request #2046 from VisActor/fix/event_release
Fix/event release
2 parents c57a50c + 55b8270 commit bc942ef

5 files changed

Lines changed: 32 additions & 4 deletions

File tree

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"changes": [
3+
{
4+
"packageName": "@visactor/vrender-animate",
5+
"comment": "fix: fix memory leak by properly removing listener",
6+
"type": "none"
7+
}
8+
],
9+
"packageName": "@visactor/vrender-animate"
10+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"changes": [
3+
{
4+
"packageName": "@visactor/vrender-components",
5+
"comment": "fix: fix memory leak by properly removing listener",
6+
"type": "none"
7+
}
8+
],
9+
"packageName": "@visactor/vrender-components"
10+
}

packages/vrender-animate/src/ticker/default-ticker.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,7 @@ export class DefaultTicker extends EventEmitter implements ITicker {
7070
init(): void {
7171
this.interval = 16;
7272
this.status = STATUS.INITIAL;
73-
application.global.hooks.onSetEnv.tap('graph-ticker', () => {
74-
this.initHandler(false);
75-
});
73+
application.global.hooks.onSetEnv.tap('graph-ticker', this._handleGraphTick);
7674
if (application.global.env) {
7775
this.initHandler(false);
7876
}
@@ -221,6 +219,8 @@ export class DefaultTicker extends EventEmitter implements ITicker {
221219
this.tickerHandler?.release();
222220
this.tickerHandler = null;
223221
this.lastFrameTime = -1;
222+
223+
application.global.hooks.onSetEnv.unTap('graph-ticker', this._handleGraphTick);
224224
}
225225

226226
protected checkSkip(delta: number): boolean {
@@ -280,4 +280,8 @@ export class DefaultTicker extends EventEmitter implements ITicker {
280280

281281
this.emit('tick', delta);
282282
};
283+
284+
protected _handleGraphTick = () => {
285+
this.initHandler(false);
286+
};
283287
}

packages/vrender-components/src/scrollbar/scrollbar.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,7 @@ export class ScrollBar extends AbstractComponent<Required<ScrollBarAttributes>>
444444
* 浏览器上的事件必须解绑,防止内存泄漏,场景树上的事件会自动解绑
445445
*/
446446
super.release(all);
447-
(vglobal.env === 'browser' ? vglobal : this.stage).addEventListener('touchmove', this._handleTouchMove, {
447+
(vglobal.env === 'browser' ? vglobal : this.stage).removeEventListener('touchmove', this._handleTouchMove, {
448448
passive: false
449449
});
450450
this._clearDragEvents();

packages/vrender-core/src/core/stage.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1045,6 +1045,10 @@ export class Stage extends Group implements IStage {
10451045
this.window.release();
10461046
this._ticker?.remTimeline(this?.timeline);
10471047
this._ticker?.removeListener('tick', this.afterTickCb);
1048+
if (!this.params.ticker) {
1049+
// release stage创建的ticker,避免release外部的ticker
1050+
this._ticker?.release();
1051+
}
10481052
this.renderService.renderTreeRoots = [];
10491053
}
10501054

0 commit comments

Comments
 (0)