Javascript на стороне сервера: почему? - PullRequest
30 голосов
/ 27 марта 2009

Распространено ли использование javascript на стороне сервера? Почему бы использовать его в отличие от других сценариев на стороне сервера? Существуют ли конкретные варианты использования, которые делают его лучше, чем другие языки на стороне сервера?

Кроме того, запутавшись в том, как начать экспериментировать с ним, я нахожусь на freeBSD, что мне нужно установить, чтобы запустить серверный JavaScript?

Ответы [ 5 ]

47 голосов
/ 27 марта 2009

Это выглядит так:

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

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

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

Введите javascript на стороне сервера. Идея состоит в том, что вы можете написать код один раз, поэтому один и тот же код работает как на сервере, так и на клиенте. Казалось бы, это решает большую часть проблемы: вы получаете полный набор серверной и клиентской логики одновременно, нет дрейфа и двойного обслуживания. Также хорошо, когда ваши разработчики должны знать только один язык для работы как сервера, так и клиента.

К сожалению, в реальном мире это не так хорошо работает. Проблема в четыре раза:

  1. Вид страницы на сервере по-прежнему сильно отличается от вида страницы на клиенте. Сервер должен иметь возможность разговаривать напрямую с базой данных, чего не следует делать из браузера. Браузер должен выполнять такие вещи, как манипулирование DOM, который не совпадает с сервером.
  2. Вы не управляете движком javascript клиента, а это означает, что все еще будут существенные языковые различия между кодом вашего сервера и кодом клиента.
  3. База данных обычно является более узким местом, чем веб-сервер, поэтому экономия минимальна.
  4. Хотя почти каждый знает небольшой JavaScript, немногие разработчики действительно знают и понимают Javascript хорошо .

Это не совсем неопровержимые технические проблемы: вы ограничиваете поддерживаемый сервером язык подмножеством javascript, который хорошо поддерживается в большинстве браузеров, предоставляете IDE, которая знает это подмножество и расширения на стороне сервера, устанавливаете некоторые правила о структуре страницы, чтобы минимизировать проблемы с DOM, и предоставить некоторый шаблонный javascript для включения на клиенте, чтобы сделать платформу немного приятнее в использовании. В результате получается что-то вроде Aptana Studio / Jaxer или совсем недавно Node.js, что может быть довольно неплохо.

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

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

6 голосов
/ 27 марта 2009

Я думаю, что действительно классное использование Javascript на стороне сервера, которое используется не достаточно часто, предназначено для проверки данных. С его помощью вы можете написать один файл javascript для проверки формы, проверить его на стороне клиента, а затем проверить еще раз на стороне сервера, потому что мы не должны ничего доверять на стороне клиента. Это позволяет вам сохранить ваши правила проверки СУХОЙ. Довольно удобно.

Также см .:

3 голосов
/ 27 марта 2009

Javascript - это очень хороший язык с основой стиля прототипа self / схема и синтаксисом стиля C. Есть некоторые проблемы, см. Javascript the Good Parts, но в целом это первоклассный язык. Проблема в том, что большинство программистов на JavaScript - ужасные программисты, потому что они очень доступны для начала.

Одна команда в Google создала Rhino on Rails, которая представляет собой среду MVC, подобную Ruby on Rails, которая написана на javascript и работает на Rhino - интерпретаторе javascript для Java VM. В этом случае у них было требование использовать Java VM, но они хотели получить язык, который был бы быстр (javascript быстр), поддерживал типизацию утки и был гибким.

Другой пример - что-то вроде CouchDB, базы данных, ориентированной на документы, которая использует json в качестве транспортного формата и javascript в качестве языка запросов и индексов. Они хотели, чтобы база данных была как можно более родной.

Javascript отлично подходит для манипулирования строками и dom (xml), работы в песочнице, работы в сети, расширения и т. Д. Подобные функции часто используются при разработке веб-приложений.

Все это говорит о том, что я на самом деле не разрабатываю серверный JavaScript. Это неплохая идея, но определенно менее распространенная.

3 голосов
/ 27 марта 2009

Javascript это просто язык. Поскольку это всего лишь язык, вы можете использовать его где угодно ... в своем браузере, на сервере, встраивать в другие приложения, автономные приложения и т. Д.

При этом я не знаю, что с "Server Javascript" происходит много новых разработок

1 голос
/ 28 марта 2009

Мы используем javascript на клиенте, потому что он есть, а не потому, что из списка языков это был наш выбор. Я не выбрал бы это для любой рутины на сервере.

Вы можете запускать на сервере любой язык, который вам нравится, фактически столько, сколько вам нужно.

JavaScript надежен и прост в использовании, но он слишком трудоемок для обычных задач на сервере.

...