Подписка на Observable или Driver занимает слишком много времени в RxSwift

Я заметил, что RxSwift тормозит приложение, я не знаю, это моя вина или фреймворк.

У меня есть привязка внутри пользовательского класса UICollectionViewCell, который запускается для настройки ячейки. Например, эта часть кода:

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 мс.


person Nominalista    schedule 07.01.2018    source источник
comment
Я хотел бы знать, как вы измерили задержку!   -  person iWheelBuy    schedule 07.01.2018
comment
Я использую CACurrentMediaTime(), я знаю, что это не лучший способ, но я просто помещаю код внутри экземпляра одного CACurrentMediaTime() и второго CACurrentMediaTime(), а затем просто вычитаю друг друга. Я думаю, это не так уж плохо, потому что вычитание между обычными частями кода равно 0. Кроме того, я проверяю это, потому что мой UICollectionView заикается.   -  person Nominalista    schedule 07.01.2018
comment
Я только что измерил с помощью CACurrentMediaTime, и задержка составляет 0,06 миллисекунды на основном. и 3 миллисекунды при размещении в фоновом режиме и прослушивании на основном.   -  person iWheelBuy    schedule 07.01.2018
comment
Вы имеете в виду, что вы измерили эти части кода и задержка составила всего 0,06 миллисекунды? Я не знаю, что об этом думать...   -  person Nominalista    schedule 07.01.2018
comment
завтра выложу код   -  person iWheelBuy    schedule 07.01.2018
comment
Я думаю, что нашел решение, см. мой ответ.   -  person Nominalista    schedule 07.01.2018


Ответы (1)


Не могу поверить, но я обновил RxSwift и RxCocoa до 4.1.0 с 4.0 внутри своего Podfile, и теперь он работает отлично.

Методы из вопроса теперь занимают около 0-1 мс.

Надеюсь, что этот вопрос поможет другим, или, может быть, кто-нибудь узнает, почему я столкнулся с таким поведением.

person Nominalista    schedule 07.01.2018
comment
Очень интересно! Это хороший способ обновить/понизить версию модуля и сравнить поведение. - person iWheelBuy; 07.01.2018