Skip to content

Instantly share code, notes, and snippets.

View Skyyo's full-sized avatar
🇺🇦

Denis Rudenko Skyyo

🇺🇦
View GitHub Profile
@Skyyo
Skyyo / perf_snippet_12.kt
Created October 2, 2022 14:41
perf_snippet_12
@Composable
fun StateReadsInlinedComposablesScreen() {
var count by remember { mutableStateOf(0) }
Column {
Text(text = "count: $count")
Button(onClick = { count++ }) {
Text(text = "count++")
}
}
@Skyyo
Skyyo / perf_snippet_11.kt
Created October 2, 2022 14:11
perf_snippet_11
@Composable
private fun WrappedLazyColumnApproach2(items: ImmutableList<Int>) {
LazyColumn {
items(items = items, key = { item -> item }) { item ->
Text(text = "item $item")
}
}
}
@Skyyo
Skyyo / perf_snippet_10.kt
Last active October 7, 2022 19:49
perf_snippet_10
@Immutable
class ImmutableListWrapper(val items: List<Int>)
// optimized using @Immutable marked ImmutableWrapper
@Composable
private fun WrappedLazyColumnApproach1(wrapper: ImmutableListWrapper) {
LazyColumn {
items(items = wrapper.items, key = { item -> item }) { item ->
Text(text = "item $item")
}
@Skyyo
Skyyo / perf_snippet_9.kt
Created October 2, 2022 14:03
perf_snippet_9
@Composable
fun UnstableListScreen() {
val items = remember { (0..100).map { it } }
Box {
WrappedLazyColumn(items)
}
}
@Composable
private fun WrappedLazyColumn(items: List<Int>) {
@Skyyo
Skyyo / perf_snippet_8.kt
Created October 2, 2022 13:35
perf_snippet_8
@Composable
fun UnstableLambdaScreen(viewModel: TypicalViewModel = hiltViewModel()) {
val focusRequester = LocalFocusManager.current
val onNameEnteredClick: (value: String) -> Unit = remember {
return@remember viewModel::onNameEntered
}
val clearFocus = remember { { focusRequester.clearFocus() } }
Column {
// stable lambdas, skippable button
@Skyyo
Skyyo / perf_snippet_7.kt
Created October 2, 2022 13:22
perf_snippet_7
@Composable
fun UnstableLambdaScreen(viewModel: TypicalViewModel = hiltViewModel()) {
Column {
// stable
Button(onClick = viewModel::onContinueClick) {
Text(text = "button with stable lambda")
}
}
}
@Skyyo
Skyyo / perf_snippet_6.kt
Created October 2, 2022 13:10
perf_snippet_6
@Composable
fun UnstableLambdaScreen() {
val focusRequester = LocalFocusManager.current
Column {
// unstable lambda results in unskippable Button
Button(onClick = { focusRequester.clearFocus() }) {
Text(text = "button with unstable lambda")
}
}
@Skyyo
Skyyo / perf_snippet_5.kt
Created October 2, 2022 12:49
perf_snippet_5
@Composable
fun UnstableLambdaScreen(viewModel: TypicalViewModel = hiltViewModel()) {
Column {
// button is not skippable due to usage of viewModel.onContinueClick()
Button(onClick = { viewModel.onContinueClick() }) {
Text(text = "button with unstable lambda")
}
}
}
@Skyyo
Skyyo / perf_snippet_4.kt
Last active October 2, 2022 12:29
perf_snippet_4
@Immutable
data class ImmutableUserWrapper(val user: User)
@Composable
private fun UserDetails(wrapper: ImmutableUserWrapper) {
Text(text = "name: ${wrapper.user.name} id:${wrapper.user.id}")
}
@Skyyo
Skyyo / perf_snippet_3.kt
Created October 2, 2022 12:22
perf_snippet_3
// not skippable if User is unstable
@Composable
private fun UserDetails(user: User) {
Text(text = "name: ${user.name} id:${user.id}")
}
// skippable even of User is unstable
@Composable
private fun UserDetails(id: Long, name: String) {
Text(text = "name: $name id: $id")