Пишу про разработку вообще и в частности про: JavaScript, HTML5, CSS3, AngularJS, ReactJS, Agile.

Рендер JavaScript приложения на сервере

Развитие фронтенд разработки идет своим путем. Первый шаг был отделение от сервера и обработка всего функионала на клиенте. Это было удивительное время, когда мы смотрели на сервер как на API, использовали умное словосочетание RESTfull API и гордо смотрели в будущее. Строго говоря это время еще не прошло и много приложений так и продолжают писаться.

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

Итак, если вкратце, то вот что я имею ввиду:

Теперь о каждом из этих пунктов подробнее.

Индексация поисковиками

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

Загрузка всего приложения для начала отображения

Приложению требуется загрузиться практически полностью для начала отображения контента. Можно уменьшить количество необходимых файлов для старта, но это практически всегда их будет ощутимо много. Разумеется можно пойти на ухищрения и в том, же ангуларе можно загружать контроллеры, сервисы и директивы асинхронно, хотя основной функционал это вроде как и не поддерживает. Однако, это только отодвигает проблему, но не решает ее.

Без JS нет приложения

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

Все эти мысли приводят к тому, что хочется распределить рендер приложения между клиентской и серверной частью. Если пользователь идет на конкретную страницу, то почему бы ей не прорендериться прежде чем он получит все скрипты? Это и повлияет на загрузку контента и решит проблему с поисковиками.

К сожалению не все JS библиотеки поддерживают рендер на сервере и, как ни жаль, но AngularJS в их число не входит. Для рендера на сервере можно смотреть в сторону React’а (ReactDOMServer) или Ember’а (The Road to Server-Side Rendering). Я еще не протестировал все что хотел и у меня нет предпочтения в сторону какой-то из этих библиотек. Было бы интересно услышать ваше мнение. Что думаете по поводу этой проблемы? Стоит ли вообще задумываться?

Поделиться:
comments powered by Disqus