优化消息平滑

This commit is contained in:
John Smith 2020-09-05 12:05:01 +08:00
parent 7a244757d2
commit 152db9f00a

View File

@ -281,16 +281,25 @@ export default {
if (this.estimatedEnqueueInterval) {
estimatedNextEnqueueRemainTime = Math.max(this.lastEnqueueTime - new Date() + this.estimatedEnqueueInterval, 1)
}
// 80ms/
// 80ms/3
const MIN_SLEEP_TIME = 80
const MAX_SLEEP_TIME = 1000
const MAX_REMAIN_GROUP_NUM = 3
//
let shouldEmitGroupNum = Math.max(this.smoothedMessageQueue.length - MAX_REMAIN_GROUP_NUM, 0)
//
let maxCanEmitCount = estimatedNextEnqueueRemainTime / MIN_SLEEP_TIME
//
let groupNumToEmit
if (this.smoothedMessageQueue.length < estimatedNextEnqueueRemainTime / 80) {
// 1
if (shouldEmitGroupNum < maxCanEmitCount) {
// 13
groupNumToEmit = 1
} else {
// 1
groupNumToEmit = Math.ceil(this.smoothedMessageQueue.length / (estimatedNextEnqueueRemainTime / 80))
// 13
groupNumToEmit = Math.ceil(shouldEmitGroupNum / maxCanEmitCount)
}
//
let messageGroups = this.smoothedMessageQueue.splice(0, groupNumToEmit)
let mergedGroup = []
for (let messageGroup of messageGroups) {
@ -303,19 +312,20 @@ export default {
if (this.smoothedMessageQueue.length <= 0) {
return
}
//
let sleepTime
if (groupNumToEmit == 1) {
// 便80-1000ms
if (groupNumToEmit === 1) {
// 便[MIN_SLEEP_TIME, MAX_SLEEP_TIME]
sleepTime = estimatedNextEnqueueRemainTime / this.smoothedMessageQueue.length
sleepTime *= 0.5 + Math.random()
if (sleepTime > 1000) {
sleepTime = 1000
} else if (sleepTime < 80) {
sleepTime = 80
if (sleepTime > MAX_SLEEP_TIME) {
sleepTime = MAX_SLEEP_TIME
} else if (sleepTime < MIN_SLEEP_TIME) {
sleepTime = MIN_SLEEP_TIME
}
} else {
//
sleepTime = 80
sleepTime = MIN_SLEEP_TIME
}
this.emitSmoothedMessageTimerId = window.setTimeout(this.emitSmoothedMessages, sleepTime)
},