Ответ 1
Это происходит следующим образом:
Серверы стоят дорого, но пользователи предоставят вам время обработки в своих браузерах бесплатно. Следовательно, серверный код относительно дорог по сравнению с клиентским кодом на любом сайте, достаточно большом, чтобы запускать более одного сервера. Однако есть некоторые вещи, которые вы не можете оставить клиенту, такие как проверка и извлечение данных. Вы хотите сделать это на клиенте, потому что это означает более быстрое время отклика для пользователей и меньше серверной инфраструктуры для вас самих, но для обеспечения безопасности и доступности требуется серверный код.
Что обычно происходит, вы оба делаете. Вы пишете логику на стороне сервера, потому что вам нужно, но вы также пишете одну и ту же логику в javascript в надежде на более быстрое реагирование на пользователя и сохранение некоторых серверов в некоторых ситуациях. Это особенно эффективно для кода проверки.
Поскольку мы все (в основном) программисты, здесь мы должны сразу заметить новую проблему. Там не только дополнительная работа по разработке двух наборов одной и той же логики, но и работа, связанная с ее поддержанием, неизбежные ошибки, возникающие в результате платформ, не очень хорошо сочетаются, и ошибки, возникающие по мере того, как реализации дрейфовали со временем.
Введите серверный javascript. Идея заключается в том, что вы можете писать код один раз, поэтому один и тот же код работает как на сервере, так и на клиенте. Это, по-видимому, решит большую часть проблемы: вы получаете полный набор логики как сервера, так и клиента, которые выполняются сразу, нет дрейфа и нет двойного обслуживания. Это также приятно, когда вашим разработчикам нужно знать только один язык для работы сервера и клиента.
К сожалению, в реальном мире это не так хорошо. Проблема в четыре раза:
- Вид сервера на странице по-прежнему сильно отличается от представления клиента на странице. Сервер должен иметь возможность делать такие вещи, как прямо разговаривать с базой данных, которая просто не должна выполняться в браузере. Браузеру нужно делать такие вещи, как манипулировать DOM, который не соответствует серверу.
- Вы не контролируете механизм JavaScript для клиента, то есть все еще будут важные языковые различия между вашим кодом сервера и кодом клиента.
- База данных обычно является более узким местом, чем веб-сервер, поэтому сбережения минимальны.
- Хотя почти каждый знает немного javascript, не многие разработчики действительно знают и хорошо разбираются в javascript.
Это не полностью неприступные технические проблемы: вы привязываете язык, поддерживаемый сервером, к подмножеству javascript, который хорошо поддерживается в большинстве браузеров, предоставляет среду IDE, которая знает это подмножество и серверные расширения, делает некоторые правила о структуре страницы, чтобы свести к минимуму проблемы DOM и предоставить некоторый javascript котельной для включения на клиенте, чтобы сделать платформу немного приятнее в использовании. Результат - нечто вроде Aptana Studio/Jaxer, или совсем недавно Node.js, что может быть довольно приятным.
Но не идеально. По моему мнению, слишком много проблем и проблем с совместимостью, чтобы сделать это действительно сияющим. В конечном счете, дополнительные серверы по-прежнему дешевы по сравнению с временем разработки, и большинство программистов могут быть намного более продуктивными с использованием чего-то другого, кроме javascript.
То, что я действительно хотел бы видеть, - частичный серверный javascript. Когда запрашивается страница или представленная форма, серверная платформа запрашивает проверку в javascript, возможно, в качестве плагина на веб-сервере, который полностью независим от остальной части, но ответ создается с использованием платформы по вашему выбору.