Compose bakes this into the framework at the function level. By default, if the function parameters are immutable and the function doesn't return a value (basically emits compositions by calling other Composable functions) the entire composition is memoized and the function can be skipped.
The tricky part is knowing what is immutable, because standard JVM collections are not.
The tricky part is knowing what is immutable, because standard JVM collections are not.