Size: a a a

React — русскоговорящее сообщество

2020 July 06

EM

Eugene Maltsev in React — русскоговорящее сообщество
А что кстати по поводу сборки реакта с rollup ?🤔
В svelte комунити - rollup вроде как основной сборщик.
источник

c⁣

createStore<🦉>... in React — русскоговорящее сообщество
Eugene Maltsev
А что кстати по поводу сборки реакта с rollup ?🤔
В svelte комунити - rollup вроде как основной сборщик.
Парсель на роллапе. Но мне не зашло. Хотя я слышал много кулстори
источник

c⁣

createStore<🦉>... in React — русскоговорящее сообщество
Богдан
Тот подход который выбрала команда реакта для реализации файберов не является единственно возможным. Мне кажется у них немного сбились критерии.

На мой взгляд можно было бы сделать все намного проще без полного переписывания движка и без появления различных проблем со стейт-менеджерами  и нюансов с консистентностью (когда чуть ли не с каждым стейт-менеджером появляются проблемы касательно работы в конкарент-моде или взять хотя бы обычные ref-ы когда туда записывают значения).

Суть в чем - в реакте решили переписать старый движок который просто делал рекурсивный diff дерева объектов (верстка с компонентами) с рекурсии на цикл чтобы можно было бы в любой момент прервать и отложить чтобы не блочить поток (а вместе с ним и css-анимации со скроллом).

И получается что на части (по времени) они разбивают и рендер самих компонентов тем самым получая проблемы с консистетностью состояния компонентов из-за наличия нескольких версий дерева рендера (из-за переключения на рендер по более приоритетным событиям)

А можно было бы оставить рекурсию и сделать синхронно дифф  всего дерева компонентов а вот сами дом-операции собрать в список и уже их разбивать по времени. С одной стороны мы можем получить затык на диффе так как все дерево компонентов будет сравниваться синхронно с другой стороны у нас теперь не будет проблем с консистетностью и если подумать то все тормоза по большому счету исходят не от диффа а от работы с dom-апи.

А если в каких-то бенчах показывают что реакт синхронно тормозит при diff-e то это только потому что сам он тормоз потоу что они написали код без учета оптимизаций (например я в своих экспериментах с кастомным virtual-dom/diff-ом и оптимизациями под мономорфность v8 и инлайнинг js-кода в ассемблер получал производительность diff-а в 20-раз быстрее чем у реакта)
Оптимизировать под движок это прям очень плохая затея. Вот максимально
источник

VK

Vladimir Klimov in React — русскоговорящее сообщество
Богдан
Тот подход который выбрала команда реакта для реализации файберов не является единственно возможным. Мне кажется у них немного сбились критерии.

На мой взгляд можно было бы сделать все намного проще без полного переписывания движка и без появления различных проблем со стейт-менеджерами  и нюансов с консистентностью (когда чуть ли не с каждым стейт-менеджером появляются проблемы касательно работы в конкарент-моде или взять хотя бы обычные ref-ы когда туда записывают значения).

Суть в чем - в реакте решили переписать старый движок который просто делал рекурсивный diff дерева объектов (верстка с компонентами) с рекурсии на цикл чтобы можно было бы в любой момент прервать и отложить чтобы не блочить поток (а вместе с ним и css-анимации со скроллом).

И получается что на части (по времени) они разбивают и рендер самих компонентов тем самым получая проблемы с консистетностью состояния компонентов из-за наличия нескольких версий дерева рендера (из-за переключения на рендер по более приоритетным событиям)

А можно было бы оставить рекурсию и сделать синхронно дифф  всего дерева компонентов а вот сами дом-операции собрать в список и уже их разбивать по времени. С одной стороны мы можем получить затык на диффе так как все дерево компонентов будет сравниваться синхронно с другой стороны у нас теперь не будет проблем с консистетностью и если подумать то все тормоза по большому счету исходят не от диффа а от работы с dom-апи.

А если в каких-то бенчах показывают что реакт синхронно тормозит при diff-e то это только потому что сам он тормоз потоу что они написали код без учета оптимизаций (например я в своих экспериментах с кастомным virtual-dom/diff-ом и оптимизациями под мономорфность v8 и инлайнинг js-кода в ассемблер получал производительность diff-а в 20-раз быстрее чем у реакта)
Цель команды реакта в первую очередь написать то, что нужно фейсбуку, так же было с graphql, например
Потому говорить, что они ошиблись и пошли не туда не очень правильно, на мой взгляд
источник

Б

Богдан in React — русскоговорящее сообщество
createStore<🦉> ⁣
Оптимизировать под движок это прям очень плохая затея. Вот максимально
Понятие мономорфности это общий принцип оптимизаций для любых движков - как для v8 так и для firefox и safari - если использовать статические шейпы объектов и не юзать всякие es6+ фичи которые движки еще не научились инлайнить в ассемблер то получим ускорение на всех движках
источник

c⁣

createStore<🦉>... in React — русскоговорящее сообщество
Богдан
Понятие мономорфности это общий принцип оптимизаций для любых движков - как для v8 так и для firefox и safari - если использовать статические шейпы объектов и не юзать всякие es6+ фичи которые движки еще не научились инлайнить в ассемблер то получим ускорение на всех движках
Гарантировать это можешь?
источник

