Подтвердить что ты не робот

Плюсы и минусы реализации javascript serveride?

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

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

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

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

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

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

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

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

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

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

EDIT:

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

плюсы:

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

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

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

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

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

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

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

минусы:

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

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

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

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

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

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

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

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

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

возможно создание служб RESTFul и SOAP на серверах JS..

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

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

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

Отладка

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

В Myna,

 Myna.log(type,label,detail)

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

Ответ 2

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

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

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

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

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

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

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

Advantanges:

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

Недостатки:

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

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

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

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

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

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

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

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

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

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

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

возможно создание служб RESTFul и SOAP на серверах JS..

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

Ответ 3

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

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

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

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

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

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

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

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

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

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

Изменить: добавлены ссылки