Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Web
  • » Серверная шаблонизация + клиентская [RSS Feed]

#1 Дек. 19, 2013 23:58:03

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Серверная шаблонизация + клиентская

Сейчас глянул, в ВК так же сделано, первая пачка с сервера прилетела, остальные через ajax, только у них там биндинга нет, они прям в html вызовы зашили.

Офлайн

#2 Дек. 20, 2013 12:24:50

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Серверная шаблонизация + клиентская

o7412369815963
Асинхронно между js и js, или js и html? второе - нет.
http://habrahabr.ru/post/182310/

o7412369815963
А вы почему так против серверного/за клиентский рендеринг?
С чего вы взяли? :)
Это просто способ решения задачи.
Можно оптимизировать серверную сторону, можно клиентсткую, можно обе.
Моя практика показывает, что оптимизировать серверную сторону целесообразнее.
Я уж не говорю о том, что гарантировать определенную производительность на клиенте мы не можем (плагины, режим работы ноутбука от батареи, мощность компьютера, субъективное ощущение времени и т.п.)

Если отбросить вариант плохого кода, то остается два способа оптимизации: кеширование (на сервере, на клиенте) и правильная работа с загрузкой данных (gzip на сервере, асинхрон на клиенте), с DOM и с JS.

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

Если часть информации заполняется на клиенте, то на клиент можно сразу выгрузить все шаблоны (они должны быть скрыты и не будут влиять на отрисовку и практически не влияют на скорость первой загрузки).
Данные получать через json и заполнять копию шаблона. Сначала делаем копию, потом ее заполняем - шаблон уже на клиенте, портить его не нужно и запрашивать повторно с сервера тоже не нужно.
Только когда копия заполнена данными, добавлять этот блок в DOM - так браузер делает меньше перерисовок.



Офлайн

#3 Дек. 20, 2013 12:32:55

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Серверная шаблонизация + клиентская

o7412369815963
Сейчас глянул, в ВК
Кстати о ВК для примера.
Они при скроле передают на клиента 2 типа пачек с данными:
1. готовый html - это часть постов
2. json - это разные отметки к посту (мне нравится, кол-во коментов и пр.)

Т.е. ту часть, которую можно собрать из закешированных блоков на сервере присылают сразу готовой для вставки в страницу. После вставки присланный блок обрабатывается JS, который из json вставляет в html блоки оставшиеся уникальные для каждого посетителя сведения.
Вам не кажется, что сущности ВК (пост) и ваши (книга) очень похожи?



Офлайн

#4 Дек. 21, 2013 14:52:20

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Серверная шаблонизация + клиентская

Кеширование пока отложу, будет будущим этапом.
У меня каждая книга на других страницах немного отличается - нижняя часть шаблона зависит от типа страницы (профайл, закладки, …), всего 4 шаблона на каждую книгу, хотя я низ наверно буду рендерить отдельно и добавлять к закешированному (в случае кеширования), одна отрендеренная книга весит 1,5кб (их сейчас около 200к, 300М на кеш - не много, хотя можно будет ещё зажать с zlib 8-), вообще кеш не сэкономит вызовы в БД, т.к. почти все необходимое есть в объекте книги. Вообщем, сначала рабочий вариант, а потом чуть что кеширование.

Lexander
После вставки присланный блок обрабатывается JS, который из json вставляет в html
Вроде даже проще, покрайней мере у меня. страница /feed, при пагинации прилетает /al_feed.php?sm_news
- готовый html (помимо json) в котором уже указано кол-во Like и пр. и биндинг уже сделан на сервере (классический onmouseover=“wall.postShareOver('-286734372_28909')” onmouseout=“wall.postShareOut('-286734372_28909', event)”)
т.е. просто остается добавить в DOM. Хотя им наверно можно было весь рендеринг на клиенте сделать.
Так же сделаю.

Офлайн

  • Начало
  • » Web
  • » Серверная шаблонизация + клиентская[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version