DEV Community

Aritra Das
Aritra Das

Posted on

1

Performance Optimization of LazyColumn in Jetpack Compose

So, showing the list of items is common in many applications. Sometimes when we scroll through the list we feel the laggy behaviour and it’s too bad for UX. In Jetpack Compose we use LazyColumn to show the items Verticaly and LazyRow to show items Horizontally.

While using LazyColumn to show items we face some laggy behaviour, so let's learn how can we fix that laggy behaviour and make the LazyColumn as smooth as possible.

1. Try to test it on release mode

Don’t worry if your app is laggy in debugging. It’s completely fine. Just create the APK in release mode (Build -> Generated Signed Bundle/APK), which might solve your problem. This happens because when in debugging, Compose translates bytecode in runtime using JIT, and make sure you have R8 compiler enabled and use precompiled binary/baseline profile.

2. Set a key for your items

So, what does this key parameter do, so the key composable allows the compose compiler to identify each composable as distinct and eliminate the wasteful recompositions. The key must be unique to the list otherwise it will crash.

This works almost like DiffUtil work in RecyclerView in XML and we know how much improvement is increased in performance of RecyclerView get with DiffUtil.

Image description

3. Use remember{ } block

The remember block in Jetpack Compose ensures that the state variable persists across recompositions, preventing unnecessary recompositions and preserving the state during configuration changes. This is crucial for optimizing performance and maintaining a consistent user interface, especially when dealing with expensive operations or fetching data, as it avoids redundant computations and network calls on each recomposition.

Image description

In this easy example, remember is used to store the list of items, ensuring that it remains unchanged during recompositions of the LazyColumn. This helps optimize performance by preventing unnecessary recomputations of the item list on each UI redraw. The generateItems function simulates a list of strings for demonstration purposes.

4. Use lightweight/compressed images in LazyColumn

Lag issues in LazyColumn are often attributed to the use of heavy images, making it imperative to choose images that are optimized for quick rendering. While addressing this concern, incorporating image caching libraries such as Coil can be a valuable strategy. These libraries efficiently manage the loading and caching of images, contributing to a smoother user experience.

5. Use @Stabe and @Immutable on data class

The annotations @Stable and @Immutable are used to tell compose that the data class is stable and it will not change.

Image description

So, by adding these annotations you can tell compose that the data class is stable, but the most important point is it doesn’t make any class Stable/Immutable on it own. Incorrect annotating a class could cause recomposition.

Heroku

Amplify your impact where it matters most — building exceptional apps.

Leave the infrastructure headaches to us, while you focus on pushing boundaries, realizing your vision, and making a lasting impression on your users.

Get Started

Top comments (0)

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

👋 Kindness is contagious

Explore a trove of insights in this engaging article, celebrated within our welcoming DEV Community. Developers from every background are invited to join and enhance our shared wisdom.

A genuine "thank you" can truly uplift someone’s day. Feel free to express your gratitude in the comments below!

On DEV, our collective exchange of knowledge lightens the road ahead and strengthens our community bonds. Found something valuable here? A small thank you to the author can make a big difference.

Okay