Here is the gist:
https://gist.github.com/matklad/d1ad3375945ad21de97aTo clarify, it's a toy app, and I don't have noticeable performance problems at the moment.
App state is a single atom that consists of several fields and a timer. The latter is my main concern, because it ticks every 200 ms and it seems wasteful to call render functions for the entire app, while the only thing which needs updating is a small loader.
There are two files in the gist ('works.cljs' and 'broken.cljs') because I hit a bug (or at least an unexpected behaviour) =)
The natural design is to split the app into several views(`render-result` and `render-loading`) responsible for subsets of app state. This boils down to binding several render functions to the app atom (and this is the place, where lenses can help performance). However, only the last binding seems active (marked ;;BUG in the gist) =(
So the working solution is to combine all render functions into one =)