Kol describes a “Pepsi Challenge”: build the same simple app in React Native and natively, then see whether users can tell them apart. He says React Native was close but still distinguishable in areas such as animations, navigation, gestures, and interactions. At Wix, flicker when pushing screens and scrolling lists showed that gap in practice.
Going Over The Speed Limit Synchronous Rendering in React Native
Speaker
Tal Kol of Wix presents at a Callstack tech talk about synchronous rendering in React Native and how it could reduce flicker in navigation and lists.
Kol explains that React Native’s JavaScript and native realms communicate asynchronously over a bridge. When scrolling reveals an uninitialized row, the native side must wait for JavaScript to handle the scroll event, render the row, and send view commands back. That delay can leave a blank area briefly; native lists avoid it by creating and drawing rows synchronously.
Kol proposes a synchronous root view for navigation and lists, with a registry that stores a component’s native view instructions during app initialization. Later, native code could create or update views from those stored instructions without waiting for the bridge. The setup moves some work to startup so screen content or list rows can appear immediately.
The proof of concept records UIManager commands when React renders a template component. Kol describes temporarily replacing UIManager functions with stubs, saving their arguments as a JSON recipe, and executing those commands natively when a synchronous view is needed. This approach only supports declarative components: prop changes cannot add or remove parts of the view tree.
Kol says synchronous rendering excludes JavaScript business logic inside the component and requires its view structure to stay fixed. For a cell that conditionally shows “Hi” or “goodbye,” he suggests preparing display props such as `flex` and `none` in the list’s data transformation. He presents a synchronous ListView proof of concept on Wix’s GitHub account.
Takeaways
- Compare React Native with a native version of the same app to find user-visible performance gaps.
- Bridge delays can leave newly revealed list rows blank while JavaScript prepares their views.
- A synchronous rendering design can trade a small amount of startup work for faster screen and row creation.
- Keep components on the synchronous path declarative, with a fixed view tree and logic handled before rendering.
- Transform data into presentation props, such as `flex` and `none`, when conditional rendering would require JavaScript logic inside a cell.
Mentioned in this talk
Search inside this talk
What was claimed 9
- uses
Wix uses React Native
The Wix app is written 100% in React Native“The Wix app ... is written 100% in React Native”
YouTube Verified2 sources· Talk
- metric
Wix: Over 100 million users
“we have over 100 million users”
YouTube Unverified1 source· Talk
- works at
“my name is Tal, and I work at Wix”
YouTube Unverified1 source· Talk
- featureNative Navigation: Native navigation library for React Native
“one from Airbnb, Native Navigation”
YouTube Unverified1 source· Talk
- featureReact Native Navigation: Native navigation library for React Native
“one from Wix, React Native Navigation”
YouTube Unverified1 source· Talk
- featureReact Native: Communication between JavaScript and native realms is asynchronous over the bridge
“You queue it, and the other side keeps doing other things”
YouTube Unverified1 source· Talk
- featuresynchronous rendering: Reuses native view command recipes to create or update views without going over the JavaScript bridge
“creation and updates originating from the native side are native commands”
YouTube Unverified1 source· Talk
- featuresynchronous rendering: Works only for declarative components whose prop updates do not change the component tree
“this only works for declarative components, components that don’t have any JavaScript code inside”
YouTube Unverified1 source· Talk
- built
Wix built synchronous rendering
proof of concept for a synchronous ListView“a proof of concept ... with a synchronous ListView”
YouTube Unverified1 source· Talk





