Pregunta

Recién comencé a experimentar con Aptana Jaxer Motor javascript del lado del servidor para mi próximo proyecto.Y tengo algunas preguntas sobre eso.

  • Al utilizar JS del lado del servidor, podemos implementar toda la aplicación web sin utilizar ningún lenguaje del lado del servidor (como C#, Java, etc.).O el JS del lado del servidor se encuentra entre el servidor web y la pila de otros idiomas.

  • ¿Es realmente un mejor enfoque?

  • ¿Cuáles son las ventajas y desventajas?

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

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

  • ¿Cuáles son las alternativas disponibles sobre Aptana jaxer (código abierto)?

  • ¿Qué tan bien podemos implementar y mantener transacciones de base de datos?¿Podemos hacer eso en el servidor JS...?

  • ¿Es posible desarrollar servicios RESTFul y SOAP en JS del lado del servidor?

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

EDITAR:

Según los comentarios de Matthew y Ken, he agregado algo de claridad a la pregunta. ¿Es realmente un mejor enfoque?

esto es lo que pretendo preguntar..

¿Es realmente un mejor enfoque que usar lenguajes del lado del servidor (supongamos C#)? ¿Cómo podemos comparar esto con la implementación de C# de un sitio web (rendimiento, características del lenguaje)?¿Y cuál es un mejor enfoque, usar JS solo en el lado del servidor o JS en la capa intermedia entre la pila de otros idiomas y el servidor web?

¿Fue útil?

Solución

Soy el desarrollador de miná (www.mynajs.org), una plataforma JS del lado del servidor de código abierto basada en Rhino y Java.Abordaré los problemas relacionados con Myna, pero muchos de estos puntos se aplican al JS del lado del servidor en general:

Al utilizar JS del lado del servidor, podemos implementar toda la aplicación web sin utilizar ningún lenguaje del lado del servidor (como C#, Java, etc.).O el JS del lado del servidor se encuentra entre el servidor web y la pila de otros idiomas.

En Myna es posible escribir toda tu aplicación en JS.Myna ya incluye API para acceso a bases de datos, mapeo relacional de objetos, critogrofia, OpenID, etc.

¿Es realmente un mejor enfoque que c#/Java?

Con un servidor basado en Rhino, es trivial recurrir a Java cuando sea necesario.Puede instalar fácilmente bibliotecas Java de código abierto/comerciales/codificadas a mano y luego escribirlas 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?

ventajas:

  • Desarrollo rápido:En Myna simplemente crea archivos en webroot con una extensión .sjs.Esto significa que puede crear un ciclo de editar, guardar y actualizar el navegador que es muy rápido para depurar/modificar el código.

  • JSON fácil:Tener soporte JS en el lado del servidor significa que mover estructuras complejas es muy fácil

  • Código compartido:Si necesita realizar la misma función tanto en el servidor como en el navegador, puede usar el mismo código

  • ORM dinámico:Los lenguajes compilados de tipo estático dificultan la modificación de objetos en tiempo de ejecución.Por lo general, esto significa que ORM debe definirse de antemano.En Myna, construir ORM es tan simple como

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

    Obtiene un objeto que puede realizar todas las operaciones CRUD básicas sin definir explícitamente las tablas de base de datos.Como otro ejemplo, puedes insertar una fila con todos los valores coincidentes de una publicación de formulario:

    manager.create($req.data);
    
  • Programación funcional:Si ha comenzado a jugar con funciones avanzadas de JavaScript, apreciará lo útiles que son en el lado del servidor.Debido al entorno consistente del lado del servidor, es seguro utilizar funciones avanzadas como Extras de matriz, generadores e iteradores, tareas desestructurantes, y E4X

contras:

  • Herramientas:Los lenguajes de tipo estático como C# y Java tienen excelentes herramientas de desarrollo y IDE.Los lenguajes dinámicos como JS simplemente aún no cuentan con soporte para herramientas.Personalmente, creo que la gran reducción en el código repetitivo y la complicada conversión de tipos compensan esto, pero esto sigue siendo una gran desventaja si ha estado desarrollando mucho en IDE.Si actualmente está utilizando un IDE, considere usar jedit para lenguajes dinámicos

  • Madurez/Estandarización:Serverside JS sigue siendo un paradigma nuevo y hay muchos jugadores y no hay ganadores claros.ECMA no tiene ningún estándar para JS del lado del servidor.Como se menciona en la respuesta de Brandon, el JS común El grupo está intentando formar un estándar JS en el servidor y Myna tiene soporte experimental para CommonJS a través de Narval

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

En velocidad computacional bruta, pocos lenguajes dinámicos pueden igualar los lenguajes compilados de tipo estático como C# y Java.Dicho esto, realmente no importa.Cualquier parte de su aplicación que requiera un uso intensivo de computación probablemente debería escribirse en Java o utilizar una biblioteca Java existente.No sugeriría que nadie escriba una base de datos en JS, por ejemplo.Para las aplicaciones web/servicios SOA del mundo real, la causa principal de las ralentizaciones no es la velocidad computacional bruta, sino el código ineficiente, especialmente el acceso a la base de datos.Myna ayuda con esto haciendo cosas como:

  • almacenamiento en caché interno de scripts JS compilados
  • Uso interno de declaraciones preparadas en caché para transacciones de bases de datos
  • Almacenamiento en caché de fragmentos de salida y consultas
  • Agrupación de conexiones de bases de datos
  • Soporte automático de hash ETag
  • Herramientas de creación de perfiles
  • Carga diferida de metadatos

¿Qué tan bien podemos implementar y mantener transacciones de base de datos?¿Podemos hacer eso en el servidor JS...?

Si te refieres a transacción como en "un conjunto de declaraciones SQL que pueden revertirse o confirmarse", entonces 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 del lado del servidor?" Entonces la respuesta depende de la plataforma.La plataforma Myna proporciona las siguientes funciones de base de datos:

  • Una aplicación de administración basada en web donde puede definir "fuentes de datos", es decir, información de conexión a la base de datos.Luego puede consultar estas fuentes de datos por nombre.Myna incluye controladores JDBC para H2, MySQL, Microsoft SQL Server y Postgresql, pero se puede utilizar cualquier fuente de datos JDBC u ODBC.
  • Myna.Base de datos y Myna.Mesa Proporciona acceso a metadatos neutral a la base de datos, así como creación y modificación de tablas.
  • miná Consulta El objeto admite maxRows, paginación, parámetros SQL, controladores de filas personalizados, consulta de consulta, almacenamiento en caché y más.
  • miná Administrador de datos El objeto admite la creación de objetos ORM en tiempo de ejecución.

¿Es posible desarrollar servicios RESTFul y SOAP en JS del lado del servidor?

La compatibilidad con REST y SOAP son características específicas de la plataforma.miná Servicio web El objeto admite los siguientes protocolos:

  • JABÓN
  • XML-RPC
  • JSON-RPC
  • Ext directo
  • JSON-MYNA (un protocolo simple que usa publicaciones normales de forma y devuelve JSON.Fácil de usar desde el navegador)

Myna también comprende los métodos de solicitud PUT y DELETE y presenta el acceso al contenido del cuerpo de la solicitud tanto en texto como en formato binario, de modo que es posible manejar estos métodos RESTful de una manera específica de la aplicación.

Depuración

La depuración tradicional de puntos de interrupción es un verdadero desafío en el lado del servidor.Aunque Rhino admite ganchos de depuración, usarlos desde una aplicación web sin estado sería bastante complicado.Personalmente, ni siquiera uso depuradores de puntos de interrupción incluso cuando están disponibles (p. ej.chinche).En lugar de eso, prefiero iniciar sesión.

En Myna,

 Myna.log(type,label,detail)

generará un hilo de baja prioridad para escribir un mensaje de registro HTML en la base de datos de registro de Myna.Luego, 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 elaboración de perfiles.Myna.dump(obj) también se puede utilizar para presentar una representación de tabla HTML de cualquier objeto.Myna también registra todas las excepciones no controladas con seguimientos de pila, contexto del código fuente y detalles de la solicitud.Entre dump(), log() y el controlador de errores predeterminado, no tengo muchas dificultades para depurar el código Myna.

Otros consejos

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

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

¿Es realmente un mejor enfoque?

No creo que JavaScript (como lenguaje) sea realmente una opción mejor o peor que los lenguajes tradicionales del lado del servidor.Tiene ventajas (junto con otros lenguajes dinámicos como Ruby y Python) como flexibilidad, creación rápida de prototipos (sin juego de palabras), flexibilidad, etc.Por otro lado, no tiene el soporte de biblioteca que tienen Java y C# ni escritura estática (no entraré en el debate sobre cuál es mejor aquí;Me gustan ambos por diferentes motivos).

Si desea lo mejor de ambos, puede utilizar JavaScript como lenguaje de programación, integrado en su aplicación.Rhino para Java y JScript.NET facilitan la manipulación de objetos "nativos" en JavaScript.Podría, por ejemplo, escribir las clases de su dominio en Java o C# y crear secuencias de comandos con JavaScript cuando desee mayor flexibilidad.Sin embargo, si se siente lo suficientemente cómodo con JavaScript, escribir en un solo idioma puede ser más sencillo.

Nunca he escrito una aplicación "real" del lado del servidor usando JavaScript, por lo que realmente no puedo juzgar si es mejor o peor que .NET (tampoco he usado nunca JScript.NET).He jugado 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 mucho).

¿Cuáles son las ventajas y desventajas?

Ventajas:

  • Solo se necesita un lenguaje para la programación del lado del servidor y del lado del cliente.
  • Posibilidad de código compartido, para cosas como validación de formularios.Jaxer te permite ejecutar scripts en el cliente, el servidor o ambos.
  • Puedes programar en JavaScript (suponiendo que te guste el lenguaje).

Desventajas:

  • Muchos marcos son experimentales o no muy maduros.
  • Tienes que programar en JavaScript (suponiendo que no te guste el lenguaje).

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

El rendimiento debería ser aproximadamente comparable al de otros lenguajes de programación.

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

No conozco ningún sitio web grande que utilice JavaScript, pero puede que haya alguno.

¿Cuáles son las alternativas disponibles sobre Aptana jaxer (código abierto)?

Wikipedia tiene un gran lista de opciones, pero no tiene mucha información útil.Hay muchas opciones con una amplia gama en madurez y tamaño.

Aquí hay algunos con los que estoy familiarizado (en distintos grados)

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

¿Qué tan bien podemos implementar y mantener transacciones de base de datos?¿Podemos hacer eso en el servidor JS...?

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

¿Es posible desarrollar servicios RESTFul y SOAP en JS del lado del servidor?

Las API RESTful no deberían ser ningún problema.No conozco ningún soporte específico para SOAP, pero debería serlo. posible.

Como prefacio, yo uso SSJS en mi trabajo del día. Corremos un sitio web bastante grande (en términos de complejidad, así como vistas de página) en SpiderMonkey. Voy a añadir a la excelente respuesta de Mateo en el que tengo experiencia.

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

"mejor" realmente depende de lo que quiere hacer con ella. JavaScript en sí tiene algunas funciones muy útiles, así como los bastante terribles. Si usted es serio sobre el desarrollo de JS (cliente o servidor), no puedo recomendar que usted mira la presentación de Douglas Crockford, Javascript: las partes buenas si no lo ha hecho. Ha hecho un trabajo fantástico la clasificación de la costra, y él es un excelente orador para arrancar.

Lo más importante que me parece el mundo SSJS que carece en este momento es la madurez. No estoy familiarizado con C #, pero no tiene JavaScript biblioteca estándar madura, y ningún medio maduros de distribución de paquetes. Para mí eso es una gran pieza del rompecabezas.

Dicho esto, mantener el ojo en la href="http://wiki.commonjs.org/wiki/CommonJS" rel="nofollow noreferrer"> CommonJS grupo

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

JavaScript en sí no es un lenguaje lento, ni tampoco es una forma especialmente rápida. Como Mateo señaló, debe ser comparable a cualquier otro lenguaje de script que usaría. La guerra entre los proveedores de navegadores para ver quién puede construir el navegador más rápido beneficiará a la multitud SSJS también.

La recolección de basura generacional que el equipo V8 construir en su motor es un gran ejemplo de esto. La detención de la máquina virtual para liberar los objetos inaccesibles desde el montón y recuperar su memoria puede ser algo lento, pero han mitigado que al reducir la cantidad de objetos que deben ser inspeccionados cuando el recolector de basura se ejecuta.

lo bien que podemos aplicar y mantener transacciones db? podemos hacer que en serverside JS ..?

Jaxer parece tener las API de base de datos MySQL y SQLite. Como se mencionó Mateo, si se utiliza Rhino, puede utilizar la API JDBC.

Editar : Enlaces añadidos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top