bem-site / bem-forum-content-ru

Content BEM forum for Russian speak users
MIT License
56 stars 6 forks source link

Что вы думаете о заворачивании bemjson в immutables? #385

Open qfox opened 9 years ago

qfox commented 9 years ago

Суть: получить виртуальное BEM-дерево в виде Immutable BEMJSON, из которого получать реальный (а может виртуальный) DOM тогда, когда меняется BEMJSON.

Например, с помощью этого: https://github.com/facebook/immutable-js

Цель: Получить виртуальный слой в памяти с деревянной структурой ради оптимизации отрисовки и в привычном окружении (аля реакт, но в бэм терминах).

Pros/cons?

upd: Реализация может быть такой:

Что-то упустил?

Guria commented 9 years ago

:fire: очень хочу такое

qfox commented 9 years ago

Добавил примерный способ реализации

tadatuta commented 9 years ago

cc @veged

veged commented 9 years ago

а как строится первоначальный BEMJSON и как потом в нём происходят изменения?

qfox commented 9 years ago

@veged Вот что-то, а такого вопроса от тебя не ожидал. Либо руками пишется, либо priv.js, либо bemtree, etc.

Потом — через i-bem.js, например.

veged commented 9 years ago

это важно, т.к. я пока не понимаю флоу использования этой штуки — как именно через i-bem.js потом можно менять BEMJSON? почему эти будущие возможные изменения не описываются там же, где процесс генерации первоначального BEMJSON?

qfox commented 9 years ago

@veged Ты сейчас смотришь на BEMJSON как нечто на сервере один раз собранное и использованное для формирования HTML. Я смотрю на него, как на структуру приложения уже на фронте. Может быть в этом дело?

Т.е. я предлагаю не терять эту информацию на клиенте и работать там с теми же блоками, и хранить не в HTML (или не только в HTML), но и в неком BEMJSON. i-bem.js сейчас реализует это все через HTML и API браузера, но если поднятся над реализацией — то он ищет в BEMJSON нужные экземпляры описанных блоков.

Процесс генерации же для меня — это сугубо серверная часть. На клиенте — либо загрузка уже сгенерированного и отданного с сервера дерева, либо восстановление BEMJSON из HTML (с расставленными метками-биндингами-как угодно).

А далее — i-bem.js уже работает с HTML в терминах блоков и элементов, не вижу никаких проблем работать не напрямую с HTML, а с прослойкой в виде иммутабл BEMJSON.

veged commented 9 years ago

я пока так ничего конкретного и не понял :-( можешь набросать прототип? я не понимаю, как i-bem.js будет работать с BEMJSON (ещё и immutable, для меня это означает, что его весьма сложно модифицировать)

qfox commented 9 years ago

@veged Смысл не в том, что сложно модифицировать. Смысл в copy-on-write.

Ок, проще набросать ;)

awinogradov commented 9 years ago

Почему бы напрямую не выбросить объект в js c bemjson? Еще как вариант пробрасывать свои атрибуты на блок и элемент и по ним восстанавливать.

qfox commented 9 years ago

@verybigman Есть ряд проблем:

У BH есть processBemjson, которая возвращает полный BEMJSON, который можно завернуть в Immutable Map и дальше строить HTML при изменениях. В этом случае появляется тот самый Virtual BEM. Но надо еще BEMHTML научить возвращать полный BEMJSON, и c i-bem куча вопросов.

pavelpower commented 8 years ago

@zxqfox класс, а ведь есть еще и PostHTML

Ну и круг замкнется BEMJSON -> DOM -> HTML -> BEMJSON -> DOM для всяких там тестов классно. И immutableMap строить на BEMJSON как собственно ты говоришь.

Только медленно...

qfox commented 8 years ago

@pavelpower Что именно медленно?) Развернешь свою мысль?

voischev commented 8 years ago

@zxqfox что для нас быстро для @pavelpower обычно медленно ;)

DimitryDushkin commented 8 years ago

Идея отличная. Получилось что-нибудь?

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

qfox commented 8 years ago

@DimitryDushkin можем голосом обсудить)