Move check to outer scope for great performance

This commit is contained in:
Joe Fiorini
2015-06-05 16:33:26 -04:00
parent 63b7ec8b67
commit dae25b7123
5 changed files with 56 additions and 54 deletions

View File

@@ -20,6 +20,11 @@ export function compareFacts(module, facts) {
return _(leftToRight) return _(leftToRight)
.concat(rightToLeft) .concat(rightToLeft)
.unique('displayKeyPath') .unique('displayKeyPath')
.thru(function(result) {
return { factData: result,
isNestedDisplay: _.isUndefined(module.factTemplate)
};
})
.value(); .value();
} }
} }

View File

@@ -9,7 +9,7 @@ import stringFilters from 'tower/shared/string-filters/main';
var $injector = angular.injector(['ng', stringFilters.name]); var $injector = angular.injector(['ng', stringFilters.name]);
var $interpolate = $injector.get('$interpolate'); var $interpolate = $injector.get('$interpolate');
function parseFactTemplate(factTemplate, fact) { function getFactTemplate(factTemplate, fact) {
if (_.isFunction(factTemplate)) { if (_.isFunction(factTemplate)) {
return factTemplate(fact); return factTemplate(fact);
} else { } else {
@@ -40,11 +40,11 @@ function slotFactValues(basisPosition, basisValue, comparatorValue) {
export default export default
function flatCompare(basisFacts, comparatorFacts, nameKey, compareKeys, factTemplate) { function flatCompare(basisFacts, comparatorFacts, nameKey, compareKeys, factTemplate) {
return basisFacts.reduce(function(arr, basisFact) { return basisFacts.reduce(function(arr, basisFact) {
var searcher = {}; var searcher = {};
searcher[nameKey] = basisFact[nameKey]; searcher[nameKey] = basisFact[nameKey];
var isNestedDisplay = false;
var basisTemplate, comparatorTemplate, slottedValues, basisValue, comparatorValue; var basisTemplate, comparatorTemplate, slottedValues, basisValue, comparatorValue;
var matchingFact = _.where(comparatorFacts, searcher); var matchingFact = _.where(comparatorFacts, searcher);
@@ -54,26 +54,24 @@ export default
if (!_.isUndefined(factTemplate)) { if (!_.isUndefined(factTemplate)) {
basisTemplate = parseFactTemplate(factTemplate, basisFact); basisTemplate = getFactTemplate(factTemplate, basisFact);
basisValue = renderFactTemplate(basisTemplate, basisFact); basisValue = renderFactTemplate(basisTemplate, basisFact);
slottedValues = slotFactValues(basisFacts.position, basisValue, 'absent'); slottedValues = slotFactValues(basisFacts.position, basisValue, 'absent');
diffs = diffs =
{ keyName: basisFact[nameKey], { keyName: basisFact[nameKey],
isNestedDisplay: false,
value1: slottedValues.left, value1: slottedValues.left,
value2: slottedValues.right value2: slottedValues.right
}; };
} else { } else {
isNestedDisplay = true;
diffs = diffs =
_.map(basisFact, function(value, key) { _.map(basisFact, function(value, key) {
var slottedValues = slotFactValues(basisFacts.position, value, 'absent'); var slottedValues = slotFactValues(basisFacts.position, value, 'absent');
return { keyName: key, return { keyName: key,
value1: slottedValues.left, value1: slottedValues.left,
value1IsAbsent: slottedValues.left === 'absent', value1IsAbsent: slottedValues.left === 'absent',
value2: slottedValues.right, value2: slottedValues.right,
@@ -87,8 +85,8 @@ export default
if (!_.isUndefined(factTemplate)) { if (!_.isUndefined(factTemplate)) {
basisTemplate = parseFactTemplate(factTemplate, basisFact); basisTemplate = getFactTemplate(factTemplate, basisFact);
comparatorTemplate = parseFactTemplate(factTemplate, matchingFact); comparatorTemplate = getFactTemplate(factTemplate, matchingFact);
basisValue = renderFactTemplate(basisTemplate, basisFact); basisValue = renderFactTemplate(basisTemplate, basisFact);
comparatorValue = renderFactTemplate(comparatorTemplate, matchingFact); comparatorValue = renderFactTemplate(comparatorTemplate, matchingFact);
@@ -99,7 +97,6 @@ export default
diffs = diffs =
{ keyName: basisFact[nameKey], { keyName: basisFact[nameKey],
isNestedDisplay: false,
value1: slottedValues.left, value1: slottedValues.left,
value2: slottedValues.right value2: slottedValues.right
}; };
@@ -108,8 +105,6 @@ export default
} else { } else {
isNestedDisplay = true;
diffs = _(compareKeys) diffs = _(compareKeys)
.map(function(key) { .map(function(key) {
var slottedValues = slotFactValues(basisFacts.position, var slottedValues = slotFactValues(basisFacts.position,
@@ -131,7 +126,6 @@ export default
var descriptor = var descriptor =
{ displayKeyPath: basisFact[nameKey], { displayKeyPath: basisFact[nameKey],
isNestedDisplay: isNestedDisplay,
nestingLevel: 0, nestingLevel: 0,
facts: diffs facts: diffs
}; };

View File

@@ -12,8 +12,6 @@ export default
function(factScanDataService, getModuleOptions, resolveVersions, _) { function(factScanDataService, getModuleOptions, resolveVersions, _) {
return function(hostIds, moduleName, leftDate, rightDate) { return function(hostIds, moduleName, leftDate, rightDate) {
var moduleOptions;
if (hostIds.length === 1) { if (hostIds.length === 1) {
hostIds = hostIds.concat(hostIds[0]); hostIds = hostIds.concat(hostIds[0]);
} }
@@ -49,7 +47,7 @@ export default
} }
}) })
.thenAll(function(hostFacts) { .thenAll(function(hostFacts) {
return [moduleOptions, hostFacts]; return hostFacts;
}); });
}; };
} }

View File

@@ -62,8 +62,7 @@ function controller($rootScope,
activeModule.name, activeModule.name,
leftRange, leftRange,
rightRange) rightRange)
.then(function(factDataAndModules) { .then(function(responses) {
var responses = factDataAndModules[1];
var data = _.pluck(responses, 'fact'); var data = _.pluck(responses, 'fact');
$scope.leftScanDate = moment(responses[0].timestamp); $scope.leftScanDate = moment(responses[0].timestamp);
@@ -126,7 +125,8 @@ function controller($rootScope,
// Clear out any errors from the previous run... // Clear out any errors from the previous run...
$scope.error = null; $scope.error = null;
$scope.factData = info; $scope.factData = info.factData;
$scope.isNestedDisplay = info.isNestedDisplay;
return info; return info;

View File

@@ -54,52 +54,57 @@
<span class="FactDataTableHeading-date">{{rightScanDate|longDate}}</span> <span class="FactDataTableHeading-date">{{rightScanDate|longDate}}</span>
</h3> </h3>
</div> </div>
<div class="FactDataTable-factGroup FactDataGroup" ng-repeat="group in factData | orderBy: 'displayKeyPath'"> <div ng-if="!isNestedDisplay">
<div class="FactDataTable-row" ng-if="!group.isNestedDisplay"> <div class="FactDataTable-row" ng-repeat="group in factData | orderBy: 'displayKeyPath'">
<p class="FactDataTable-column">{{group.facts.keyName}}</p> <p class="FactDataTable-column">{{group.facts.keyName}}</p>
<p class="FactDataTable-column">{{group.facts.value1}}</p> <p class="FactDataTable-column">{{group.facts.value1}}</p>
<p class="FactDataTable-column">{{group.facts.value2}}</p> <p class="FactDataTable-column">{{group.facts.value2}}</p>
</div> </div>
<div class="FactDataTable-row FactDataGroup-headings" ng-switch="group.nestingLevel" ng-if="group.displayKeyPath && group.isNestedDisplay"> </div>
<h2 class="FactDataTable-column FactDataTable-column--full FactDataGroup-header" ng-switch-when="0"> <div ng-if="isNestedDisplay">
{{group.displayKeyPath}}
</h2> <div class="FactDataTable-factGroup FactDataGroup" ng-repeat="group in factData | orderBy: 'displayKeyPath'">
<h3 class="FactDataTable-column FactDataTable-column--full" ng-switch-when="1">
{{group.displayKeyPath}} <div class="FactDataTable-row FactDataGroup-headings" ng-switch="group.nestingLevel">
</h3> <h2 class="FactDataTable-column FactDataTable-column--full FactDataGroup-header" ng-switch-when="0">
<h4 class="FactDataTable-column FactDataTable-column--full" ng-switch-when="2"> {{group.displayKeyPath}}
{{group.displayKeyPath}} </h2>
</h4> <h3 class="FactDataTable-column FactDataTable-column--full" ng-switch-when="1">
<h5 class="FactDataTable-column FactDataTable-column--full" ng-switch-when="3"> {{group.displayKeyPath}}
{{group.displayKeyPath}} </h3>
</h5> <h4 class="FactDataTable-column FactDataTable-column--full" ng-switch-when="2">
</div> {{group.displayKeyPath}}
<div class="FactDataGroup-facts" data-facts="{{group.facts}}"> </h4>
<div class="FactDataTable-arrayGroup" ng-if="group.isFactArray" ng-repeat="arrayGroup in group.facts" data-array-group="{{arrayGroup}}"> <h5 class="FactDataTable-column FactDataTable-column--full" ng-switch-when="3">
<div class="FactDataTable-row FactDatum" ng-class="{'FactDatum--divergent': fact.isDivergent }" ng-repeat="fact in arrayGroup" data-fact="{{fact}}"> {{group.displayKeyPath}}
<p class="FactDatum-keyName FactDataTable-column"> </h5>
</div>
<div class="FactDataGroup-facts" data-facts="{{group.facts}}">
<div class="FactDataTable-arrayGroup" ng-if="group.isFactArray" ng-repeat="arrayGroup in group.facts" data-array-group="{{arrayGroup}}">
<div class="FactDataTable-row FactDatum" ng-class="{'FactDatum--divergent': fact.isDivergent }" ng-repeat="fact in arrayGroup" data-fact="{{fact}}">
<p class="FactDatum-keyName FactDataTable-column">
{{fact.keyName}} {{fact.keyName}}
</p> </p>
<p class="FactDatum-value FactDataTable-column" style="word-break: break-all"> <p class="FactDatum-value FactDataTable-column" style="word-break: break-all">
{{fact.value1}} {{fact.value1}}
</p> </p>
<p class="FactDatum-value FactDataTable-column" style="word-break: break-all"> <p class="FactDatum-value FactDataTable-column" style="word-break: break-all">
{{fact.value2}} {{fact.value2}}
</p>
</div>
</div>
<div class="FactDataTable-row FactDatum" ng-class="{'FactDatum--divergent': fact.isDivergent }" ng-repeat="fact in group.facts" ng-unless="group.isFactArray" data-fact="{{fact}}">
<p class="FactDataTable-column FactDatum-keyName">
{{fact.keyName}}
</p>
<p class="FactDataTable-column FactDatum-value" style="word-break: break-all">
{{fact.value1}}
</p>
<p class="FactDataTable-column FactDatum-value" style="word-break: break-all">
{{fact.value2}}
</p> </p>
</div> </div>
</div> </div>
<div class="FactDataTable-row FactDatum" ng-class="{'FactDatum--divergent': fact.isDivergent }" ng-repeat="fact in group.facts" ng-unless="group.isFactArray" data-fact="{{fact}}">
<p class="FactDataTable-column FactDatum-keyName">
{{fact.keyName}}
</p>
<p class="FactDataTable-column FactDatum-value" style="word-break: break-all">
{{fact.value1}}
</p>
<p class="FactDataTable-column FactDatum-value" style="word-break: break-all">
{{fact.value2}}
</p>
</div>
</div>
</div> </div>
</section> </section>