Yo soy el programador de Myna (www.mynajs.org), una plataforma de servidor JS código abierto basado en Rhino y Java. Voy a abordar las cuestiones que se refieren a Myna, pero muchos de estos puntos se aplican a del lado del servidor, en general, JS:
Mediante el uso del lado del servidor JS, podemos poner en práctica toda la aplicación web sin necesidad de utilizar ningún lado del servidor idiomas (como C#, Java, etc.). O JS del lado del servidor se encuentra entre el servidor web y otra pila de idioma.
En Myna es posible escribir toda su aplicación en JS. Myna ya incluye API para acceso a la base de datos, mapeo relacional de objetos, criocofia, OpenID, etc.
¿Es realmente un mejor enfoque que C#/Java?
Con un servidor basado en Rhino, es trivial bajar a Java siempre que sea necesario. Puede instalar fácilmente bibliotecas Java de código abierto/comercial/codificado a mano y luego guiarlas desde JS. Esto significa que obtiene el rápido desarrollo de JS pero mantiene las ventajas de la plataforma Java
¿Cuáles son las ventajas y desventajas?
pros:
de desarrollo rápido: En Myna que acaba de crear archivos en la web raíz con una extensión .sjs. Esto significa que puede crear un ciclo de navegador edit-save-refresh que es muy rápido para depurar/ajustar código.
Fácil JSON: Tener JS del lado del servidor medios de soporte se mueve estructuras complejas es muy fácil
código compartido: Si necesita realizar el la misma función en el servidor y el navegador, puede usar el mismo código
ORM dinámico: los lenguajes compilados de tipo estático dificultan la alteración de los objetos en el tiempo de ejecución. Esto generalmente significa que ORM debe definirse de antemano. En Myna edificio ORM es tan simple como
var manager =new Myna.DataManager("DataSource name").getManager("table name");
Se obtiene un objeto que puede hacer todas las operaciones básicas CRUD sin definir de una manera explícita las tablas de datos.Como otro ejemplo, se puede insertar una fila con todos los valores coincidentes de un poste formulario:
manager.create($req.data);
Funcional Programación: Si ha empezado a jugar con un avanzado JavaScript Varios y luego usted podrá apreciar lo útiles que son servidor- lado. Debido al entorno de servidor coherente que es seguro de usar las características avanzadas tales como Array Extras, generators and iterators, destructuring assignments y E4X
contras:
Herramientas: lenguajes con tipos estáticos como C# y Java tiene excelentes IDE y herramientas de desarrollo. Los lenguajes dinámicos como JS simplemente aún no tienen la herramienta de soporte. Personalmente, considero que la gran reducción en el código repetitivo y el tipo exigente de fundición compensa esto, pero esto sigue siendo una gran desventaja si has estado haciendo un gran desarrollo en IDE. Si usted está usando un IDE, considere el uso de lenguajes dinámicos jedit
Madurez/Normalización: Serverside JS es todavía un nuevo paradigma, y hay muchos jugadores y no hay claros ganadores. ECMA no tiene ningún estándar para JS en el servidor. Como se mencionó en la respuesta de Brandon, el grupo CommonJS está tratando de formar un estándar JS serverside y Myna tiene soporte experimental a través de CommonJS Narwhal
cómo esto funciona bien en términos de rendimiento?
En velocidad computacional bruta, pocos lenguajes dinámicos pueden coincidir con lenguajes compilados tipados estáticamente como C# y Java. Habiendo dicho eso, realmente no importa. Cualquier parte de su aplicación que sea computacionalmente intensiva probablemente deba escribirse en Java o utilizar una biblioteca Java existente. No sugeriría que alguien escriba una Base de datos en JS, por ejemplo. Para las aplicaciones web del mundo real/servicios SOA, la causa principal de la desaceleración no es la velocidad computacional en bruto, es un código ineficiente, especialmente el acceso a la base de datos. Myna ayuda con esta haciendo cosas como:
- internamente almacenamiento en caché compilados guiones JS
- declaraciones preparadas internamente con caché de transacciones de bases de datos
- almacenamiento en caché de consultas y el fragmento de salida
conexión
- base de datos puesta en común
- ETag automática hash support
- Herramientas de creación de perfiles
- Carga lenta de metadatos
¿qué tan bien podemos implementar & mantener transacciones de db? podemos hacer eso en el servidor JS ..?
Si quiere decir transacción como en "un conjunto de sentencias de SQL que se pueden invertir o confirmar", Myna aún no admite transacciones. Estoy abierto a implementar esto si hay suficiente interés.
Si quiere decir "¿qué tipo de soporte de base de datos tiene JS en el servidor?" entonces la respuesta depende de la plataforma. La plataforma Myna proporciona las siguientes características de base de datos:
- Una aplicación de administración basada en web donde puede definir "orígenes de datos", es decir, información de conexión a la base de datos. A continuación, puede consultar estas fuentes de datos por su nombre. Myna incluye controladores JDBC para H2, MySQL, Microsoft SQL Server y Postgresql, pero se puede usar cualquier fuente de datos JDBC u ODBC
- Myna.Database y Myna.Table proporcionan acceso a metadatos neutral de base de datos, así como la creación y modificación de tablas. Query objeto
- de Myna apoya maxRows, paginación, los parámetros de SQL, manipuladores fila personalizada, consulta-de-consulta, el almacenamiento en caché y más
- DataManager objeto Soporta el funcionamiento ORM creación de objetos de Myna
es posible desarrollar servicios RESTFul y SOAP en el servidor JS .. ??
REST y soporte SOAP son características específicas de la plataforma. WebService objeto de Myna soporta los siguientes protocolos:
- de SOAP
- XML-RPC
- JSON-RPC
- Ext directa
- JSON-MYNA (un protocolo simple que utiliza mensajes y vuelve en forma normal JSON. Fácil de usar desde el navegador)
Myna también entiende el método de solicitud PUT y DELETE s y presenta el acceso para solicitar contenido del cuerpo tanto en texto como en forma binaria, de modo que es posible manejar estos métodos RESTful de una manera específica de la aplicación.
Depuración
punto de interrupción de depuración tradicional es un verdadero desafío serverside. Aunque Rhino admite ganchos de depurador, usarlos desde una aplicación web sin estado sería muy complicado. Personalmente, ni siquiera uso depuradores de punto de interrupción, incluso cuando están disponibles (por ejemplo, firebug). En cambio, prefiero iniciar sesión.
En Myna,
Myna.log(type,label,detail)
generará un subproceso de baja prioridad para escribir un mensaje de registro de base de datos de HTML para la tala de Myna. Estos registros se pueden buscar a través del Administrador de Myna. Los registros también registran marcas de tiempo y milisegundos transcurridos con fines de generación de perfiles. Myna.dump (obj) también se puede usar para presentar una representación de tabla HTML de cualquier objeto. Myna también registra todas las excepciones sin manejo con seguimientos de pila, contexto de código fuente y detalles de solicitud. Entre dump(), log() y el controlador de errores predeterminado no tengo mucha dificultad para depurar el código Myna
Mark, es bueno ver estos puntos del desarrollador principal de SSJS. Muchas gracias por su apoyo. Actualmente estoy jugando con Jaxer. Defenelty iré al myna. De su respuesta myna parece prometedora. Y si es posible, podría usted por favor editar su respuesta. con capacidades de depuración del lado del servidor SSJS. – RameshVel
Actualicé con la depuración, y arreglé los enlaces de Myna doc para que se muestren en la respuesta. –
gracias por la actualización de Mark., La depuración de punto de interrupción es la principal preocupación para los tipos como yo cuyo desarrollo anterior completamente en VS IDE. Encontré que es muy difícil. Jaxer también rechaza la depuración del punto de interrupción. ¿Tiene algún plan futuro para implementar su propio IDE con soporte de depuración de punto de interrupción? – RameshVel