
andretshurotshka?❄️кде
07.10.2017
16:20:36
А ну мб

Алексей
07.10.2017
16:20:59
нужно лишь отслеживать их изменения (привет, mobx)
так что по моему мнению, субд для фронтенда - это как реактивный двигатель для велосипеда: сложно, громоздко и не нужно
а то найдутся умельцы-идиоты, которые ORM запилят поверх этой СУБД

Google

andretshurotshka?❄️кде
07.10.2017
16:22:49
redux orm))))
можешь развернуть? Как хранить в редаксе без нормализации?
или это конкретно про mobx

Алексей
07.10.2017
16:27:19
думаю, что никак
хотя
можно денормализованно хранить
хотя это так себе
просто стор редакса - это дерево со всеми его ограничениями
никаких циклических ссылок
да ещё и иммутабельность

Dmitry
07.10.2017
16:30:32
ну так как решить траблу с вложенными данными при этом не делая нормализацию ?

Алексей
07.10.2017
16:31:49

Google

Dmitry
07.10.2017
16:32:34
и как это поможет трекать изменения ?

Алексей
07.10.2017
16:32:42
для редакса только денормализация доступна: одни и те же данные в разных местах
и это тут не причём, главная забота - сделать стор удобным для всевозможных операций
в редаксе это как раз не очень удобно сделано

Dmitry
07.10.2017
16:35:29
Зато мобх тяжелее дебажить и репродьюсить

Алексей
07.10.2017
16:36:13
даже с redux-devtools интегрируется

Dmitry
07.10.2017
16:36:26
да, но из-за него оверхед в разы возрастает
инит тайм большой
куча ограничений
с типизацией
либы для мобх с ним не работают

Алексей
07.10.2017
16:37:34
в редаксе это как раз не очень удобно сделано
например, если в сложном экшене мне нужно не только изменить данные задиспатчив , но и получить их, то я непременно должен знать их точное положение в стейте (ну или селектор должен знать)

Dmitry
07.10.2017
16:38:19
перед выбором между мобх и редаксом для проекта
тестили все это
на среднем для проекта обьекте

Алексей
07.10.2017
16:38:58
и на сколько миллисекунд тесты медленнее для mobx-state-tree были?

Dmitry
07.10.2017
16:39:03
и он инитился оч долго

Google

Алексей
07.10.2017
16:39:20

Dmitry
07.10.2017
16:39:21
редукс с нормализаций 60мс а мобх стейт три 500

Алексей
07.10.2017
16:39:47
ну чёт долго, да

Dmitry
07.10.2017
16:39:47
при это на клиент еще оверхед в виде 130 кб
конечно дальше оно быстрее работало с мобх

Алексей
07.10.2017
16:40:41
это не так много на самом деле, даже для мобильного инета

Dmitry
07.10.2017
16:40:41
но из-за инит тайма и неустоявшегося апи стейт три решили выбрать редукс
плюс редукс по размерам меньше весит и не привности такого большого оверхеда
Но вот если пилить что-то типа црмки, то тут лучше мобх

Алексей
07.10.2017
16:43:11
ну не знаю, для меня, по крайней мере, выбор между быстродействием и удобством вполне очевиден, и не в пользу быстродействия
а юзерам придётся подождать лишнюю полсекунду
хотя mobx тоже не идеален далеко
с его механизмом подписок осторожно надо обращаться

Алексей
07.10.2017
16:45:08
я когда игрался с ним, то выстреливал себе в ногу из-за этого

Max
07.10.2017
16:48:55

Dmitry
07.10.2017
16:49:42
benchmark.js и плюс руками тестили примерно похожий код
так что выводы с этих тестов могут быть не совсем справедливыми

Max
07.10.2017
16:50:46
я имею ввиду код теста, какие компоненты, какое состояние

Dmitry
07.10.2017
16:51:17
та просто закинули в бенчмарк жс createState и mst.create()

Max
07.10.2017
16:56:17
так что выводы с этих тестов могут быть не совсем справедливыми
Если код теста закрыт и тут его не показать, то могу попробовать предложить померять вариант с использованием простого общего мутабельного состояния с вложенностью (как я выше писал) - точно такое же как в мобиксе но только без всяких обзерваблов и без всякого мобикса и когда нам нужно что-то изменить мы меняем свойство - comment.text = 'new text' и вызываем update() - функцию которая делает перерендер всего приложения - ReactDOM.render(<App/>, rootEl). У меня есть мысль что оверхед на работу состояния будет большим чем чистые мутируемые объекты и перерендер(точнее перепроверка потому что виртуал-дум) всего приложения будет быстрее

