mirror of
https://github.com/status-im/react-native.git
synced 2025-01-31 11:44:55 +00:00
b03446e27e
Summary: @public `RCTUIManager` would traverse the whole view hierarchy every time there was any call from JS to Native to call `reactBridgeDidFinishTransaction` on the views that would respond to it. This is a deprecated method that is only implemented by 3 classes, so for now we keep track of these views as they're created and just iterate through them on updates. Test Plan: > NOTE: I tested this on UIExplorer, since the internally none of the classes are used I tried to keep it simple, so I added the following to the old code: ``` __block NSUInteger count = 0; UIView *rootView = _viewRegistry[rootViewTag]; RCTTraverseViewNodes(rootView, ^(id<RCTViewNodeProtocol> view) { count ++; if ([view respondsToSelector:@selector(reactBridgeDidFinishTransaction)]) { [view reactBridgeDidFinishTransaction]; } }); NSLog(@"Views iterated: %zd", count); ``` The output after scrolling 20 sections of the `<ListView> - Paging` example was ``` 2015-06-01 00:47:07.351 UIExplorer[67675:1709506] Views iterated: 1549 ``` *every frame* After the change ``` for (id<RCTViewNodeProtocol> node in _bridgeTransactionListeners) { [node reactBridgeDidFinishTransaction]; } NSLog(@"Views iterated: %zd", _bridgeTransactionListeners.count); ``` ``` 2015-06-01 00:51:23.715 UIExplorer[70355:1716465] Views iterated: 3 ``` No matter how many pages are loaded, the output is always 3.