
? ethorz
23.06.2017
17:53:23
что быстрее, мутабельность или иммутабельность?

Andrey
23.06.2017
17:54:06
Мутабельность.

? ethorz
23.06.2017
17:55:44

Andrey
23.06.2017
17:56:28

Google

Default
23.06.2017
17:56:29
Так и есть

Nikolay
23.06.2017
18:25:04
есть кто mobx-state-tree щупал?

Дмитрий
23.06.2017
18:26:17
Чем проще и предсказуемее конструктор объекта и стабильнее его тип — тем быстрее иммутабельные операции

Nikita
23.06.2017
18:28:13

Yumi
23.06.2017
18:28:29

Дмитрий
23.06.2017
18:33:39
function Point(label, x, y) {
this.label = label
this.x = +x || 0
this.y = +y || 0
}
const point = new Point('text','10')
не смотря на то, что этот код работает нормально, из-за того, что мы один раз передали строку и undefined, в другой раз два числа передадим и т.д. V8 не сможет эффективно конвертировать такую функцию в низкоуровневый типизированный код и заинлайнить её

Илья
23.06.2017
18:35:42
Привет! А подскажите, пожалуйста, как подружить eslint-airbnb-config и VSCode?

Дмитрий
23.06.2017
18:35:57
Но это уже из области таких экономий на спичках, что редко кто доходит до такого уровня оптимизации — чтобы уже аж под движок затачиваться

Yumi
23.06.2017
18:42:37

Ywein
23.06.2017
18:43:19

Дмитрий
23.06.2017
18:43:46

Google

Yumi
23.06.2017
18:49:02
Иммутабельные данные дают предсказуемость, а следовательно легче можно тестировать. Какие ещё можно вещи использовать, как аргумент в сторону использования иммутабельных данных вообще в JS? В React необходимость понятна, по причиине shouldComponentUpdate.

Дмитрий
23.06.2017
18:57:20

Yumi
23.06.2017
19:04:51
Спасибо за пояснения.

Alex
23.06.2017
19:06:32
Приветы)
У меня вопрос околохоливарный.
Не кажется ли вам, что использование es6 classes - это шаг назад по сравнению с createClass? )

Дмитрий
23.06.2017
19:08:42

Alex
23.06.2017
19:08:49
.bind ?)

Дмитрий
23.06.2017
19:09:04
Так не нужен же

Alex
23.06.2017
19:09:06
руками. в 2к17 ))
М? Выпилили?

Дмитрий
23.06.2017
19:09:44
Ну class properties значения в бинде не нуждаются

Nikolay
23.06.2017
19:10:12

Nikita
23.06.2017
19:10:24
такой вопрос можно ли вручную вызывать лайфсайкл методы в реакт?

Alex
23.06.2017
19:10:28
А есть ссылка?

Nikita
23.06.2017
19:15:09

Дмитрий
23.06.2017
19:15:31

Alex
23.06.2017
19:15:49
стоит?
В среднем нет, но ты же зачем-то спросил?)

Google

Дмитрий
23.06.2017
19:17:00

Nikita
23.06.2017
19:17:07

Alex
23.06.2017
19:18:25

Дмитрий
23.06.2017
19:19:59
Да, это просто синтаксический сахар.
Важно понимать, что у стрелочных функций нет своего контекста (this), поэтому при объявлении они сразу "биндятся" к контексту родителя, это фича
Можно посмотреть во что компилит это всё бабель

Alex
23.06.2017
19:21:31

Дмитрий
23.06.2017
19:21:32
class MyClass {
a = (args) => this.props
}
class MyClass {
constructor() {
this.a = args => this.props;
}
}

Alex
23.06.2017
19:22:29
Ну, вообще мой пойнт в копилку createClass заключался в том, что всё это там не нужно))

Nikolay
23.06.2017
19:22:39
вот видос где чувак рассказывает что createClass говно
https://www.youtube.com/watch?v=PnpfGy7q96U&feature=youtu.be

Дмитрий
23.06.2017
19:23:03

Alex
23.06.2017
19:23:08

Дмитрий
23.06.2017
19:23:20

Alex
23.06.2017
19:24:03

Дмитрий
23.06.2017
19:25:51
В плане? ?
Компилируются в обычные реакт-компоненты, ну как будто из всего класса оставили только метод render и пропсы
Есть recompose для всяких shouldComponentUpdate, lazy и более специфичных оптимизаций

