yandex-ui / noscript

Noscript: JavaScript MVC Framework for building SPA
http://yandex-ui.github.io/noscript/
MIT License
34 stars 22 forks source link

Серверный рендеринг: async view не перерисоввывается #515

Open chestozo opened 9 years ago

chestozo commented 9 years ago

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

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

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

chestozo commented 9 years ago

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

edoroshenko commented 9 years ago

Есть такое. Это то, что я тогда не доделал. Нужно на клиенте находить асинхронные виды и вызывать для них update

edoroshenko commented 9 years ago

Я в своих частных случаях решил это отказом от асинхронности, но это не всегда правильный путь

chestozo commented 9 years ago

Я пока решил это вызовом ns.Update.render на клиенте, вместо ns.Update.reconstruct (

edoroshenko commented 9 years ago

Ну т.е. у тебя страница рендерится 2 раза :) Смысл серверного рендеринга пропадает процентов на 90

edoroshenko commented 9 years ago

ну лан, не на 90. Ты всё же отдаёшь страницу ботам и показываешь что-то сразу. Просто заставляешь браузер больше работать

chestozo commented 9 years ago

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

edoroshenko commented 9 years ago

Вот и мы тоже это захотели

chestozo commented 9 years ago

Вроде, довольно просто пофиксить так: если у async вида есть все модели и они валидны - state должен быть сразу ok, а не loading. См #520