Skip to content

Commit 7cf4ba4

Browse files
perf(overmind-devtools-client): push messages, though animation frame updates
1 parent 92102fe commit 7cf4ba4

File tree

4 files changed

+41
-40
lines changed

4 files changed

+41
-40
lines changed

packages/node_modules/overmind-devtools-client/src/BackendConnector.ts

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { AppMessage } from './overmind/types'
2-
import * as throttle from 'lodash.throttle'
32

43
type Message = {
54
appName: string
@@ -16,7 +15,6 @@ class WebsocketConnector {
1615
private socket: WebSocket
1716
private messagesBeforeConnected: Array<[string, any, any]> = []
1817
private isOpen = false
19-
buffer = []
2018

2119
public connect(
2220
port: string | number // TODO: return Promise so we can wait for it
@@ -87,25 +85,30 @@ class WebsocketConnector {
8785
}
8886

8987
export class BackendConnector extends WebsocketConnector {
90-
private throttledOnMessage = throttle(
91-
(onMessage: MessageCallback) => {
92-
const messages = this.buffer.slice()
93-
this.buffer.length = 0
94-
onMessage(messages)
95-
},
96-
500,
97-
{
98-
leading: false,
88+
buffer = []
89+
onMessageCallback: MessageCallback
90+
constructor() {
91+
super()
92+
requestAnimationFrame(this.loopBufferOnFrame)
93+
}
94+
private loopBufferOnFrame = () => {
95+
if (this.buffer.length) {
96+
const messages = this.buffer.splice(0, 10)
97+
this.onMessageCallback(messages)
9998
}
100-
)
99+
requestAnimationFrame(this.loopBufferOnFrame)
100+
}
101101
onMessage = (onMessage: MessageCallback) => {
102+
this.onMessageCallback = onMessage
102103
this.on('message', (message) => {
103104
this.buffer.push(message)
104-
this.throttledOnMessage(onMessage)
105105
})
106106
}
107107
onDisconnect = (onDisconnect: (name: string) => void) => {
108-
this.on('disconnect', (name) => onDisconnect(name))
108+
this.on('disconnect', (name) => {
109+
this.buffer.length = 0
110+
onDisconnect(name)
111+
})
109112
}
110113
sendMessage(appName: string, eventName: string, payload: object = null) {
111114
this.send('message', {

packages/node_modules/overmind-devtools-client/src/components/Console/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import * as styles from './styles'
66
const Console: FunctionComponent = () => {
77
const { state } = useOvermind()
88

9+
console.log(state.currentApp.messages)
910
return (
1011
<div className={styles.wrapper}>
1112
{state.currentApp.messages.map((message, index) => (

packages/node_modules/overmind-devtools-client/src/overmind/operators.ts

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -79,33 +79,32 @@ export const addFlush: () => Operator<FlushMessage> = () =>
7979
})
8080

8181
export const ensureApp: () => Operator<Message> = () =>
82-
mutate(async ({ state, effects }, message) => {
82+
mutate(({ state, effects }, message) => {
8383
if (
8484
!state.apps[message.appName] ||
8585
message.messages[0].type === ExecutionType.INIT
8686
) {
87-
const selectedActionQuery: string = await effects.storage.get(
88-
`${message.appName}.selectedActionQuery`
89-
)
90-
const actionQueryPayload: string = await effects.storage.get(
91-
`${message.appName}.actionQueryPayload`
92-
)
93-
const tab = await effects.storage.get<Tab>(
94-
`${message.appName}.currentTab`
95-
)
96-
97-
const actionQuery =
98-
selectedActionQuery &&
99-
message.messages[0].data.actions.includes(selectedActionQuery)
100-
? selectedActionQuery
101-
: ''
102-
10387
state.apps[message.appName] = createApp({
10488
name: message.appName,
105-
selectedActionQuery: actionQuery,
106-
actionQueryPayload: actionQuery ? actionQueryPayload : '',
10789
})
108-
state.currentTab = tab || state.currentTab
90+
91+
// Do not use await, as it will block further execution, this stuff has to be sync
92+
Promise.all([
93+
effects.storage.get<string>(`${message.appName}.selectedActionQuery`),
94+
effects.storage.get<string>(`${message.appName}.actionQueryPayload`),
95+
effects.storage.get<Tab>(`${message.appName}.currentTab`),
96+
]).then(([selectedActionQuery, actionQueryPayload, tab]) => {
97+
const actionQuery =
98+
selectedActionQuery &&
99+
message.messages[0].data.actions.includes(selectedActionQuery)
100+
? selectedActionQuery
101+
: ''
102+
state.apps[message.appName].selectedActionQuery = actionQuery
103+
state.apps[message.appName].actionQueryPayload = actionQuery
104+
? actionQueryPayload
105+
: ''
106+
state.currentTab = tab || state.currentTab
107+
})
109108
}
110109
})
111110

packages/node_modules/overmind/src/Devtools.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -144,17 +144,15 @@ export class Devtools {
144144
}
145145
send(message: Message) {
146146
const stringifiedMessage = JSON.stringify(message)
147-
;(window['__zone_symbol__setTimeout'] || setTimeout)(() => {
148-
this.buffer.push(stringifiedMessage)
149-
this.sendBuffer()
150-
})
147+
this.buffer.push(stringifiedMessage)
148+
this.sendBuffer()
151149
}
152-
private sendBuffer = throttle(function() {
150+
private sendBuffer() {
153151
if (this.isConnected && this.buffer.length) {
154152
this.ws.send(
155153
`{ "appName": "${this.name}", "messages": [${this.buffer.join(',')}] }`
156154
)
157155
this.buffer.length = 0
158156
}
159-
}, 50)
157+
}
160158
}

0 commit comments

Comments
 (0)