
morda
17.07.2018
12:59:22
я использую react navigation и острую боль)

Denis
17.07.2018
12:59:54

Timur
17.07.2018
13:00:24

Alexander
17.07.2018
13:00:50
Artem, Timur, Vit спасибо!

Google

Ilya
17.07.2018
13:04:02

Timur
17.07.2018
13:06:33

Vladimir
17.07.2018
13:06:51
кто здесь?

Timur
17.07.2018
13:07:20

Nadirbek
17.07.2018
13:16:35

Timur
17.07.2018
13:16:50
а, на русском что ли, я всю голову сломал)

υρ∂ουя°°
17.07.2018
13:21:12
как отправлять данные / сообщения с помощью сокращения?

Timur
17.07.2018
13:21:58

υρ∂ουя°°
17.07.2018
13:24:26

Timur
17.07.2018
13:25:05
Enter data to server? Wtf is that suppose to mean?

υρ∂ουя°°
17.07.2018
13:26:09

Timur
17.07.2018
13:26:40

Play
17.07.2018
13:26:55

Google

υρ∂ουя°°
17.07.2018
13:28:09

Timur
17.07.2018
13:31:18

υρ∂ουя°°
17.07.2018
13:37:39

Timur
17.07.2018
13:41:05

υρ∂ουя°°
17.07.2018
13:42:51

Timur
17.07.2018
13:43:04

Aynur
17.07.2018
13:54:00
native-base header потерял тень, это нормально?
style elevation не помогает

Play
17.07.2018
17:04:44
Что в shadow thread происходит?

Gena
17.07.2018
18:19:16
Что в shadow thread происходит?
В shadow thread работает yoga, которая осуществляет построение лэйаута исходя из RN'овских css-подобных св-тв, результатом этого процесса становятся проставленные св-ва (условно) x, y и width, height для каждой ноды, дальше эти св-ва отправляются в UI тред и реальные UI элементы перепозиционируются. Вот так, очень примерно.

Play
17.07.2018
18:23:18

Nick
17.07.2018
18:24:57
как-то так вроде треды распределены

Play
17.07.2018
18:26:04

Nick
17.07.2018
18:26:59

tdesc
17.07.2018
18:27:02
Сколько интересно уже пожалело что взялось за rn

Play
17.07.2018
18:27:05

Google

Play
17.07.2018
18:29:10

Nick
17.07.2018
18:30:49
давайте только без срача rn/flutter

Play
17.07.2018
18:32:20


Gena
17.07.2018
18:32:39
Интересно, спасибо. Получается что react-native связан тремя потоками с нативным кодом?
Не совсем... один поток - это JS, в нем работает JSC и собственно выполняет js-код. Один UI - это основной поток приложения и в iOS и в Android многие операции с нативными API и почти все, касающиеся UI можно выполнять только из него (это так операционки эти устроены). В отдельном потоке выполняется лэйаут теневого дерева, вот эта часть могла бы выполняться в других местах теоретически, но сейчас её в отдельном потоке держат. Дальше есть ещё модули, они могут выполняться в своих потоках, так что на самом деле их больше.
И именно это устройство является причиной всего геммороя, что мы имеем. Но оно такое тоже не от хорошей жизни... это попытка избежать других проблем:
1. Отдельный JS-поток - позволяет долгому циклу в JS не блокировать UI
2. Отдельный теневой поток (лэйаут) - скорей всего родился из-за того, что yoga медленная, т.к. flex-layout по определению итеративный.
3. Отдельный UI-поток - требование осей.
4. Отдельные потоки для нативных модулей позволяют авторам модулей писать говнокод и не блокировать остальные части RN


Nick
17.07.2018
18:32:45

Play
17.07.2018
18:33:51

Gena
17.07.2018
18:33:58

Play
17.07.2018
18:37:54


Gena
17.07.2018
18:39:56
Я много времени убил пытаясь понять, как этот ворох безумного кода на самом деле работает ((
Почему, к примеру в нативе определения св-тв многих дублируются в теневую ноду и в нормальную. Почему я не могу просто взять и получить в JS ровно тот текст, что сейчас в TextInput'е... и т.д.
Или почему если вставить неудачно SafeAreaView, то всё начинает в цикле "дрожать" на экране )))

Stas
17.07.2018
18:42:07

Gena
17.07.2018
18:44:16
В ios специально это прописано: https://github.com/facebook/react-native/blob/0.56-stable/React/Base/RCTBridgeModule.h#L90
В Android так навскидку не скажу, но по моему тоже что-то подобное видел.

Stas
17.07.2018
18:45:00
В android долгие операции(в том числе говнокод) тоже нельзя на ui потоке выполнять - получите anr
https://developer.android.com/training/articles/perf-anr

Gena
17.07.2018
18:45:19
В старых версиях он в shadow-треде код модулей выполнял, сейчас создает под них свой тред под каждый.

Stas
17.07.2018
18:45:57
интересно, нужно углубиться.

Gena
17.07.2018
18:46:01

