MM-8710: Web Hub optimizations (#8293)

* webhub optimizations

* test fix

* minor fix

* big perf improvement to ToJson after precomputing

* fix hub connection count
Этот коммит содержится в:
Chris
2018-02-20 12:50:10 -06:00
коммит произвёл Christopher Speller
родитель babd795d79
Коммит 19a5d0047d
3 изменённых файлов: 156 добавлений и 50 удалений

Просмотреть файл

@@ -6,6 +6,8 @@ package model
import (
"strings"
"testing"
"github.com/stretchr/testify/assert"
)
func TestWebSocketEvent(t *testing.T) {
@@ -54,3 +56,49 @@ func TestWebSocketResponse(t *testing.T) {
t.Fatal("Ids do not match")
}
}
func TestWebSocketEvent_PrecomputeJSON(t *testing.T) {
event := NewWebSocketEvent(WEBSOCKET_EVENT_POSTED, "foo", "bar", "baz", nil)
event.Sequence = 7
before := event.ToJson()
event.PrecomputeJSON()
after := event.ToJson()
assert.JSONEq(t, before, after)
}
var stringSink string
func BenchmarkWebSocketEvent_ToJson(b *testing.B) {
event := NewWebSocketEvent(WEBSOCKET_EVENT_POSTED, "foo", "bar", "baz", nil)
for i := 0; i < 100; i++ {
event.Data[NewId()] = NewId()
}
b.Run("SerializedNTimes", func(b *testing.B) {
for i := 0; i < b.N; i++ {
stringSink = event.ToJson()
}
})
b.Run("PrecomputedNTimes", func(b *testing.B) {
for i := 0; i < b.N; i++ {
event.PrecomputeJSON()
}
})
b.Run("PrecomputedAndSerializedNTimes", func(b *testing.B) {
for i := 0; i < b.N; i++ {
event.PrecomputeJSON()
stringSink = event.ToJson()
}
})
event.PrecomputeJSON()
b.Run("PrecomputedOnceAndSerializedNTimes", func(b *testing.B) {
for i := 0; i < b.N; i++ {
stringSink = event.ToJson()
}
})
}