diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2020-11-01 11:57:34 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2020-11-01 11:57:34 +0900 |
| commit | c055b4d32dbe719134228f13cb711ce5d11d5525 (patch) | |
| tree | 4e893fb49cac494a6c77330bd6a8232759c15ccf /src/client/scripts/stream.ts | |
| parent | タスクマネージャー(wip) (diff) | |
| download | sharkey-c055b4d32dbe719134228f13cb711ce5d11d5525.tar.gz sharkey-c055b4d32dbe719134228f13cb711ce5d11d5525.tar.bz2 sharkey-c055b4d32dbe719134228f13cb711ce5d11d5525.zip | |
fix(client): ストリーミングのメモリリークを修正
SharedConnection や NonSharedConnection のインスタンスを Vue コンポーネントの data に含むと、Vue が Proxy に変換するため、Stream クラス内部でインスタンス同士の比較をしても false になり、使われなくなったインスタンスがメモリ上に残り続ける。
なお、チャンネルへの接続/切断は頻繁に行うものではないため、メモリリークといっても影響は軽微とみられる。
Diffstat (limited to 'src/client/scripts/stream.ts')
| -rw-r--r-- | src/client/scripts/stream.ts | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/client/scripts/stream.ts b/src/client/scripts/stream.ts index 942e2a8daa..7330a2f8bb 100644 --- a/src/client/scripts/stream.ts +++ b/src/client/scripts/stream.ts @@ -1,6 +1,7 @@ import autobind from 'autobind-decorator'; import { EventEmitter } from 'eventemitter3'; import ReconnectingWebsocket from 'reconnecting-websocket'; +import { markRaw } from 'vue'; import { debug, wsUrl } from '@/config'; import { query as urlQuery } from '../../prelude/url'; @@ -36,7 +37,7 @@ export default class Stream extends EventEmitter { this.sharedConnectionPools.push(pool); } - const connection = new SharedConnection(this, channel, pool, name); + const connection = markRaw(new SharedConnection(this, channel, pool, name)); this.sharedConnections.push(connection); return connection; } @@ -53,7 +54,7 @@ export default class Stream extends EventEmitter { @autobind public connectToChannel(channel: string, params?: any): NonSharedConnection { - const connection = new NonSharedConnection(this, channel, params); + const connection = markRaw(new NonSharedConnection(this, channel, params)); this.nonSharedConnections.push(connection); return connection; } |