c⁣

createStore<🦉>... in React — русскоговорящее сообщество
Или же возьмем нейтив и получим отсутствие оптимизаций?
источник

c⁣

createStore<🦉>... in React — русскоговорящее сообщество
Или эджик или мобильный браузер
источник

c⁣

createStore<🦉>... in React — русскоговорящее сообщество
А также гарантию, что в следующей версии движка/браузера оптимизация не отвалится
источник

S

Special K in React — русскоговорящее сообщество
Oil Field
Эффектор не понравился что ли?)
Reatom больше нравится
источник

Б

Богдан in React — русскоговорящее сообщество
createStore<🦉> ⁣
Гарантировать это можешь?
про это уже не раз писали на хабре, вот навскидку - https://habr.com/ru/post/303542 Все движки js которые умеют в jit будут делать то же самое самое что и v8 - детектить шейпы объектов и компилировать более эффективный код если работать с этими объектами в  мономорфном режиме
источник

Б

Богдан in React — русскоговорящее сообщество
createStore<🦉> ⁣
Или же возьмем нейтив и получим отсутствие оптимизаций?
к сожалению движок js в react native на ios не умеет в jit так что там особой разницы не будет)
источник

DS

Dmitriy Shuleshov in React — русскоговорящее сообщество
Eugene Maltsev
А что кстати по поводу сборки реакта с rollup ?🤔
В svelte комунити - rollup вроде как основной сборщик.
Ну ещё бы🌚
источник

DS

Dmitriy Shuleshov in React — русскоговорящее сообщество
Кто то может мне объяснить фразу
"Апи на строках"

Почему носит негативный оттенок?
Откуда ноги растут у фразы?
источник

OR

Oleg Rizhkov in React — русскоговорящее сообщество
Dmitriy Shuleshov
Кто то может мне объяснить фразу
"Апи на строках"

Почему носит негативный оттенок?
Откуда ноги растут у фразы?
от ридакса?
источник

c⁣

createStore<🦉>... in React — русскоговорящее сообщество
Богдан
к сожалению движок js в react native на ios не умеет в jit так что там особой разницы не будет)
Мысль в том, что эти оптимизации под движок особого смысла не имеет
источник

a

artalar in React — русскоговорящее сообщество
Богдан
Тот подход который выбрала команда реакта для реализации файберов не является единственно возможным. Мне кажется у них немного сбились критерии.

На мой взгляд можно было бы сделать все намного проще без полного переписывания движка и без появления различных проблем со стейт-менеджерами  и нюансов с консистентностью (когда чуть ли не с каждым стейт-менеджером появляются проблемы касательно работы в конкарент-моде или взять хотя бы обычные ref-ы когда туда записывают значения).

Суть в чем - в реакте решили переписать старый движок который просто делал рекурсивный diff дерева объектов (верстка с компонентами) с рекурсии на цикл чтобы можно было бы в любой момент прервать и отложить чтобы не блочить поток (а вместе с ним и css-анимации со скроллом).

И получается что на части (по времени) они разбивают и рендер самих компонентов тем самым получая проблемы с консистетностью состояния компонентов из-за наличия нескольких версий дерева рендера (из-за переключения на рендер по более приоритетным событиям)

А можно было бы оставить рекурсию и сделать синхронно дифф  всего дерева компонентов а вот сами дом-операции собрать в список и уже их разбивать по времени. С одной стороны мы можем получить затык на диффе так как все дерево компонентов будет сравниваться синхронно с другой стороны у нас теперь не будет проблем с консистетностью и если подумать то все тормоза по большому счету исходят не от диффа а от работы с dom-апи.

А если в каких-то бенчах показывают что реакт синхронно тормозит при diff-e то это только потому что сам он тормоз потоу что они написали код без учета оптимизаций (например я в своих экспериментах с кастомным virtual-dom/diff-ом и оптимизациями под мономорфность v8 и инлайнинг js-кода в ассемблер получал производительность diff-а в 20-раз быстрее чем у реакта)
Все равно глитчи будут. Типа в виртуальном доме удалилась нода,а в реальном не успела и по ней клик произошел - удачного дебага.
источник

a

artalar in React — русскоговорящее сообщество
Dmitriy Shuleshov
Кто то может мне объяснить фразу
"Апи на строках"

Почему носит негативный оттенок?
Откуда ноги растут у фразы?
источник

АЗ

Андрей Звёздочка... in React — русскоговорящее сообщество
artalar
Все равно глитчи будут. Типа в виртуальном доме удалилась нода,а в реальном не успела и по ней клик произошел - удачного дебага.
Это решается приоритетами. Элементы, которые сейчас на экране, имеют всегда наивысший приоритет
источник

И

Иван in React — русскоговорящее сообщество
Dmitriy Shuleshov
Кто то может мне объяснить фразу
"Апи на строках"

Почему носит негативный оттенок?
Откуда ноги растут у фразы?
если пишешь на js (не на ts/flow, что там ещё модного есть), то использовать апи вида getFruit(‘apple’); getFruit(‘orange’) — боль и страдание.

1. где перечислены все поддерживаемые строки? дай бог, чтобы хоть где-то были
2. что случится с продом, если я закоммичу getFruit(‘orangage’)?
источник