在 RxSwift 中订阅 Observable 或 Driver 花费的时间太长
Subscribing to Observable or Driver takes too long in RxSwift
我注意到 RxSwift 拖慢了应用程序,我不知道这是我的错还是框架的问题。
我在 UICollectionViewCell 的自定义 class 内部进行了绑定,它是为配置单元格而触发的。例如这部分代码:
viewModel.observableIsHighlighted.asDriver().drive(onNext: { isHighlighted in
// do nothing
}).disposed(by: disposeBag)
viewModel.observableIsMarked.asDriver().drive(onNext: { isMarked in
// do nothing
}).disposed(by: disposeBag)
其中 observableIsHighlighted
、observableIsMarked
只是 BehaviorRelay<Bool>
,大约需要 16-20 毫秒,这对于 UICollectionView 当然是不可接受的。
另一部分是这样的:
imageViewTapGestureRecognizer.rx.event.bind(onNext: { _ in
// do nothing
}).disposed(by: disposeBag)
大约需要 12 毫秒。
问题
是我的方法有问题还是 RxSwift 中的绑定对于 UICollectionView
这样的视图不准确?
当然,我假设 RxSwift 中的绑定正是针对 UICollectionView
.
之类的东西
编辑
我如何测量时间?
我用 CACurrentMediaTime()
乘以 1000
。我知道这是最好的方法,但是非常简单的方法总是需要 0 毫秒,因此建议应该改进 10-20 毫秒的方法。
我不敢相信,但我在我的 Podfile
中将 RxSwift
和 RxCocoa
从 4.0
更新为 4.1.0
,现在它可以完美运行了。
问题中的方法现在大约需要 0-1 毫秒。
希望这个问题能对其他人有所帮助,或者也许有人会知道我为什么会遇到这种行为。
我注意到 RxSwift 拖慢了应用程序,我不知道这是我的错还是框架的问题。
我在 UICollectionViewCell 的自定义 class 内部进行了绑定,它是为配置单元格而触发的。例如这部分代码:
viewModel.observableIsHighlighted.asDriver().drive(onNext: { isHighlighted in
// do nothing
}).disposed(by: disposeBag)
viewModel.observableIsMarked.asDriver().drive(onNext: { isMarked in
// do nothing
}).disposed(by: disposeBag)
其中 observableIsHighlighted
、observableIsMarked
只是 BehaviorRelay<Bool>
,大约需要 16-20 毫秒,这对于 UICollectionView 当然是不可接受的。
另一部分是这样的:
imageViewTapGestureRecognizer.rx.event.bind(onNext: { _ in
// do nothing
}).disposed(by: disposeBag)
大约需要 12 毫秒。
问题
是我的方法有问题还是 RxSwift 中的绑定对于 UICollectionView
这样的视图不准确?
当然,我假设 RxSwift 中的绑定正是针对 UICollectionView
.
编辑
我如何测量时间?
我用 CACurrentMediaTime()
乘以 1000
。我知道这是最好的方法,但是非常简单的方法总是需要 0 毫秒,因此建议应该改进 10-20 毫秒的方法。
我不敢相信,但我在我的 Podfile
中将 RxSwift
和 RxCocoa
从 4.0
更新为 4.1.0
,现在它可以完美运行了。
问题中的方法现在大约需要 0-1 毫秒。
希望这个问题能对其他人有所帮助,或者也许有人会知道我为什么会遇到这种行为。