Повторное использование магистральных представлений / маршрутов на сервере при использовании Pushstate Backbone.js для SEO / закладки

Я делаю некоторую тщательную проверку магистрали для одностраничного приложения и задаюсь вопросом, возможно ли повторно использовать те же виды / маршруты от клиента на стороне сервера, чтобы при посещении Google URL-адреса pushstate или при доступе к нему непосредственно сервер может генерировать точно такой же HTML, который будет сгенерирован магистралью в клиенте.

Было бы трудно поддерживать два отдельных набора представлений / маршрутов, один на клиенте и один на сервере. Я видел проект backnode на github, но это, похоже, немного упускает из виду, и вам приходится дважды писать один и тот же магистральный маршрутизатор.

Просто интересно, как люди обычно справляются со случаем, когда используют URL-адреса pushstate в магистрали и нуждаются в том же представлении с сервера? Люди дублируют код или есть лучший способ?

2 ответа

Решение

Я еще не пробовал это, но эти идеи с использованием node.js и backbone могут помочь:

http://andyet.net/blog/2011/feb/15/re-using-backbonejs-models-on-the-server-with-node/

http://bennolan.com/2010/08/13/pushstate-and-nodejs.html

По сути, единственный способ сделать так, чтобы вы не писали одно и то же дважды, - это чтобы ваш сервер node.js и клиент внешнего интерфейса использовали один и тот же код маршрутизации / модели. Если вы используете что-то еще на стороне сервера (например, Ruby), вам придется разместить node.js перед вашим сервером приложений. Затем создайте прокси-узел node.js для новых клиентов (push-состояния и client js) и выполните рендеринг для старых / бот-клиентов.

Другой вариант - делать то, что делает jQuery Mobile, а именно метод Hijax. Идея сделать тонны HTML5-страниц (вам придется посмотреть на его маршрутизацию).

И для полноты вы должны знать, как Google сканирует AJAX: http://code.google.com/web/ajaxcrawling/docs/getting-started.html

Этот проект делает именно то, что вы пытаетесь сделать. Это может заинтересовать вас, чтобы проверить это. https://github.com/developmentseed/bones

Другие вопросы по тегам