Форум сайта python.su
При открытии, на страницу выводятся объекты (1-я пачка книг), далее при скроле вниз, выводятся 2-я, 3-я пачка книг и т.д.
Сейчас книги рендерятся полностью на клиенте (+ биндинг к логике), в итоге первая загрузка медленная, можно ускорить, но все равно будет не айс.
Решил рендерить 1-ю пачку книг на сервере, для моментального отображения. (И для seo хорошо)
Какие варианты?
1) Для сервера и клиента свои шаблоны.
-5 дублирование html.
2) Рендерим все на сервере, через json отправляем 2-ю страницу в html виде, на клиенте выводим и биндим.
-1 летит больше трафика
-1 нагрузка на сервер (рендеринг)
* амазон/кинопоиск/… используют такой подход
3) node.js для рендеринга
- 7 тормозное решение (имитация DOM, angular и пр.), + лишний костыль.
4) Заюзать mustache.js, на клиенте после рендеринга делать биндинг (angular)
-2 Не очень хороший шаблонизатор (по фичам), имхо.
5) Сделать серверный шаблонизатор понимающий основы angular (условия, вывод, циклы), т.к. рендеринг и биндинг через angular.
- Ещё нужно написать, хотя может получится интересное решение.
Пока склоняюсь к 2 варианту. Может ещё какие варианты есть?
Офлайн
o7412369815963Можно для роботов рендерить все пачки на сервере, чтобы SEO полноценно работало.
Решил рендерить 1-ю пачку книг на сервере, для моментального отображения. (И для seo хорошо)
o7412369815963Если готовые блоки html, зачем же их прятать в json?
Рендерим все на сервере, через json отправляем 2-ю страницу в html виде, на клиенте выводим и биндим.
o7412369815963Минус json, плюс сжатие html (убрать пробелы и пр.)
-1 летит больше трафика
o7412369815963А кеширование? Его ведь даже на уровне web-сервера делать можно, ничего ручками писать не нужно.
-1 нагрузка на сервер (рендеринг)
Офлайн
LexanderСейчас так и работает, через “_escaped_fragment” но bing на него “забивает” хотя официально якобы поддерживает.
Можно для роботов рендерить все пачки на сервере, чтобы SEO полноценно работало.
LexanderТам ещё полетят некоторые данные что-б можно было на логику завязатся ангуларом, хотя их можно и в html завернуть.
Если готовые блоки html, зачем же их прятать в json?
LexanderДа, я думаю не существенно, особенно если учесть остальной трафик (html, img) + частота использования “пагинации”. Поэтому всего-лишь “-1”. Тоже самое с рендерингом, не очень существенно, + доп. нагрузки на БД нет (все равно они будет впоследующих запросах) - чуть что можно размазать по серверам.
В любом случае, у меня возникает вопрос: больше - это сколько в цифрах?
Может быть там кот наплакал.
Отредактировано o7412369815963 (Дек. 19, 2013 13:16:21)
Офлайн
Lexander
Что касается клиентской части, посмотрите, может быть будет достаточно Riot.js (он еще не вышел на мажорный релиз, но пользоваться уже можно), Ractive.js или canJS.
Riot.js — The 1kb client-side MVP frameworkRiot.js зависит от jQuery, поэтому 1кб не отделаться.
Офлайн
o7412369815963эта пачка для всех одна или юзер специфичная?
1-я пачка книг
Офлайн
bismigalisу каждого пользователя свои книги, причем у каждого своя сортировка (дата добавления к себе на “стену”) + флажок есть ли эта книга у меня.
эта пачка для всех одна или юзер специфичная?
Отредактировано o7412369815963 (Дек. 19, 2013 14:39:30)
Офлайн
o7412369815963Вот и ответ.
Если рендерить на сервере, будет 20..60мс на ответ + 200мс в среднем на сеть. Будет заметно быстрее.
Офлайн
а что если в страницу вставлять первую порцию JSON?
Офлайн
bismigalisХм, думал написал про эту оптимизацию выше,
а что если в страницу вставлять первую порцию JSON?
Офлайн
LexanderУ меня ещё есть knockout.js в роли рендер + биндинг, который не так популярен.
jQuery брать с крупного общего CDN (типа Google или того, который используется на сайтах, куда ходит ваша аудитория) пробовали?
$ time wget http://cdnjs.cloudflare.com/ajax/libs/knockout/2.3.0/knockout-min.js real 0m0.545s $ time wget http://cdnjs.cloudflare.com/ajax/libs/knockout/2.3.0/knockout-min.js real 0m0.449s $ ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_req=1 ttl=48 time=51.6 ms 64 bytes from 8.8.8.8: icmp_req=2 ttl=48 time=50.2 ms 64 bytes from 8.8.8.8: icmp_req=3 ttl=48 time=50.0 ms
LexanderАсинхронно между js и js, или js и html? второе - нет.
Получаете его асинхронно?
Evaluate Script - Details Duration 34.639 ms (at 536 ms) Self Time 33.741 ms CPU Time 34.899 ms Aggregated Time 1.158 ms33.741 ms Script jquery-1.7.2.min.js:1 Used Heap Size 7.9 MB (+988 KB)
LexanderУ меня там сейчас каша, стыдно показывать :)
Какой адрес страницы сейчас? Может что еще увижу.
Офлайн