2009-09-25 19 views
16

Acabo de comenzar a experimentar con el motor de JavaScript del lado del servidor Aptana Jaxer para mi próximo proyecto. Y tengo unos quesions sobre quepros y contras de la implementación javascript de serverside?

  • Mediante el uso del lado del servidor JS, podemos poner en práctica toda la aplicación web sin necesidad de utilizar ningún lenguajes del lado del servidor (como C#, Java, etc.). O JS del lado del servidor se encuentra entre el servidor web y otra pila de idioma.

  • ¿Es realmente un mejor enfoque?

  • ¿Cuáles son los adelantos y las desventajas?

  • ¿cómo funciona esto bien en términos de rendimiento?

  • ¿Hay alguna implementación en tiempo real (sitios web públicos) solo que utilice JS del lado del servidor (sin otros idiomas)?

  • ¿Cuáles son las alternativas disponibles sobre Aptana jaxer (fuente abierta)?

  • ¿qué tan bien podemos implementar & maitain db transactions? podemos hacer eso en el servidor JS ..?

  • ¿es posible desarrollar servicios RESTFul y SOAP en serverside JS .. ??

Sé que esto es demasiado largo (y preguntas ingenuas). Solo espero que alguien ya haya encontrado todo esto mientras implementa JS en el servidor.

EDIT:

Según Mateo & comentarios Ken, he añadido un poco de claridad a la pregunta ¿Es realmente un mejor enfoque ??

esto es lo que tengo la intención de preguntar ..

¿Es realmente un enfoque mejor que usar lenguajes del lado del servidor (asumir C#), ¿cómo podemos comparar esto con el C# aplicación de un sitio web (rendimiento, el lenguaje caracteristicas)?? ¿Y cuál es un mejor enfoque, usando JS solo en el servidor o JS en la capa intermedia entre otra pila de idiomas y servidor web?

Respuesta

19

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

+0

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

+0

Actualicé con la depuración, y arreglé los enlaces de Myna doc para que se muestren en la respuesta. –

+0

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

12

Al usar JS en el lado del servidor, podemos implementar toda la aplicación web sin utilizar ningún idioma del lado del servidor (como C#, Java, etc.).

No debería ser necesario escribir código en ningún otro idioma, aunque muchos frameworks de JavaScript del lado del servidor usan el motor de Rhino, que le permite llamar a cualquier código de Java.

¿Es realmente un mejor enfoque?

No creo que JavaScript (como idioma) sea realmente una opción mejor o peor que los lenguajes de servidor tradicionales. Tiene ventajas (junto con otros lenguajes dinámicos como Ruby y Python) como flexibilidad, prototipado rápido (sin juego de palabras), flexibilidad, etc.Por otro lado, no tiene el soporte de biblioteca que Java y C# tienen o tipeo estático (no entraré en el debate sobre cuál es mejor aquí, me gustan ambos por diferentes razones).

Si quieres lo mejor de ambos, puede utilizar JavaScript como un lenguaje de script, incrustado en su aplicación. Rhino para Java y JScript.NET facilitan la manipulación de objetos "nativos" en JavaScript. Podría, por ejemplo, escribir sus clases de dominio en Java o C#, y guiarlas con JavaScript donde desee más flexibilidad. Si te sientes lo suficientemente cómodo con JavaScript, escribir en un solo idioma puede ser más simple.

Nunca he escrito una aplicación del lado del servidor "real" usando JavaScript, por lo que realmente no puedo juzgar si es mejor o peor que .NET (nunca he usado JScript.NET). Sin embargo, he jugado un poco con algunos frameworks por diversión y actualmente estoy reescribiendo mi sitio personal usando Helma NG. Hasta ahora ha sido una buena experiencia (mucho mejor que PHP, que nunca me ha gustado).

¿cuáles son las advandages y disadvandages?

Advantanges:

  • Sólo un lenguaje necesario para el lado del servidor y programación del lado del cliente.
  • Posibilidad de código compartido, para cosas como la validación de formularios. Jaxer le permite ejecutar scripts en el cliente, servidor o ambos.
  • Tienes la posibilidad de programar en JavaScript (suponiendo que te gusta el idioma).

Desventajas:

  • Muchos marcos son experimentales/no muy maduro.
  • Tienes que programar en JavaScript (suponiendo que no te gusta el idioma).

¿cómo funciona esto bien en términos de rendimiento?

rendimiento debería ser aproximadamente comparable al de otros lenguajes de script.

¿hay alguna aplicación en tiempo real (sitios web públicos) utilizando únicamente del lado del servidor JS (sin otros idiomas)?

no sé de ningún grandes sitios web utilizando JavaScript, pero puede haber alguna.

¿cuáles son las alternativas disponibles sobre Aptana Jaxer (open source) ??

Wikipedia tiene una lista de large list of options, pero no tiene mucha información útil. Hay muchas opciones con un amplio rango de madurez y tamaño.

Aquí están algunos que estoy familiarizado con (en diversos grados)

  • Helma - Rhino (Java) con el marco basado en registro activo.
  • Helma NG - Helma Next Generation (reescritura experimental, en desarrollo activo).
  • Phobos - Tiene un buen soporte en NetBeans.
  • v8cgi - Pequeño y simple, utiliza el motor V8 de Google, probablemente aún no está listo para la producción.
  • Jaxer - Se ejecuta en Spidermonkey con una implementación de DOM, por lo que puede manipular la página con frameworks como jQuery o Prototype. Tiene un buen soporte IDE en Aptana Studio.

¿qué tan bien podemos implementar & mantener transacciones de db? podemos hacer eso en el servidor JS ..?

Los marcos basados ​​en Rhino le permiten usar clases Java, por lo que tiene soporte completo para JDBC. No he usado las bibliotecas de bases de datos de Jaxer, así que no sé nada sobre sus capacidades.

¿es posible desarrollar servicios RESTFul y SOAP en serverside JS .. ??

Las API RESTful no deberían ser un problema. No sé de ningún soporte específico para SOAP, pero debería ser posible.

+0

gracias a Matthew por tomarse su tiempo para responder a mi pregunta. He actualizado mi pregunta para "¿Es realmente mejor? ¿¿enfoque??" sección ... – RameshVel

+0

Buena respuesta. ¿Y el autor simplemente cambió la pregunta después de que la respondiste? Si es así, esa es una forma pobre ... – ken

+0

@ken, no cambiaría la pregunta ... necesitaría algo de información sobre "¿Es realmente un mejor enfoque?" ... así que solo agregué algo de claridad sobre esa pregunta (solo) ... Puedes consultar el historial de revisión si quieres ... :( – RameshVel

6

Como prefacio, uso SSJS en mi trabajo diario. Ejecutamos un sitio web razonablemente grande (en términos de complejidad y páginas vistas) en SpiderMonkey. Agregaré a la excelente respuesta de Matthew donde tengo experiencia.

¿Es realmente un enfoque mejor que usar lenguajes del lado del servidor (asumir C#)

"mejor" realmente depende de lo que quieres hacer con ella. JavaScript en sí tiene algunas características excelentes, así como algunas muy malas. Si se toma en serio el desarrollo de JS (cliente o servidor), no puedo recomendarle que vea la presentación de Douglas Crockford, Javascript: The Good Parts si aún no lo ha hecho. Ha hecho un trabajo fantástico clasificando el cruft, y es un excelente orador para arrancar.

Lo que más me parece que falta en el mundo SSJS ahora es la madurez. No estoy familiarizado con C#, pero JavaScript no tiene una biblioteca estándar madura, ni medios maduros para la distribución de paquetes. Para mí esa es una gran pieza del rompecabezas.

Dicho esto, esté atento al grupo CommonJS. Están trabajando para definir esas cosas exactas. Además, la documentación de Jaxer Api enumera los integrables que se incluyen con ese marco.

¿cómo funciona esto bien en términos de rendimiento?

JavaScript en sí mismo no es un lenguaje lento, ni es particularmente rápido. Como Matthew señaló, debería ser comparable a cualquier otro lenguaje de scripting que usarías. La guerra entre los proveedores de navegadores para ver quién puede construir el navegador más rápido también beneficiará a la multitud de SSJS.

La colección de basura generacional que el equipo V8 incorpora a su motor es un gran ejemplo de esto. Detener la máquina virtual para liberar objetos inalcanzables del montón y reclamar su memoria puede ser algo lento, pero lo han mitigado al reducir la cantidad de objetos que deben inspeccionarse cuando se ejecuta el recolector de elementos no utilizados.

¿qué tan bien podemos implementar & mantener transacciones de db? podemos hacer eso en el servidor JS ..?

Jaxer parece tener las API de base de datos MySQL y SQLite. Como mencionó Matthew, si usas Rhino, puedes usar la api JDBC.

Editar: Añadido enlaces

+0

gracias a Brandon por compartir tu experiencia en SSJS ... – RameshVel