плюсы и минусы реализации javascript на сервере?

Я только начал экспериментировать с Aptana Jaxer серверный движок javascript для моего следующего проекта. И у меня есть несколько вопросов об этом

  • используя серверную сторону JS, можем ли мы реализовать все веб-приложение без использования каких-либо серверных языков (например,C#, java и т. д.). Или серверная сторона JS находится между веб-сервером и другим стеком langauge.

  • Это действительно лучший подход ??

  • какие advandages и disadvandages?

  • Как это работает хорошо с точки зрения производительности?

  • есть ли реализация в реальном времени(общедоступные веб-сайты) только с использованием JS на стороне сервера (без других языков)?

  • какие альтернативы доступны через Aptana jaxer (с открытым исходным кодом)??

  • насколько хорошо мы можем реализовать транзакции & maitain db? можем ли мы сделать это в serverside JS..?

  • возможно ли разработать RESTFul и SOAP-сервисы в serverside JS..??

Я знаю, что это слишком долго (и наивные вопросы). Я просто надеюсь, что кто-то уже столкнулся со всем этим при реализации serverside JS.

EDIT:

согласно комментариям Matthew & Ken, я добавил некоторую ясность к вопросу это действительно лучший подход??

вот что я собираюсь спросить..

действительно ли это лучший подход, чем использование языков на стороне сервера (предположим, c#), как мы можем сравнить это с реализацией веб-сайта на C# (производительность, языковые функции)?? И какой из них является лучшим подходом, используя JS только в serverside или JS в среднем слое между другим языковым стеком и веб-сервером??

3 ответов


Я разработчик для Майны (www.mynajs.org), серверная платформа JS с открытым исходным кодом на основе Rhino и Java. Я рассмотрю проблемы, как они относятся к Myna, но многие из этих пунктов относятся к серверной стороне JS в целом:

используя серверную сторону JS, можем ли мы реализовать все веб-приложение без использования каких-либо серверных языков (например,C#, java и т. д.). Или серверная сторона JS сидит между веб-сервером и другим langauge стек.

В Myna можно написать все ваше приложение в JS. Myna уже включает API для доступа к базе данных, реляционного отображения объектов, критогрофии, OpenID и т. д.

действительно ли это лучший подход, чем c# / Java?

с сервером на основе Rhino тривиально опускаться до Java, когда это необходимо. Вы можете легко установить библиотеки Java с открытым исходным кодом/коммерческими/ручными кодами, а затем записать их из JS. Этот означает, что вы получаете быстрое развитие JS, но поддерживаете преимущества платформы Java

Какие преимущества и недостатки?

плюсы:

  • быстрое развитие: в Myna вы просто создаете файлы в webroot с помощью .расширение ССД. Это означает, что вы можете создать цикл редактирования-сохранения-обновления браузера с очень быстрым для отладки / настройки код.

  • Easy JSON: наличие поддержки JS на стороне сервера означает, что перемещение сложных структур очень легко

  • общий код: если нужно выполнить одну и ту же функцию на сервере и в браузере, вы можете использовать тот же код

  • динамический ORM: статически типизированные скомпилированные языки затрудняют изменение объектов во время выполнения. Это обычно означает, что ORM должен быть определяется заранее. В Myna building ORM так же просто, как

    var manager =new Myna.DataManager("DataSource name").getManager("table name");
    

    вы получаете объект, который может выполнять все основные операции CRUD без явного определения таблиц БД. В качестве другого примера вы можете вставить строку со всеми соответствующими значениями из сообщения формы:

    manager.create($req.data);
    
  • Функционального Программирования: если вы начали играть с расширенными функциями JavaScript, то вы оцените, насколько они полезны на стороне сервера. Из-за согласованная серверная среда безопасно использовать расширенные функции, такие как Массив Дополнительно, генераторы и итераторы, деструктурируется задания и в e4x

плюсы:

  • инструменты: статически типизированные языки, такие как C# и Java, имеют отличные инструменты IDE и разработчика. Динамические языки, такие как JS, просто еще не имеют поддержки инструментов. Лично я считаю, что большое сокращение шаблонного кода и суетливое литье типов компенсирует это, но это все еще большой недостаток, если вы много занимались разработкой в IDEs. Если вы используете IDE, рассмотрите возможность использования для jedit для динамических языков

  • Зрелость/Стандартизации: Serverside JS по-прежнему является новой парадигмой, и есть много игроков и нет явных победителей. ECMA не имеет никаких стандартов для serverside JS. Как упоминалось в Ответ Брэндона:CommonJS группа пытается сформировать стандарт serverside JS, и Myna имеет экспериментальную поддержку CommonJS через нарвал

как это работает хорошо с точки зрения производительности?

в необработанной вычислительной скорости несколько динамических языков могут соответствовать статически типизированным скомпилированным языкам, таким как C# и Java. Впрочем, это не имеет значения. Любая часть вашего приложения, вычислительно интенсивный, вероятно, должен быть написан на Java или использовать существующую библиотеку Java. Я бы не предложил, чтобы кто-нибудь писал базу данных в JS, например. Для реальных веб-приложений/SOA-сервисов основной причиной замедления является не необработанная вычислительная скорость, а неэффективный код, особенно доступ к базе данных. Myna помогает с этим, делая такие вещи, как:

  • внутренне кэширование скомпилированных сценариев JS
  • внутренне используя кэшированные подготовленные операторы для транзакции базы данных
  • кэширование запросов и выходных фрагментов
  • пул соединений с базой данных
  • автоматическая поддержка хэша ETag
  • инструменты профилирования
  • ленивая загрузка метаданных

насколько хорошо мы можем реализовать и поддерживать транзакции БД? можем ли мы сделать это в serverside JS..?

Если вы имеете в виду сделку как "набор инструкций SQL, которые могут быть отменены или совершено", то Myna пока не поддерживает транзакции. Я открыт для реализации этого, если есть достаточный интерес.

Если вы имеете в виду " какую поддержку базы данных имеет серверная JS?"тогда ответ зависит от платформы. Платформа Myna предоставляет следующие возможности базы данных:

  • веб-приложение администрирования, где вы можете определить "источники данных", i.e информация о подключении к базе данных. Затем можно запросить эти источники данных по имени. Myna включает драйверы JDBC для H2, MySQL, Microsoft SQL Server и Postgresql, но может использоваться любой источник данных jdbc или ODBC
  • Майны.База данных и Майны.Таблица БД-нейтральный метаданные, а также создание и модификация.
  • Майна это запрос объект поддерживает maxRows, пейджинг, параметры SQL, пользовательские обработчики строк, запрос запроса, кэширование и многое другое
  • Майна это DataManager объект поддерживает создание объекта ORM во время выполнения

возможно ли разработать RESTFul и SOAP-сервисы в serverside JS..??

поддержка REST и SOAP-это особенности платформы. Майна!--154-->веб-сервиса


используя серверную сторону JS, можем ли мы реализовать все веб-приложение без использования каких-либо серверных языков (например,C#, java и т. д.).

не должно быть необходимости писать код на любых других языках, хотя многие серверные JavaScript-фреймворки используют движок Rhino, который позволяет вызывать любой Java-код.

это действительно лучший подход??

Я не думаю, что JavaScript (как язык) действительно лучше или хуже вариант, чем традиционные языки на стороне сервера. Он имеет преимущества (наряду с другими динамическими языками, такими как Ruby и Python), как гибкость, быстрое прототипирование (без каламбура), гибкость и т. д. С другой стороны, у него нет поддержки библиотеки, Java и C# или статическая типизация (я не буду вдаваться в спор, что лучше здесь; мне нравятся оба по разным причинам).

Если вы хотите лучшее из обоих, вы можете использовать JavaScript в качестве языка сценариев, встраиваемый в ваши приложение. Носорог для Java, и JScript.NET облегчите управление "родными" объектами в JavaScript. Вы можете, например, написать классы домена на Java или C# и написать их с помощью JavaScript, где вы хотите больше гибкости. Если вам достаточно комфортно с JavaScript, писать на одном языке может быть проще.

Я никогда не писал "реальное" серверное приложение с использованием JavaScript, поэтому я не могу судить о том, лучше или хуже, чем .NET (Я также никогда не использовал JScript.NET). Я играл с несколькими фреймворками для удовольствия, и в настоящее время я переписываю свой личный сайт с помощью Helma NG. До сих пор это был хороший опыт (намного лучше, чем PHP, который мне никогда не нравился).

какие advandages и disadvandages?

Advantanges:

  • только один язык, необходимый для программирования на стороне сервера и клиента.
  • возможность совместного использования кода, для таких вещей, как проверка формы. Jaxer позволяет запускать сценарии на клиенте, сервере или обоих.
  • вы получаете программу на JavaScript (предполагая, что вам нравится язык).

недостатки:

  • многие рамки являются экспериментальными / не очень зрелыми.
  • вы должны программировать на JavaScript (предполагая, что вам не нравится язык).

как это работает хорошо с точки зрения представление?

производительность должна быть примерно сопоставима с другими языками сценариев.

существует ли реализация в реальном времени(общедоступные веб-сайты) только с использованием JS на стороне сервера (без других языков)?

Я не знаю больших веб-сайтов, использующих JavaScript, но могут быть некоторые.

какие альтернативы доступны через Aptana jaxer (с открытым исходным кодом)??

Википедия большие список опций, но у него мало полезной информации. Существует множество вариантов с широким диапазоном зрелости и размера.

вот несколько, с которыми я знаком (в разной степени)

  • Хельма - платформа на основе Rhino (Java) с активной записью.
  • Хельма НГ - Helma Next Generation (экспериментальная переписка, при активной разработке).
  • Фобос - имеет хорошую поддержка в NetBeans.
  • v8cgi - маленький и простой, использует двигатель V8 Google, вероятно, еще не готовый к производству.
  • Jaxer - работает на Spidermonkey с реализацией DOM, поэтому вы можете управлять страницей с помощью фреймворков, таких как jQuery или Prototype. Имеет хорошую поддержку IDE в Aptana Studio.

насколько хорошо мы можем реализовать и поддерживать транзакции БД? мы можем сделать это в серверной JS..?

рамки на основе Rhino позволяют использовать классы Java, поэтому у вас есть полная поддержка JDBC. Я не использовал библиотеки баз данных Jaxer, поэтому я ничего не знаю о его возможностях.

возможно ли разработать RESTFul и SOAP-сервисы в serverside JS..??

RESTful APIs не должно быть никаких проблем. Я не знаю какой-либо конкретной поддержки мыла, но это должно быть возможно.


в качестве предисловия я использую SSJS на своей дневной работе. Мы запускаем достаточно большой (с точки зрения сложности, а также просмотров страниц) веб-сайт на SpiderMonkey. Я добавлю к замечательному ответу Мэтью, где у меня есть опыт.

это действительно лучший подход, чем использование языков на стороне сервера (предположим, c#)

"лучше" действительно зависит от того, что вы хотите сделать с ним. Сам JavaScript имеет некоторые отличные функции, а также довольно ужасные. Если вы серьезно о разработке JS (клиент или сервер), я не могу рекомендовать достаточно высоко, чтобы вы смотрели презентацию Дугласа Крокфорда,Javascript: Хорошие Части если вы еще этого не сделали. Он проделал фантастическую работу по сортировке крафта, и он отличный оратор для загрузки.

самая большая вещь, которую я нахожу в мире SSJS сейчас не хватает, - это зрелость. Я не знаком с C#, но у JavaScript нет зрелой стандартной библиотеки и нет зрелых средств пакета распределение. Для меня это большая часть головоломки.

Что сказал, следите за CommonJS группы. Они работают над определением этих точных вещей. Кроме того, в документации Api Jaxer перечислены встроенные модули, которые включены в эту структуру.

как это работает хорошо с точки зрения производительности?

JavaScript сам по себе не является медленным языком, и он не является особенно быстрым. Как заметил Мэтью, так и должно быть. сопоставимый с любым другим языком сценариев, который вы бы использовали. Война между поставщиками браузеров, чтобы увидеть, кто может построить самый быстрый браузер, также принесет пользу толпе SSJS.

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

насколько хорошо мы сможем реализовать и поддерживать транзакции? можем ли мы сделать это в serverside JS..?

Jaxer, похоже, имеет API базы данных MySQL и SQLite. Как упоминал Мэтью, если вы используете Rhino, вы можете использовать api JDBC.

редактировать добавлены ссылки