# Perspective view first rendering

**URL:** <https://forum.inductiveautomation.com/t/perspective-view-first-rendering/111668>\
**Category:** Ignition\
**Tags:** ignition81, perspective\
**Created:** [October 23, 2025, 7:27am UTC](https://forum.inductiveautomation.com/t/perspective-view-first-rendering/111668 "2025-10-23T07:27:54Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![pgmo](https://avatars.discourse-cdn.com/v4/letter/p/d07c76/32.png) [@pgmo](https://forum.inductiveautomation.com/u/pgmo)\
**Post date:** [October 23, 2025, 7:27am UTC](https://forum.inductiveautomation.com/t/perspective-view-first-rendering/111668/1 "2025-10-23T07:27:54Z")

</div>

Hi all, my customer is complaining about initial rendering of a view. The view is a composition of many different containers, each with a tag binding on the `display` property: at first loading the UI experience is not the best indeed, because you see all containers for a short while, which then disappear as soon as bindings come into action - some portions show at first the _Bad/error_ overlay, because their `display` depend upon expressions on tags.

Any suggestion? Is there anything like _server side rendering_ in the roadmap? I think it could be helpful.

Thanks in advance, regards

---

<div class="post-metadata">

**Author:** ![danielps1818](https://avatars.discourse-cdn.com/v4/letter/d/ecae2f/32.png) [@danielps1818](https://forum.inductiveautomation.com/u/danielps1818)\
**Post date:** [October 23, 2025, 8:52am UTC](https://forum.inductiveautomation.com/t/perspective-view-first-rendering/111668/2 "2025-10-23T08:52:22Z")

</div>

We had in our project a loading problem too. We created a loading screen that dissapears when the view is done.

Also, are you using embeded views? We had some views inside views that called templates, and from our experience that REALLY slow the loading progress...

---

<div class="post-metadata">

**Author:** ![Transistor](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/transistor/32/3380_2.png) [@Transistor](https://forum.inductiveautomation.com/u/Transistor)\
**Post date:** [October 23, 2025, 1:36pm UTC](https://forum.inductiveautomation.com/t/perspective-view-first-rendering/111668/3 "2025-10-23T13:36:16Z")

</div>

Can you use Expression Language's [coalesce | Ignition User Manual](https://docs.inductiveautomation.com/docs/8.3/appendix/expression-functions/logic/coalesce) function?  
`coalesce({view.params.myOptionalParam}, '')`  
`coalesce({view.params.myOptionalParam}, null)`  
`coalesce({view.params.myOptionalParam}, 0)`

---

<div class="post-metadata">

**Author:** ![dkhayes117](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dkhayes117/32/68344_2.png) [@dkhayes117](https://forum.inductiveautomation.com/u/dkhayes117)\
**Post date:** [October 23, 2025, 1:46pm UTC](https://forum.inductiveautomation.com/t/perspective-view-first-rendering/111668/4 "2025-10-23T13:46:17Z")

</div>

> [@pgmo](#):
>
> because their `display` depend upon expressions on tags.

When you add a binding to a property, it automatically makes it non-persistent. After adding your binding on the display prop, try changing it back to persistent.

This should force it to load as whatever you save the view with, that is if you save with display unchecked it should initialize that way on open, then the expression will kick in after that.

---

<div class="post-metadata">

**Author:** ![nminchin](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/nminchin/32/6911_2.png) [@nminchin](https://forum.inductiveautomation.com/u/nminchin)\
**Post date:** [October 23, 2025, 2:02pm UTC](https://forum.inductiveautomation.com/t/perspective-view-first-rendering/111668/5 "2025-10-23T14:02:40Z")

</div>

A downside to saving persistent values willy nilly is you create headaches when you go to diff changes, not to mention you increase the size of the view which may in itself lead to longer load times. Any changes to those values will appear as changes which are most likely going to be false positives. The better way is as @Transistor suggests, by using coalesce

---

<div class="post-metadata">

**Author:** ![Ryan\_Deardorff](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/ryan_deardorff/32/63815_2.png) [@Ryan\_Deardorff](https://forum.inductiveautomation.com/u/Ryan_Deardorff)\
**Post date:** [October 23, 2025, 4:12pm UTC](https://forum.inductiveautomation.com/t/perspective-view-first-rendering/111668/6 "2025-10-23T16:12:57Z")

</div>

The problem with `coalesce` is that it still takes a split second to evaluate, so if you’re using it to determine `display`, the component will still appear very briefly.

---

<div class="post-metadata">

**Author:** ![Transistor](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/transistor/32/3380_2.png) [@Transistor](https://forum.inductiveautomation.com/u/Transistor)\
**Post date:** [October 23, 2025, 6:44pm UTC](https://forum.inductiveautomation.com/t/perspective-view-first-rendering/111668/7 "2025-10-23T18:44:54Z")

</div>

Is it time to call in the cavalry?  
How about a CSS fade in?

> [@Embedded View Parameter Timing](https://forum.inductiveautomation.com/t/embedded-view-parameter-timing/105922/4):
>
> An alternative - for anyone interested - is to apply a CSS fade-in animation. Create the style class and enable the Animated checkbox. I used the [Perspective Built-In Themes | Ignition User Manual](https://www.docs.inductiveautomation.com/docs/8.1/ignition-modules/perspective/styles/perspective-built-in-themes#built-in-theme-colors) --neutral-10 for (almost) invisible at 0% and --neutral-90 for the reveal at 100%. You could apply it anywhere simply by selecting it from props.style.classes.

---

<div class="post-metadata">

**Author:** ![Steve\_Laubach](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/steve_laubach/32/60900_2.png) [@Steve\_Laubach](https://forum.inductiveautomation.com/u/Steve_Laubach)\
**Post date:** [October 23, 2025, 7:30pm UTC](https://forum.inductiveautomation.com/t/perspective-view-first-rendering/111668/8 "2025-10-23T19:30:25Z")

</div>

At ICC 2024 one of the presenters suggested using a CSS fade in for slower loading views.

Some things to keep in mind. The more levels of views you embed inside each other the worse performance will be. Try to structure your app to avoid embedding views to more than 3 levels deep (general rule of thumb).

You can see a MANY fold performance improvement by making custom Perspective modules but that is a fairly involved development process involving react. I haven’t personally done it yet but one of my colleagues built a module that reduced CPU load 50 fold (it was crazy). His custom module replaced a multi-layer dynamically populated embedded flex repeater (repeaters inside repeaters).

It’s great that Ignition affords you the opportunity to opt out of the super user friendly tools and sub in highly optimized tools as needed to achieve the performance level your project demands. In the case of the tool my colleague is building it was a real game changer.
