obsidiansystems / obelisk

Functional reactive web and mobile applications, with batteries included.
https://reflex-frp.org
BSD 3-Clause "New" or "Revised" License
960 stars 107 forks source link

Investigate solutions to eval lag at handoff #926

Open madeline-os opened 2 years ago

madeline-os commented 2 years ago

When the global obelisk command is invoked in a user project, it will hand-off execution to the project's pinned obelisk. This is essential for users who work with multiple projects which may be on drastically different versions obelisk. However, we have to evaluate the obelisk implementation thunk to determine which obelisk to hand-off to. This is extremely frustrating.

Nix can't cache evaluation. It can cache it for flakes, but obelisk has no flake integration right now. It is not clear what would need to be done there, or if it is desirable. How feasible is it to extend the caching for flakes to pure nix expressions in general? This is an investigation of our upstream dependencies and their priorities.

Can we simply optimize the amount of time required to do the evaluation? Why does it take so long? Maybe we can just make it fast enough that it doesn't matter.

We could also do our own dirty caching tricks...

madeline-os commented 2 years ago

In #429 , the fact that evaluation result is not served from cache causes a massive exaggeration of this problem to occur.

MaxHearnden commented 1 year ago

A solution similar to https://github.com/obsidiansystems/nix-thunk/pull/47 could improve the caching

dalaing commented 9 months ago

I forked obelisk to use that nix-thunk change, and it got rid of the message about caching, although it didn't do much for the startup lag.