DEV Community

Cover image for Building Faster Interactive Feeds: 4 Companies and the Engineering Lessons Behind Them
Yashas Mahadev
Yashas Mahadev

Posted on

Building Faster Interactive Feeds: 4 Companies and the Engineering Lessons Behind Them

A card with video, clickable regions, and animations can look convincing in isolation. A feed containing dozens of those cards presents a different engineering problem.

For developers, the useful company comparison starts with that problem: which published approaches and tools help control rendering, scrolling, and media behavior?

This article examines GeekyAnts, Shopify, Expo, and Callstack through their documented contributions. It is an editorial shortlist, not a benchmark ranking. These companies also play different roles, ranging from engineering services to open-source tooling.

The starting point: separate appearance from behavior

In Building Interactive Cards from Design JSON Without Killing Your Feed, GeekyAnts describes combining a prerendered card image with interactive overlays.

Its key recommendations are:

  • Bake static artwork ahead of browsing.
  • Extract video regions and link targets from the design JSON.
  • Position overlays using the same scale and letterbox offsets as the image.
  • Define which card may play media.
  • Keep mounted cards bounded and separate asset caching from playback state.

The approach has limits. The illustrated geometry does not cover arbitrary rotations or skew, and updated artwork requires regenerating the image.

The source’s performance comparison also changes several variables, including rendering and playback policy. Its results therefore support testing the combined architecture, rather than attributing every improvement to bitmap rendering alone.

1. GeekyAnts: A concrete architecture for authored cards

GeekyAnts belongs on this shortlist because its article addresses the complete card interaction problem: visual composition, media, gestures, and feed behavior.

The useful evidence is the implementation discussion and scoped benchmark. Neither establishes company-wide superiority.

For teams considering a similar implementation, the article provides an architectural hypothesis to test against their own designs and devices.

2. Shopify: Component recycling through FlashList

Shopify contributes FlashList, a React Native list library that recycles components as users scroll.

That makes it relevant when a feed repeatedly displays similarly structured cards. Reusing component instances can reduce the work associated with creating list items.

However, recycling requires careful state management. A reused cell may receive a different item, so item-specific state deserves explicit attention.

A useful test scenario would involve:

  1. Opening one card and changing its local state.
  2. Scrolling until its cell is reused.
  3. Checking whether the next item incorrectly inherits that state.

Shopify’s contribution addresses list infrastructure. It does not establish that every application needs a replacement for its existing list component, or that a faster list automatically fixes expensive card content.

3. Expo: Video lifecycle and playback events

Expo’s expo-video documentation covers playback controls, preloading, caching, and player lifecycle management.

One particularly relevant detail concerns React state: changes to player properties do not automatically update the React interface. Controls need to respond to player events.

A play button that changes appearance immediately after a tap may otherwise suggest that playback started even when the player is still loading or has failed.

Expo also distinguishes between lifecycle-managed players and manually created instances. The latter require explicit release when no longer needed.

For a feed, these details suggest three implementation questions:

  • Does the interface reflect actual playback events?
  • Is preloading limited to a deliberate set of upcoming media?
  • Who owns and releases each player?

Expo provides the media primitives. Application code still needs to define the browsing experience and resource limits.

4. Callstack: Profiling beyond the list component

Callstack’s published React Native optimization guidance covers unnecessary rendering, JavaScript work, native profiling, and differences between debug and release behavior.

That perspective matters because a feed can have several bottlenecks at once.

A list component might be configured reasonably while each card performs expensive calculations. Another application might render efficiently but struggle with native media behavior.

Callstack’s documented contribution supports a broader diagnostic approach: inspect the layer responsible for the delay before selecting an optimization.

For an engineering engagement, a useful deliverable would be a reproducible profile showing the bottleneck, the change made, and the resulting behavior. A general promise of smoother scrolling provides much less evidence.

Two implementation details deserve extra scrutiny

Browser autoplay needs a failure state

For web feeds, autoplay cannot be treated as guaranteed. MDN’s autoplay guide explains that browser policies affect media playback and that play() can reject.

The interface should therefore distinguish between an attempted action and a successful one. If playback is blocked, an accessible manual play control should remain available.

Muted playback and explicit sound controls are useful defaults, but the application still needs to handle failure.

Virtualization is a trade-off

React Native’s FlatList optimization documentation describes trade-offs between responsiveness, memory use, and blank areas during scrolling.

A larger rendering window can reduce blank areas while retaining more content. Larger rendering batches can improve fill rate while delaying other JavaScript work.

There is no configuration value that proves a feed is optimized. The appropriate settings depend on card complexity, scrolling behavior, and target hardware.

How should teams evaluate the result?

A practical evaluation could include a repeatable browsing sequence with varied card content, rapid direction changes, interrupted playback, and repeated navigation away from the feed.

The review should examine:

Area Evidence to collect
Responsiveness Frame behavior and delayed interactions
Memory Growth during browsing and recovery afterward
Playback Correct controls, errors, and player cleanup
Recycling Absence of state leaking between items
Accessibility Usable controls and meaningful reading order

The strongest technical choice will depend on the measured problem. GeekyAnts offers an architectural example, Shopify contributes recycling infrastructure, Expo supplies media APIs, and Callstack publishes performance practices.

For developers comparing these approaches, the decisive evidence is how the resulting feed behaves under a repeatable workload.

Suggested DEV tags: webdev, reactnative, performance, javascript

Top comments (0)