2012-07-02 2 views
0

Предположим, вы должны создать высокофункциональное одностраничное клиентское приложение, которое прослушивает изменения URL-адресов для навигации по приложению.Предварительное вычисление Выполнение Javascript на стороне клиента

Предположим, что если пользователь (или робот поисковой системы) загружает страницу по своему URL-адресу, вместо того, чтобы доставлять статический файл javascript и попадает в api как обычно, мы хотели бы прекомпопутировать все серверную и доставку DOM вместе с состоянием js.

Мне интересно, существуют ли существующие инструменты или методы для продолжения такого выполнения состояния клиенту.

Я знаю, что я мог бы выполнить сценарий в чем-то вроде фантомного JS и выводить элементы DOM, но тогда обработчики событий, контроллеры и состояние памяти js не будут правильно подключены. Я мог обнюхать наш пользовательский агент и только отправлять предварительно вычисленный контент ботам, но я боюсь, что Google будет наказывать за это, и мы также потеряем преимущества в скорости, послав все, что было предварительно вычислено в первую очередь.

ответ

0

Итак, вы хотите скомпилировать серверную версию и отправить клиенту результаты запроса ресурса по определенному URL-адресу? На что написан ваш бэкэнд?

У нас есть API, работающий на GAE в Java. Наше приложение представляет собой одностраничное приложение, и мы используем объект истории HTML5, поэтому у нас должны быть «реальные ответы» для фактических URL-адресов на интерфейсе.

Для этого мы используем JSP для предварительного кэширования данных на странице, поскольку они загружаются с сервера и отправляются клиенту.

На переднем конце мы используем Backbone, поэтому мы изменили Backbone.sync, чтобы найти копию данных, которые она ищет локально на странице, и если ее там нет, только тогда, чтобы запросить ее с сервера как вызов AJAX.

Итак, да, это почти то, что сделал каждый сайт до того, как вы получили ajax. Хитрость заключается в написании вашего приложения, чтобы данные могли быть локальными на странице (или в localStorage even), и если не только тогда запрашивать данные. Затем убедитесь, что ваша страница «построена» на конце сервера (поэтому мы фактически заполняем данные в элементах HTML на сервере, чтобы страница не требовала JS на стороне клиента).

Если вы перейдете в другое место, данные будут динамическими и страница не перезагрузится.