Optimisation: prevent unnecessary redefinitions/reallocations

This commit is contained in:
Brendan Abolivier 2018-11-07 10:19:37 +00:00
parent 585bfeda12
commit 8ad13f0c0f
No known key found for this signature in database
GPG key ID: 8EF1500759F70623
2 changed files with 10 additions and 3 deletions

View file

@ -77,7 +77,9 @@ func Backfill(
// Filter any event that's not from the requested room out. // Filter any event that's not from the requested room out.
evs := make([]gomatrixserverlib.Event, 0) evs := make([]gomatrixserverlib.Event, 0)
for _, ev := range res.Events {
var ev gomatrixserverlib.Event
for _, ev = range res.Events {
if ev.RoomID() == roomID { if ev.RoomID() == roomID {
evs = append(evs, ev) evs = append(evs, ev)
} }

View file

@ -497,6 +497,8 @@ func (r *RoomserverQueryAPI) scanEventTree(
) (resultNIDs []types.EventNID, err error) { ) (resultNIDs []types.EventNID, err error) {
var allowed bool var allowed bool
var events []types.Event var events []types.Event
var next []string
var pre string
resultNIDs = make([]types.EventNID, 0, limit) resultNIDs = make([]types.EventNID, 0, limit)
@ -505,7 +507,10 @@ func (r *RoomserverQueryAPI) scanEventTree(
// "prev_event" key. // "prev_event" key.
BFSLoop: BFSLoop:
for len(front) > 0 { for len(front) > 0 {
var next []string // Prevent unnecessary allocations: reset the slice only when not empty.
if len(next) > 0 {
next = make([]string, 0)
}
// Retrieve the events to process from the database. // Retrieve the events to process from the database.
events, err = r.DB.EventsFromIDs(ctx, front) events, err = r.DB.EventsFromIDs(ctx, front)
if err != nil { if err != nil {
@ -520,7 +525,7 @@ BFSLoop:
// Update the list of events to retrieve. // Update the list of events to retrieve.
resultNIDs = append(resultNIDs, ev.EventNID) resultNIDs = append(resultNIDs, ev.EventNID)
// Loop through the event's parents. // Loop through the event's parents.
for _, pre := range ev.PrevEventIDs() { for _, pre = range ev.PrevEventIDs() {
// Only add an event to the list of next events to process if it // Only add an event to the list of next events to process if it
// hasn't been seen before. // hasn't been seen before.
if !visited[pre] { if !visited[pre] {