Google

Dmitry
07.10.2017
16:57:05
я не говорю про работу и перерендер
а просто про инит тайм

Max
07.10.2017
16:59:01
тем более если инит тайм - мобиксу ведь нужно на каждое свойство поставить геттеры и сеттеры и создать внутренние обзерваблы

Dmitry
07.10.2017
16:59:40
у нас такая специфика была что перерендер особо не был критичен
а важно было инит тайм и вес

Max
07.10.2017
17:03:23
а важно было инит тайм и вес
в этом варианте стейт-мененджера вообще нет, так что по весу это лучший вариант) и инит тайм будет быстрее чем с мобиксом

Dmitry
07.10.2017
17:03:49
ну как бы у нас в старом проекте такое и было
самописнео
и его тяжело дебажить и поддерживать


Max
07.10.2017
17:15:24
и его тяжело дебажить и поддерживать
Блин, ну что значит дебажить и поддерживать - все точно такое же как с мобиксом но только без декораторов и мобикса, вот из примера выше - состояние точно такое же
const AppState = new class {
width;
height;
.....
user = new User();
}
class User {
name = '';
email = '';
.....
folders = [];
}
class Folder {
name = '';
...
projects = [];
}
class Project {
name = '';
...
tasks = [];
}
class Task {
text = '';
....
}копоненты точно так же будут передавать только нужный объект
function App({appState}){
return (
<div>
<div>{appState.user.name}</div>
<div>
{appState.user.folders.map(folder=><Folder folder={folder})/>}
</div>
</div>
)
}
function Folder({folder}){
return (
<div>
<div>{folder.name}</div>
<div>
{folder.projects.map(project=><Project project={project})/>}
</div>
</div>
)
}
function Project({project}){
return (
<div>
<div>{project.name}</div>
<div>
{project.tasks.map(task=><Task task={task})/>}
</div>
</div>
)
}
function Task({task}){
return (
<div>
<div>{task.text}</div>
</div>
)
}никакого отличия от мобикса разве что компоненты не нужно врапить в @observer декоратор
единственное отличие это только при измении свойства или добавления/удаления из массива нужно вызвать дополнительную функцию update которая будет делать перерендер всего приложения
import {update} from './utils';
....
onCommentEditSaveButton = (e)=>{
this.props.comment.text = e.target.value;
update();
}
....
//util.js
export function update(){
ReactDOM.render(<App/>, rootEl)
}и получем точно такую же работу с состоянием как в мобиксе только без мобикса. Какие тут могут быть проблемы с дебагом или поддержкой?

Admin
ERROR: S client not available

Dmitry
07.10.2017
17:16:07
в том что мобх не удобно дебажить ?
как и это самописное
…
вообще не оч понимаю к чему это все

Max
07.10.2017
17:18:33
в том что мобх не удобно дебажить ?
речь ведь идет про самописное решение, в моем примере выше самописного решения все просто и прозрачно, и нет никаких обзерваблов и всяких неочевидных сложностей и моментов

Dmitry
07.10.2017
17:19:04
Я говорил про наше самописное решение которое в нашем проекте
и если продолжать писать в таком духе это выйдет редукс
только хуже

Max
07.10.2017
17:20:14

Google

Dmitry
07.10.2017
17:20:39
У нас вышло что-то типа мобх
с глобальным методом апдейт пропс
который по какому-то елементу апдейтит
ну там долгая история

Алексей
07.10.2017
17:41:54


Max
07.10.2017
17:54:35

Алексей
07.10.2017
17:55:11
а хотя
стоп
я погорячился
хотя
можно сделать так как я предложил, но нужно кое-что в архитектуре соблюдать

Valery
07.10.2017
17:56:39
гайз, что означает термин middleware?

Алексей
07.10.2017
17:57:44
то есть если выносить те асинхронные операции, окончания которых требуют ререндера, в отдельные методы с декоратором, тогда всё норм будет

Dmitry
07.10.2017
17:58:02
гайз, что означает термин middleware?
https://ru.wikipedia.org/wiki/%D0%A1%D0%B2%D1%8F%D0%B7%D1%83%D1%8E%D1%89%D0%B5%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5

Valery
07.10.2017
17:58:58

Artyom
07.10.2017
18:04:02

Max
07.10.2017
18:05:22

Dmitry
07.10.2017
18:05:46
если папка в корне то просто node_modules

Artyom
07.10.2017
18:05:53
не в корне
в этом и проблема

Dmitry
07.10.2017
18:06:09
слэш забыл значит

Artyom
07.10.2017
18:06:15
все файлы (и гитигнор) в /front