Size: a a a

2020 July 02

🦜

🦜 in ☄️ effector
@ZeroBias а зачем в графите нужно текущее состояние стора?
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
🦜
@ZeroBias а зачем в графите нужно текущее состояние стора?
всм? не очень понял вопрос 🤔
источник

🦜

🦜 in ☄️ effector
🚀🔬 🚀🔬🚀🔬
всм? не очень понял вопрос 🤔
я просто ковыряюсь и вот увидел
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
а, это ещё один граф) совсем новый, граф инициализации состояний

состояния в эффекторе хранятся в рефах — объектах, хранящих ссылку на значение

{current: any, id: string}

у стора два рефа (основное состояние и его дубликат для предотвращения гонок), у сэмпла таких состояний три:
1) был ли вызван source (если не был, то вызов clock ничего не делает)
2) последнее значение, с которым был вызван source
2) последнее значение, с которым был вызван clock (вновь из-за гонок)

а у комбайна этих рефов — по числу полей-источников

то есть всегда точно известно, сколько именно единиц состояния использует приложение, это и позволяет работать форку и темплейтами: это даёт возможность сказать «если мы находимся внутри этого форка, то состояние с айдишником foo читай вот из этого объекта вместо оригинального»
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
как можно заметить, рефы не соотносятся 1к1 ни с юнитами, ни с нодами графа, поэтому при сериализации и десериализации (спауне темплейтов, форке) нужен способ соотнести сохранённые по сидам состояния с конкретными рефами
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
ичсх, подавляющее число юнитов сидов не имеет либо является вычисляемыми сущностями, для которых сериализовывать состояние вообще не очень то и корректно

поэтому у рефов есть набор операций, который описывает, что нужно сделать до и после десериализации данного рефа

их не так много:
• копирование значения (для заполнения вторичного рефа стора)
• вычисление значения с помощью функции (всё что сводится к мапу)
• запись значения в поле (для полей комбайна)
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
эти операции в рефах ссылаются на другие рефы, тем самым образуя новый граф, и у этого графа есть одно крайне важное отличие от всех других в библиотеке: он гарантированно ацикличен (то есть образует dag без циклов, фактически дерево)
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
это важно, потому что этот граф обходят форки при десериализации существующих значений и темплейты при запуске, если будет цикл — они зависнут
источник

c⁣

createStore<🦉>... in ☄️ effector
🚀🔬 🚀🔬🚀🔬
эти операции в рефах ссылаются на другие рефы, тем самым образуя новый граф, и у этого графа есть одно крайне важное отличие от всех других в библиотеке: он гарантированно ацикличен (то есть образует dag без циклов, фактически дерево)
А как гарантируется отсутствие циклов?
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
createStore<🦉> ⁣
А как гарантируется отсутствие циклов?
в апи эффектора нет методов, которые бы позволили создать цикл при инициализации: всё, что имеет target/to срабатывает только по требованию и поэтому в инициализации не участвует
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
одно из свойств dag — гарантированная поддержка топологической сортировки, благодаря которой вычисляемые значения всегда будут рассчитаны после своих предшественников: те могут создаваться невпопад и поэтому при общей инициализации приходилось следить за порядком вручную и это работало плохо, в отличии от математики)
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
топологическая сортировка кстати умещается на одном экране и поэтому используется в форке напрямую


https://github.com/zerobias/effector/blob/master/src/effector/fork.js#L324
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
🦜
я просто ковыряюсь и вот увидел
возвращаясь к твоему вопросу, у тебя на скрине фрагмент с командой копирования данных между двумя рефами закомбайненного стора)
источник

R

Rafael 🦠 in ☄️ effector
а как документировать эффекты через jsdoc?)
источник

R

Rafael 🦠 in ☄️ effector
так чет webstorm не подхватывает описание
источник

R

Rafael 🦠 in ☄️ effector
а не, норм, это я не туда посмотрел -__-
источник

DS

Dmitriy Shuleshov in ☄️ effector
🚀🔬 🚀🔬🚀🔬
как можно заметить, рефы не соотносятся 1к1 ни с юнитами, ни с нодами графа, поэтому при сериализации и десериализации (спауне темплейтов, форке) нужен способ соотнести сохранённые по сидам состояния с конкретными рефами
что такое спаун?
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Dmitriy Shuleshov
что такое спаун?
процесс запуска инстансов темплейта, отличается от форка отсутствием изоляции графа: все инстансы разделяют одни и те же ресурсы, в отличии от форков, которые имеют больше свободы
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Dmitriy Shuleshov
что такое спаун?
короче, template spawn vs fork это containerization vs virtualization)

https://www.cloudmanagementinsider.com/containers-vs-vms-virtual-machines/
источник