2009-09-25 2 views
16

Я только что начал экспериментировать с механизмом JavaScript на стороне сервера Aptana Jaxer для моего следующего проекта. И у меня есть несколько quesions о томплюсы и минусы реализации javascript serveride?

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

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

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

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

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

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

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

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

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

EDIT:

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

это то, что я намерен просить ..

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

ответ

19

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

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

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

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

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

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

плюсы:

  • Бурное развитие: В Майна вы просто создавать файлы в корневой директории с .sjs расширением. Это означает, что вы можете создать цикл браузера редактирования-обновления-обновления, очень быстрый для кода отладки/настройки.

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

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

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

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

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

    manager.create($req.data); 
    
  • Функциональной Programing: Если вы начали играть с усовершенствованным JavaScript Характеристики тогда вы сможете оценить, насколько полезными они server- боковая сторона. Из-за последовательную серверную среду безопасно использовать расширенные функции, такие как Array Extras, generators and iterators, destructuring assignments и E4X

минусов:

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

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

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

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

  • внутренне Кэширования скомпилированных JS скрипты
  • Внутренне используя кэшированные подготовленные заявления для транзакций базы данных
  • запросов и вывод фрагмент Кэширование
  • соединения
  • базы данных объединения
  • Автоматической ETag хеш-опоры
  • Профилирующие инструменты
  • Ленивая загрузка метаданных

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

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

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

  • Приложение для администрирования через Интернет, в котором вы можете определить «источники данных», например, информацию о подключении к базе данных. Затем вы можете запросить эти источники данных по имени. Myna включает в себя драйверы JDBC для H2, MySQL, Microsoft SQL Server и Postgresql, но можно использовать любой источник данных JDBC или ODBC
  • Myna.Database и Myna.Table обеспечивают доступ к метаданным без базы данных, а также создание и изменение таблиц. Query объекта
  • Майна поддерживает maxRows, пейджинг, параметры SQL, обработчик пользовательских строк, запросы из-запроса, кэширование и более
  • DataManager объекта поддерживает создание объекта во время выполнения ОРМА Майна в

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

Поддержка REST и SOAP - это специфические особенности платформы. WebService объект Майна поддерживает следующие протоколы:

  • SOAP
  • XML-RPC
  • JSON-RPC
  • Ext Direct
  • JSON-Майна (простой протокол, который использует обычные сообщения формы и возвращает JSON. Прост в использовании из браузера)

Myna также понимает метод запроса PUT и DELETE s и предоставляет доступ к содержимому тела запроса как в текстовой, так и в двоичной форме, так что можно обрабатывать эти методы RESTful конкретным образом.

Debugging

Традиционная точка останова отладки является реальной проблемой серверной. Хотя Rhino поддерживает отладчик-крючки, использование этих средств из веб-приложения без состояния будет довольно привлекательным. Лично я даже не использую отладчики точки останова, даже когда они доступны (например, firebug). Вместо этого я предпочитаю вести журнал.

В Майна,

Myna.log(type,label,detail) 

породит низкий приоритет нитяным написать сообщение журнала HTML в базу данных журналов Майна в. Затем эти журналы можно найти через администратора Myna. Журналы также записывают временные метки и истекшие миллисекунды для профилирования. Myna.dump (obj) также может использоваться для представления представления таблицы HTML любого объекта. Myna также регистрирует все не обработанные исключения со стековыми трассировками, контекстом исходного кода и запросами. Между dump(), log() и обработчиком ошибок по умолчанию у меня не так много сложностей с отладкой Myna code

+0

Mark, Приятно видеть эти точки от основного разработчика SSJS. Большое спасибо за вашу поддержку. Я играю с Jaxer. Defenelty я посмотрю на myna. Из вашего ответа myna выглядит многообещающим. И если возможно, вы можете отредактировать свой ответ w с возможностями отладки на стороне сервера SSJS. – RameshVel

+0

Я обновил с помощью отладки и исправил ссылки Myna doc, чтобы они отображались в ответе. –

+0

спасибо за обновление Mark., Отладка отрывков является главной проблемой для таких парней, как я, чья более ранняя разработка полностью в VS IDE. Мне было очень сложно. Jaxer также поддерживает поддержку отладки точки останова. У вас есть планы на будущее, реализующие вашу собственную среду IDE с поддержкой отладки от точки останова? – RameshVel

12

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

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

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

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

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

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

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

Advantanges:

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

Недостатки:

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

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

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

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

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

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

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

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

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

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

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

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

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

+0

благодарит Мэтью за то, что вы не торопитесь ответить на мой вопрос .. Я обновил свой вопрос: «Разве это действительно лучше подход??" раздел ... – RameshVel

+0

Хороший ответ. И автор просто изменил вопрос после того, как вы ответили на него? Если да, то это плохая форма ... – ken

+0

@ken, я меняю вопрос ... Мэтью нуждалась в некоторой информации о «Это действительно лучший подход?», Поэтому я просто добавил некоторую ясность в этот вопрос (один) ... Вы можете проверить историю изменений если вы хотите ... :( – RameshVel

6

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

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

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

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

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

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

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

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

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

У Jaxer есть API-интерфейсы базы данных MySQL и SQLite. Как отметил Матфей, ​​если вы используете Rhino, вы можете использовать JDBC api.

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

+0

спасибо Брэндон за то, что поделился своим опытом в SSJS ... – RameshVel