Lists are where re-render costs multiply, and List Performance Checklist's checklist still applies: stable keyExtractor and renderItem, memoized rows, getItemLayout for fixed heights, a smaller windowSize on low-end phones, and FlashList 7,238 when blank cells appear during fast scrolling. The profile in Components and Profiler adds one BookNest-specific item: NativeWind's className runs through a CssInterop wrapper on every render, and the demo's CssInterop.ScrollView alone took 43.8 ms of a 151 ms commit in the debug build. BookRow, rendered hundreds of times in the catalog, uses StyleSheet.create(), whose styles are plain objects created once; keep className for screens that render rarely, such as the cart, and profile before converting more.
Images cost memory more than time: a decoded bitmap takes width x height x 4 bytes, so a 1,000 x 1,500 cover shown as a 52 x 78 thumbnail holds 6 MB. Serve covers at display size, and use expo-image 6,418 (expo-image), which caches them and, with recyclingKey, keeps a recycled cell from flashing the previous cover.