Stas
17.07.2018
18:46:30
непонятно. будет ли это актуально с приходом fabric
если они выпилят асинхронный bridge

Gena
17.07.2018
18:46:52
Там только это, для точности. Я для простоты их тредами называю, но в iOS, это dispatch queue - абстракция над тредами

Google

Gena
17.07.2018
18:47:13

Stas
17.07.2018
18:49:07
там возможно один тред пул на один queue?
и все модули юзают одну queue?
хз, не шарю в ios. 0)0

Gena
17.07.2018
18:49:49
К примеру, я не верю, что redux-подобные архитектуры будут хорошо работать в языках процедурных по самому своему смыслу, типа C++. Либо это будет бесконечное копирование данных из одного места в памяти в другое, что очень медленно на современных процессорах. Либо это будет бесконечный lock-contention, если ленивое копирование делать.

Admin
ERROR: S client not available

Stas
17.07.2018
18:51:12

Gena
17.07.2018
18:53:04
Ну вот если бы для реализации бриджа и нативного кодинга использовался бы hackell, или ещё что, специально для оптимизации functional-кода предназначенное, то да... можно было бы посмотреть, что получится... А с C++... в общем, не буду никого расстраивать своими ожиданиями )))

Stas
17.07.2018
18:53:18

Gena
17.07.2018
18:53:58
Я мало знаю про фабрик, только то, что у facebook в блоге написано и то, что здесь Валентин постил.

?
17.07.2018
18:54:11

Gena
17.07.2018
18:54:47
Там было несколько причин перехода на fabric: redux-like (и immutable), синхронные вызовы в js...
да )
Ещё типа медленный dynamic dispatch (Очевидно намек на java и ObjC)
Но я знаю другое: C++ один из самых, блин, сложных языков из широко используемых... он реально огромен... и на нем очень легко писать плохой код.

Stas
17.07.2018
18:58:27
но ведь нет альтернатив
непривычно в этом чате читать интересные вещи, а не про то, как очередной корявый npm пакет интегрировать в проект

tdesc
17.07.2018
19:05:56

Stas
17.07.2018
19:06:57

Google

Stas
17.07.2018
19:07:48
было бы конечно смешно. фейсбук нанимает отдел хаскелистов переписывать react-native с крестов.

Arthur
17.07.2018
19:13:46
было бы проще сделать транслятор из js в С++ и все были бы счастливы

Igor
17.07.2018
19:27:02

tdesc
17.07.2018
19:36:26

Arthur
17.07.2018
19:38:32

Алексей
17.07.2018
20:02:56

Gena
17.07.2018
20:04:29
а зачем копировать?)
Можно не копировать (копировать лениво), но тогда надо защиту от одновременного доступа из разных потоков делать и это будет медленно )

Алексей
17.07.2018
20:05:00
так есть же иммутабельные структуры, они как раз для такого и предназначены

tdesc
17.07.2018
20:05:09
Коллекции на хешах быстро пересобираются
Специально оптимизируют жеж

Gena
17.07.2018
20:05:48

Алексей
17.07.2018
20:06:41
так мы про Fabric говорим что ли) я чет запутался в вашем диалоге)


Gena
17.07.2018
20:07:39
Коллекции на хешах быстро пересобираются
Там C++, мы когда-то пытались на нем google хеши использовать... типа самые быстрые... в общем да, быстро, но с кучей подводных камней, типа вырожденных случаев для которых всё становится медленным и т.п.
Вообще, с моей точки зрения, единственная архитектурная проблема RN в настоящем его виде (да, есть куча не архитектурных типа багов, платформозависимых компонентов, отсутствия некоторых критических компонентов), так вот, единственная настоящая проблема сейчас, это невозможность синхронного вызовов из натива в JS. Но это вообще не про фабрик, насколько я вижу... это про однопоточность JS... не проблема дернуть что-то туда из натива, JSC это позволяет, проблема, что тебе придется ждать, пока доработает текущий цикл JS кода... а потом отработает твой вызов. Это займет непредсказуемое время, которое твой поток будет ждать, если это UI-поток - всё зависнет на это время, если это layout - не будет лэйаута, если это твой нативный модуль, в нем не будет ничего происходить...
И в текущем дизайне и вообще в любом другом дизайне без модификации JS api, я решения этой проблемы не вижу... возможно оно есть где-то в районе вывода в JS чего-то похожего на Web Workers... не знаю...
Примеры проявления этой проблемы: невозможность произвольно управлять анимациями из JS, опаздывающий measure и onLayout, проблемы с управляемым TextInput, кривая система респондеров и хендлинга тачей с огромным кол-вом багов... всякие KeyboardAvoidingView и SafeAreaView, проблема с лэйаутом кешируемых изображений и прочее...


Vladimir
17.07.2018
20:36:49
Да решение то на поверхности - блокировать UI тред в нативной части. Но тогда будет очень сложно хвастаться 60fps UI, потому что вся ответственность за конечный перфоманс ляжет на девелоперов. Скорее всего добавят апи с синхронным вызовом и огромным предупреждением, что ребят, используйте на свой страх и риск.