Я разработчик для 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
Mark, Приятно видеть эти точки от основного разработчика SSJS. Большое спасибо за вашу поддержку. Я играю с Jaxer. Defenelty я посмотрю на myna. Из вашего ответа myna выглядит многообещающим. И если возможно, вы можете отредактировать свой ответ w с возможностями отладки на стороне сервера SSJS. – RameshVel
Я обновил с помощью отладки и исправил ссылки Myna doc, чтобы они отображались в ответе. –
спасибо за обновление Mark., Отладка отрывков является главной проблемой для таких парней, как я, чья более ранняя разработка полностью в VS IDE. Мне было очень сложно. Jaxer также поддерживает поддержку отладки точки останова. У вас есть планы на будущее, реализующие вашу собственную среду IDE с поддержкой отладки от точки останова? – RameshVel