Răsfoiți Sursa

avoid N+1 lookups in DocumentUpdaterHandler

Hayden Faulds 9 ani în urmă
părinte
comite
ef68c6a531

+ 9 - 8
services/web/app/coffee/Features/DocumentUpdater/DocumentUpdaterHandler.coffee

@@ -233,22 +233,23 @@ module.exports = DocumentUpdaterHandler =
 	_getRenameUpdates: (entityType, oldEntities, newEntities) ->
 	_getRenameUpdates: (entityType, oldEntities, newEntities) ->
 		updates = []
 		updates = []
 
 
-		for oldEntity in oldEntities
-			id = oldEntity[entityType]._id
-			newEntity = _.find newEntities, (newEntity) ->
-				newEntity[entityType]._id.toString() == id.toString()
+		oldEntitiesHash = _.indexBy oldEntities, (entity) -> entity[entityType]._id.toString()
+		newEntitiesHash = _.indexBy newEntities, (entity) -> entity[entityType]._id.toString()
 
 
+		for id, oldEntity of oldEntitiesHash
+			newEntity = newEntitiesHash[id]
+
+			# renamed entities
 			if newEntity.path != oldEntity.path
 			if newEntity.path != oldEntity.path
 				updates.push
 				updates.push
 					id: id
 					id: id
 					pathname: oldEntity.path
 					pathname: oldEntity.path
 					newPathname: newEntity.path
 					newPathname: newEntity.path
 
 
-		for newEntity in newEntities
-			id = newEntity[entityType]._id
-			oldEntity = _.find oldEntities, (oldEntity) ->
-				oldEntity[entityType]._id.toString() == id.toString()
+		for id, newEntity of newEntitiesHash
+			oldEntity = oldEntitiesHash[id]
 
 
+			# removed entities
 			if !oldEntity?
 			if !oldEntity?
 				updates.push
 				updates.push
 					id: id
 					id: id

+ 3 - 3
services/web/test/unit/coffee/DocumentUpdater/DocumentUpdaterHandlerTests.coffee

@@ -427,7 +427,7 @@ describe 'DocumentUpdaterHandler', ->
 					@newFiles = []
 					@newFiles = []
 
 
 					docUpdates = [
 					docUpdates = [
-						id: @docIdB,
+						id: @docIdB.toString(),
 						pathname: "/old_b"
 						pathname: "/old_b"
 						newPathname: "/new_b"
 						newPathname: "/new_b"
 					]
 					]
@@ -449,7 +449,7 @@ describe 'DocumentUpdaterHandler', ->
 					@newFiles = []
 					@newFiles = []
 
 
 					docUpdates = [
 					docUpdates = [
-						id: @docId,
+						id: @docId.toString(),
 						pathname: "/foo"
 						pathname: "/foo"
 						docLines: 'a\nb'
 						docLines: 'a\nb'
 						url: undefined
 						url: undefined
@@ -472,7 +472,7 @@ describe 'DocumentUpdaterHandler', ->
 					]
 					]
 
 
 					fileUpdates = [
 					fileUpdates = [
-						id: @fileId,
+						id: @fileId.toString(),
 						pathname: "/bar"
 						pathname: "/bar"
 						url: 'filestore.example.com/file'
 						url: 'filestore.example.com/file'
 						docLines: undefined
 						docLines: undefined