As the title says: I'm working on a very big project and in few components I've used ChangeDetectionStrategy.OnPush
to avoid bad performances. I was wondering, is it "good" to put in every component that strategy and, in case, use ChangeDetectionRef.detectChanges()
to programmatically update the component when needed?
--
That's a small component I have in the app:
<my-map
(updatedGeometry)="setUpdatedGeometry($event)"
[startGraphEdit]="elementToEdit" [startCut]="elementToCut"
[startCopy]="elementToCopy"
[updateGraph]="elementToUpdate"
[showElement]="elementToShow"
(selectedProfile)="setProfile($event)"
[reducedChange]="reducedChange"
(reduceComposer)="setReducedComposer($event)"
[labelsVisible]="labelsVisible"
(visibleComposer)="setVisibleComposer($event)"
[activateLayers]="activeLayers"
(curLayers)="setCurrentLayers($event)"
[loadExtent]="extentToLoad"
(extent)="setExtent($event)"
[updateZoom]="newZoom"
(curZoom)="setCurrentZoom($event)"
(curLon)="setCurrentLon($event)"
(curLat)="setCurrentLat($event)"
(poiNotesOffset)="setPoiNotesOffset($event)"
[cancelPoiNoteCreation]="visibleDetailPanel"
(poiNoteUpdatedPosition)="setPoiNoteUpdatedPosition($event)"
[updatePoiNotePosition]="poiNotesElementForUpdate"
[removePoiNoteElement]="poiNotesElementForDeletion"
[updatePoiNotes]="updatePoiNotes"
[projectCode]="prjCode"
(poiNote)="poiNote($event)"
[setPrecisionPointerValues]="precisionPointerValues"
(precisionPointerValues)="updatePrecisionPointer($event)"
(exploreToolArea)="setExploreToolArea($event)"
(extentArea)="setExtentArea($event)"
[exploreToolRadius]="exploreToolRadius"
(newExploreToolRadius)="setExploreToolRadius($event)"
[currEnvironment]="currEnvironment"
(elementSelected)="onElementClick($event)"
[setaClasses]="classes"
[height]="mapHeight"
[width]="mapWidth"
[offsetX]="mapOffsetX"
[offsetY]="mapOffsetY"
[geometriesToHighlight]="geometriesToHighlight"
[highlightLineElements]="lineElements"
(poiList)="setPoiList($event)">
</my-map>
the component has a lot of Input and Output, and also communicate with other components using Subjects
and BehaviorSubjects
.