优化消息平滑

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