Alex
23.06.2017
19:29:25
Ну а там уже в свою очередь, доступна вся магия ускоренных сравнений поддеревьев, например. Например путём сравнения предвычисленного хэша или еще чего подобного, сводящегося к одной операции сравнения.

Max
23.06.2017
19:44:44

Google

Дмитрий
23.06.2017
19:45:57

Max
23.06.2017
19:50:33

Admin
ERROR: S client not available

Дмитрий
23.06.2017
19:51:09
Ну это скорее всего баг какой-нибудь
https://babeljs.io/repl/#?babili=false&evaluate=true&lineWrap=false&presets=react%2Cstage-2&targets=&browsers=&builtIns=false&debug=false&experimental=true&loose=false&spec=false&playground=true&code_lz=MYGwhgzhAECyCeBhcVoG8BQ1oAcBOA9jjALzpbbQEDWAXNAAwUC-FY0ZAFGHgOYQBKDgD5oAFwAWASwgA6fEQgZWGUJBiJpIACbQApgA8xegHbaYCZOvLZlGVQRMQx0YFt1kTegO7RNUnXtgRwgCED1ZEAJeTjcA7VkwTgEBeyA&stage=0

Max
23.06.2017
19:57:46
С телефона)


Max
23.06.2017
20:25:14
Иммутабельные данные дают предсказуемость, а следовательно легче можно тестировать. Какие ещё можно вещи использовать, как аргумент в сторону использования иммутабельных данных вообще в JS? В React необходимость понятна, по причиине shouldComponentUpdate.
C иммутабельностью сложно разработать некоторую бизнес-логику. Вот придумал такой кейс - у объекта юзера есть массив папок у каждой папки массив проектов у каждого проекта массив тасков и у каждого таска массив комментариев. И теперь юзер отредактировал какой-то комментарий - с мутабельностью все просто - берем и меняем на новое значение comment.text = newValue. А как с иммутабельностью? Нужно создать новый объект комментария, создать новый массив комментариев, перекопировать отстальные комментарии, создать новый массив тасков, перекопировать остальные таски, создать новый массив проектов, перекопировть остальные проекты и наконец создать новый массив папок, перекопировать и создать новый объект юзера. Это же медленнее в тысячи раз.


andretshurotshka?❄️кде
23.06.2017
20:25:45

Ywein
23.06.2017
20:26:35

andretshurotshka?❄️кде
23.06.2017
20:28:18

Alex
23.06.2017
20:28:32


Max
23.06.2017
20:28:55
не хранить все внутри друг друга?
Только не нужно предлагать нормализацию - я уже пробовал - это такие неудобства когда вместо того чтобы простись по ссылкам - comment.task.project.folder вся бизнес логика увешана лапшой вытаскивания нужного объекта по его айдишнику из глобального стора

Alex
23.06.2017
20:32:14
Т.е. в таком случае у тебя все сестринские ноды в твоем дереве будут переиспользованы
Да, они упадут в новые контейнеры, но это достаточно быстро


Дмитрий
23.06.2017
20:34:29

Алексей
23.06.2017
20:34:32

Google

Alex
23.06.2017
20:35:21
Потому что в правильной реализации иммутабельных данных
[a, b, c] и [a, b1, c], где b1 - это обновлённая версия b
второй массив обычно не просто тупо массив, а специальный объект, который содержит только дельту

Max
23.06.2017
20:36:07

Дмитрий
23.06.2017
20:36:20
Бред

Alex
23.06.2017
20:37:14
Я чуть выше написал

Дмитрий
23.06.2017
20:37:37
Как раз для того, чтобы не мудохаться с вложенностью и требуют нормализацию

Max
23.06.2017
20:37:44

Дмитрий
23.06.2017
20:37:56
Не факт

Alex
23.06.2017
20:38:08
Ну точнее, тут уже детали реализации, но это может быть не совсем массив

Vladimir
23.06.2017
20:40:47

Alex
23.06.2017
20:40:50
Т.е
const updArr = arr.withUpdatedByIndex(index=1, value=b1);
где updArr это не Array[String], нифига, а PatchedArray, который, грубо говоря, содержит информацию о том, что это всё, то же самое, что и arr, только элемент с индексом 1 теперь равен b1

Vladimir
23.06.2017
20:42:06
В immutable массиве? Нет конечно

Alex
23.06.2017
20:44:17