You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2016/06/24 12:57:54 UTC
svn commit: r1750080 -
/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryGrid.js
Author: orudyy
Date: Fri Jun 24 12:57:54 2016
New Revision: 1750080
URL: http://svn.apache.org/viewvc?rev=1750080&view=rev
Log:
QPID-7288: Reduce the number of loops whilst comparing new and old data
Modified:
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryGrid.js
Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryGrid.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryGrid.js?rev=1750080&r1=1750079&r2=1750080&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryGrid.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/query/QueryGrid.js Fri Jun 24 12:57:54 2016
@@ -53,6 +53,27 @@ define(["dojo/_base/declare",
all,
util)
{
+
+ var createIdToIndexMap = function(results, idProperty)
+ {
+ var map = {};
+ for(var i = 0; i < results.length; i++)
+ {
+ var id = results[i][idProperty];
+ map[id] = i;
+ }
+ return map;
+ }
+
+ var updateIdToIndexMap = function(results, idProperty, idToIndexMap, startIndex)
+ {
+ for(var i = startIndex; i < results.length; i++)
+ {
+ var id = results[i][idProperty];
+ idToIndexMap[id] = i;
+ }
+ }
+
var TrackableQueryStore = declare(QueryStore,
{
/*
@@ -168,7 +189,9 @@ define(["dojo/_base/declare",
}
else
{
- this._currentResults = event.results.slice(0);
+ var results = event.results.slice(0);
+ this._currentResults = results;
+ this._currentResultsIdToIndexMap = createIdToIndexMap(results, this._store.idProperty);
}
}));
}
@@ -301,32 +324,25 @@ define(["dojo/_base/declare",
if (results)
{
var newResults = results.slice(0);
+ var store = this._store;
+ var idProperty = store.idProperty;
+ var newResultsIdToIndexMap = createIdToIndexMap(newResults, idProperty);
if (this._currentResults)
{
- var store = this._store;
var currentResults = this._currentResults.slice(0);
- var idProperty = store.idProperty;
for (var i = currentResults.length - 1; i >= 0; i--)
{
var currentResult = currentResults[i];
var id = currentResult[idProperty];
- var newResult = null;
- for (var j = 0; j < newResults.length; j++)
- {
- if (newResults[j][idProperty] === id)
- {
- newResult = newResults[j];
- break;
- }
- }
-
- if (newResult == null)
+ var newResultIndex = newResultsIdToIndexMap[id];
+ if (newResultIndex === undefined)
{
var event = {"target": currentResult,
"previousIndex": evt.start + i,
- "index": evt.start +i};
+ "index": evt.start + i};
store.emit("delete", event);
currentResults.splice(i, 1);
+ delete this._currentResultsIdToIndexMap[id];
}
}
@@ -334,26 +350,21 @@ define(["dojo/_base/declare",
{
var newResult = newResults[j];
var id = newResult[idProperty];
- var currentResult = null;
- var previousIndex = -1;
- for (var i = 0; i < currentResults.length; i++)
- {
- if (currentResults[i][idProperty] === id)
- {
- currentResult = currentResults[i];
- previousIndex = i;
- break;
- }
- }
+ var previousIndex = this._currentResultsIdToIndexMap[id];
- if (currentResult == null)
+ if (previousIndex === undefined)
{
var event = {"target": newResult, "index": j + evt.start};
store.emit("add", event);
currentResults.splice(j, 0, newResult);
+ updateIdToIndexMap(currentResults,
+ idProperty,
+ this._currentResultsIdToIndexMap,
+ j);
}
else
{
+ var currentResult = currentResults[previousIndex];
var event = {"target": newResult,
"previousIndex": previousIndex + evt.start,
"index": j + evt.start};
@@ -369,12 +380,17 @@ define(["dojo/_base/declare",
{
currentResults.splice(previousIndex, 1);
currentResults.splice(j, 0, currentResult);
+ updateIdToIndexMap(currentResults,
+ idProperty,
+ this._currentResultsIdToIndexMap,
+ Math.min(previousIndex, j));
store.emit("update", event);
}
}
}
}
this._currentResults = newResults;
+ this._currentResultsIdToIndexMap = newResultsIdToIndexMap
this._onFetchCompleted(evt)
}
},
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org