Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ns.View] Когда async вид валидный нужно его рендерить синхронно #520

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

chestozo
Copy link
Member

@chestozo chestozo commented Feb 5, 2015

fix для #515

  • нужен тест
  • нужно передавать флаг про то, что нода вида рендерилась асинхронно

@doochik
Copy link
Contributor

doochik commented Feb 6, 2015

Есть же такая проверка уже
https://github.com/yandex-ui/noscript/blob/master/src/ns.view.js#L707

@chestozo
Copy link
Member Author

chestozo commented Feb 6, 2015

@doochik Она cрабатывает только когда вызывается view.update для async видов.

Этого не происходит, когда мы вызываем на сервере update.generateHTML.

Мой фикс делает так, что первая отрисовка (синхронных видов) отрисует валидные асинхронные виды как синхронные (раз у них isModelsValid() === true значит их уже можно отрисовать).

@doochik
Copy link
Contributor

doochik commented Feb 6, 2015

Примерно понял почему так, но нужен тест

@doochik
Copy link
Contributor

doochik commented Feb 6, 2015

А еще для таких видов запустится дублирующий update, потому что он добавит себя как async
https://github.com/yandex-ui/noscript/blob/fix.515/src/ns.update.js#L219

@chestozo
Copy link
Member Author

chestozo commented Feb 6, 2015

А еще для таких видов запустится дублирующий update, потому что он добавит себя как async

Не запустится, когда рендерим на сервере.

КМК надо сразу рендерить как sync (после моего фикса так и будет).
Тест сделаю :)

@doochik
Copy link
Contributor

doochik commented Feb 6, 2015

Запустится, когда все это будет работать в браузере

@doochik
Copy link
Contributor

doochik commented Feb 6, 2015

Еще я тут подумал про сам баг.

Если вид объявлени как async, то на сервере мы его не рендерим, так заложено изначально. Почему тут вдруг появляются странные кейсы? Ну не отрендерится он, приедет все в браузер, там дорендерит, в этом и суть async. В чем проблема-то?

@chestozo
Copy link
Member Author

chestozo commented Feb 6, 2015

@doochik я описал кейс в #515.

Есть такой интересный кейс:
есть async вид, который зависит от какого-то набора моделей.
Когда мы рендерим на сервере страницу запрашиваются модели только для синхронных видов.

В нашем интересном кейсе получается так, что синхронные модели включают модели, нужные нашему асинхронному виду.

В итоге на сервере рендерится мода ns-view-async-content, а на клиенте мода ns-view-content не рендерится.

Ну т.е. получается во время reconstruct:

  • модели все есть и валидны
  • нода для вида уже отрендеренная пришла (хотя и async, но это не видно в HTML)
  • из этого всего мы делаем вывод, что вид уже отрендерился синхронно на сервере (что не является правдой) и ничего с ним не делаем.

@chestozo
Copy link
Member Author

chestozo commented Feb 6, 2015

Договорились на том, что ориентироваться на isModelsValid() не хорошо, потому что никто не гарантирует, что на клинте не появятся модели какие-нибудь неожиданно, которых не было на сервере.

И тогда мы посчитаем, что async вид рендерился как sync и не станем его перерисоввывать.

Решили, что надо отмечать таки прямо в HTML вида, что он рендерился как async. И тогда его жёстко перерисоввывать на клиенте.

@doochik
Copy link
Contributor

doochik commented Feb 6, 2015

Да, такое поведение исправит проблему в корне. А этот фикс, если его оставим, будет просто являться оптимизацией процесса.

@vitkarpov vitkarpov changed the title Когда async вид валидный нужно его рендерить синхронно [ns.View] Когда async вид валидный нужно его рендерить синхронно Jul 6, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants