A table view that scrolls fine with 10 rows can lock up with 137 rows if the data changes about 30 times a second. That is the story behind a short first-person account by Suprie, a Senior iOS Engineer, on DEV Community. It describes a real-time trading screen that froze at peak load. The fix wasn’t a new framework. It was finding where repeated “small” work had piled up. This article walks through that account and what it does and doesn’t show.
What happened
The author’s WebSocket-driven feature first showed 10 price levels. It was later expanded to show every available level, which is between 80 and 137 depending on the stock. At peak trading hours the view froze and users couldn’t scroll. The problem appeared only under peak load, so it got past QA. The page is dated “Sep 27”. The opened page shows no year, and search-result metadata gives 2026.
| # | Preview | Product | Price | |
|---|---|---|---|---|
| 1 |
|
Apple iPhone 14, 128GB, Midnight - Unlocked (Renewed) | $300.00 | Buy on Amazon |
| 2 |
|
Apple iPhone 16, 128GB, Pink - Unlocked (Renewed) | $587.52 | Buy on Amazon |
| 3 |
|
Apple iPhone 15, 128GB, Black - Unlocked (Renewed) | $408.99 | Buy on Amazon |
| 4 |
|
Apple iPhone 13, 128GB, Midnight - Unlocked (Renewed) | Unlocked | $262.00 | Buy on Amazon |
| 5 |
|
Apple iPhone 16e, 128GB, Black - Unlocked (Renewed) | $387.73 | Buy on Amazon |
As an Amazon Associate I earn from qualifying purchases.
The author gives an illustrative before-and-after workload: 5 levels at 30 updates per second is manageable, while 100 levels at 30 updates per second produced what the author calls “UI death”. This is the author’s description of the workload, not a measured benchmark.
Free tools Windows power users keep installed
One-click scans. No signup required.
Attempt one: Diffable Data Source
The author first used Diffable Data Source with UUID-backed items. The stream, however, delivered the entire list of price levels on every update, not a snapshot of only the changed items. Diffing a full replacement against the previous list was extra work. In this case the author found that tableView.reloadData() was faster.
#1 Best Overall
- This phone is unlocked and compatible with any carrier of choice on GSM and CDMA networks (e.g. AT&T, T-Mobile, Sprint, Verizon, US Cellular, Cricket, Metro, Tracfone, Mint Mobile, etc.).
- Please check with your carrier to verify compatibility.
- The device does not come with headphones or a SIM card. It does include a generic (Mfi certified) charging cable.
- Tested for battery health and guaranteed to have a minimum battery capacity of 80%.
The author’s summary of the design lesson: “diffable data source is great for partial updates, not full replacements.” That is advice drawn from this one case. It doesn’t show that reloadData() is generally better.
The real bottleneck: repeated work on the main thread
Profiling pointed elsewhere. Computed properties were running on the main thread. They colored up and down prices, formatted numbers and handled localization. Each is cheap for one row. Multiplied across 80 to 137 rows and about 30 updates a second, they were not.
Rank #2
- 6.1" Super Retina XDR OLED, HDR10, Dolby Vision, 1000nits (typ), 2000nits (HBM), 2556x1179px at 460ppi, 3561mAh Battery
- 128GB 8GB RAM, Apple A18 (3nm), Hexa-core (2x4.04 GHz + 4x2.20 GHz), Apple GPU 5-core, 16‑core Neural Engine
- Rear camera: 48MP, f/1.6, wide + 12MP, f/2.2, ultrawide, Front Camera: 12MP, f/1.9, wide, iOS 18, upgradable to iOS 18.5
- 4G LTE: 1/2/3/4/5/7/8/12/13/14/17/18/19/20/25/26/28/29/30/32/34/38/39/40/41/42/48/53/66/71, 5G: n1/2/3/5/7/8/12/14/20/25/26/28/29/30/38/40/41/48/53/66/70/71/75/76/77/78/79 - Dual eSIM
- Unlocked for freedom to choose your carrier. Compatible with both GSM & CDMA networks. The phone is unlocked to work with all GSM Carriers & CDMA Carriers Including AT&T, T-Mobile, Verizon, Sprint., Etc.
The fix was to do those calculations on background threads while converting the WebSocket response into view data. The view then only read values that were already prepared. The author reports that scrolling stayed smooth during peak trading hours after this change.
Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Clear out junk files and repair common Windows errors3Scan for outdated or missing drivers - takes under a minuteFactors that decide whether a screen like this holds up
| Factor | Question to ask | In this account |
|---|---|---|
| Update shape | Does the server send partial changes or complete replacements? | Complete lists, so diffing added work |
| Work per update | How much formatting, coloring or localization runs per row? | Substantial, and on the main thread |
| Frequency | How many updates arrive per second? | About 30 per second in the author’s example |
| Thread | Is repeated preparation done on the main thread? | Moved to background before building view data |
What the account does not establish
- It is a single short account. It gives no reproducible code, device or build configuration, profiler trace or timing numbers.
- No external study, controlled benchmark or independent test backs it.
- The figures (10 levels, 80–137 levels, 5 versus 100 levels at 30 updates per second) describe this workload only. They aren’t industry statistics.
Takeaways for your own screen
- Count both rows and update frequency. Cost scales with the product of the two.
- Check what your data source actually sends. If every update is a full replacement, an incremental diff may not pay for itself, so measure it.
- Profile with realistic peak load, not the quiet case QA tends to see.
- Move formatting, color decisions and localization out of cell and view code. Compute them off the main thread when you build view models.
The author’s own line sums it up: “‘Cheap’ operations aren’t cheap at scale – profile before you assume.”
Quick Recap
Best Value
- 6.1" Super Retina XDR OLED, HDR10, 800 nits (HBM), 1200 nits (peak), 2532x1170px at 460ppi, 4005mAh Battery
- 8GB RAM, Apple A18 6-core CPU (2 performance + 4 efficiency cores), Apple GPU 4-core, 16‑core Neural Engine
- Rear camera: 48MP, f/1.6, wide, Front Camera: 12MP, f/1.9, wide, iOS 18.3.1, upgradable to iOS 18.5
- Connectivity: Global 4G LTE, Sub-6 GHz 5G, LTE, Wi-Fi 6, Bluetooth 5.3, NFC, USB-C, Wireless Charging (7.5W). (does not have mmWave 5G or MagSafe or physical SIM card) - Dual eSIM Only
- Unlocked for freedom to choose your carrier. Compatible with both GSM & CDMA networks. The phone is unlocked to work with all GSM Carriers & CDMA Carriers Including AT&T, T-Mobile, Verizon, Straight Talk., Etc.
Rank #4
- This pre-owned product is not Apple certified, but has been professionally inspected, tested and cleaned by Amazon-qualified suppliers.
- There will be no visible cosmetic imperfections when held at an arm’s length.
- This product is eligible for a replacement or refund within 90 days of receipt if you are not satisfied.
- Product may come in generic Box.
Rank #3
- 6.1inch Super Retina XDR display. Aluminum with color-infused glass back. Ring/Silent switch
- Dynamic Island. A magical way to interact with iPhone. A16 Bionic chip with 5-core GPU
- Advanced dual-camera system. 48MP Main | Ultra Wide. Super-high-resolution photos (24MP and 48MP). Next-generation portraits with Focus and Depth Control. 4X optical zoom range
- Emergency SOS via satellite. Crash Detection. Roadside Assistance via satellite
- Up to 26 hours video playback. USB C, Supports USB 2. Face ID
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




