When you populate a collection, results are cached after calculations are performed for the first time, and processing will be faster the second time you make visible the layer. The cache is invalidated (and calculations re-occur) when you make a change to the collection or your scene.
When working with heavier scenes, if you plan to add a large number of objects to your collection, and Include Hierarchy is required to populate your collection, it is recommended that you first complete entering your expression and selecting and adding your nodes before you enable Include Hierarchy.
When setting up your scene, you may want to reference similar objects into the same namespace (for example, effects, hair, set, characters, and so forth). This allows you to create collections of similar objects to override their attributes and control their visibility.
You can populate collections easily with expressions using the namespace.
For example, create a namespace called chr to reference your characters.
Then within the chr namespace, create a crowd namespace and a hero namespace and a hair namespace.
Reference in your objects as follows:
chr:crowd:chr_crowd_verA
chr:hero:chr_nik
chr:hair:chr_mike_hairgroom
You can then use the expression chr:*:* to populate your character collection.
To improve performance, you can create a layer without being in the layer; that is, the master layer can remain visible while you populate your render layer with collections and create overrides.
You can also create collections for data that does not yet exist. For example, as you build a city scene with many buildings, follow a consistent naming convention for your buildings (for example, citybldg1, citybldg2, and so forth), and use an expression such as citybl* to add all buildings in a collection.
As you create a new scene and import a render setup template, then add buildings to your scene, your expression can be re-applied by clicking the icon and the buildings are automatically added to the collection as a result.
Pause the viewport before loading a complex scene if you do not need to visualize your scene. Pausing allows you to make changes in your scene (such as importing a .json template file) without having to wait for the viewport to update. See Pause Viewport 2.0 and the Material Viewer in the Hypershade.
Similarly, pause the viewport when performing multiple operations on a complex scene where immediate visual feedback is not required.
When creating a collection, precision with declaring your expression will help to reduce calculation time; for example: |Set|Building|* instead of just |Set|*, as this reduces the number of nodes in the collection.