Pregunta

Por el momento, el único lenguaje totalmente compatible y el estándar de facto para la manipulación del árbol DOM en el navegador es JavaScript.Parece que tiene profundos problemas de diseño que lo convierten en un campo minado de errores y agujeros de seguridad para los principiantes.

¿Conoce alguna iniciativa existente o planificada para introducir un lenguaje mejor (rediseñado) de cualquier tipo (no solo javascript) para la manipulación del árbol DOM y las solicitudes HTTP en los navegadores de próxima generación?En caso afirmativo, ¿cuál es la hoja de ruta para su integración en, digamos, Firefox, y en caso negativo, por qué motivos (aparte de la interoperabilidad) debería ser JavaScript el único lenguaje admitido en la plataforma del navegador?

Ya usé jQuery y también leí "javascript:las partes buenas".De hecho, las sugerencias son buenas, pero lo que no puedo entender es:¿Por qué sólo javascript?En el lado del servidor (su plataforma de sistema operativo favorito), podemos manipular un árbol DOM con cada idioma, incluso fortran.¿Por qué el lado del cliente (la plataforma del navegador) solo admite javascript?

¿Fue útil?

Solución

El problema con javascript no es el lenguaje en sí mismo - es un perfecto estado de prototipo y lenguaje dinámico. Si proviene de un entorno orientado a objetos que hay un poco de una curva de aprendizaje, pero no es culpa del idioma.

La mayoría de la gente asume que Javascript es como Java, ya que tiene una sintaxis similar y un nombre similar, pero en realidad es mucho más parecido a Lisp. En realidad es bastante bien adaptado a la manipulación del DOM.

El problema real es que es compilado por el navegador, y eso significa que funciona de una manera muy diferente dependiendo del cliente.

No sólo es el DOM real diferente dependiendo del navegador, pero hay una gran diferencia en el rendimiento y el diseño.


Editar siguiente aclaración de que se trate

Supongamos que fueron apoyados múltiples lenguajes interpretados - que todavía tiene los mismos problemas. Los diversos navegadores todavía estarían con errores y tienen diferentes departamentos de ultramar.

Además de que tendría que haber un intérprete integrado en el navegador o de alguna manera se instala como un tapón en (que se podía comprobar antes servida la página) para cada idioma. Se tardaron años Javascript consistente.

No se puede utilizar lenguajes compilados de la misma manera - entonces usted está introduciendo un ejecutable que no pueden ser fácilmente analizado por lo que hace. Muchos de los usuarios elegirían no se deja correr.

OK, así que ¿qué pasa con algún tipo de caja de arena para el código compilado? Suena como applets de Java para mí. O ActionScript en Flash. O C # en Silverlight.

¿Qué pasa con algún tipo de estándar de IL? Eso tiene más potencial. Desarrollarse en cualquier idioma que desee y luego compilarlo a la IL, que el navegador a continuación, los ECI.

A excepción, Javascript es una especie de ya que la IL - basta con ver GWT . Se le permite escribir programas en Java, pero distribuirlos como HTML y JS.


Editar siguiente aclaración adicional en cuestión

Javascript no es, o más bien fue no, el único lenguaje soportado por los navegadores: de nuevo en la edad oscura de Internet Explorer que podría elegir entre Javascript o VBScript para ejecutar en el IE. Técnicamente IE ni siquiera ejecutar JavaScript - que corrió JScript (principalmente para evitar tener que pagar por Sun la palabra java , Oracle todavía posee el nombre de Javascript ).

El problema era que VBScript era propiedad de Microsoft, sino también que no era muy buena. Mientras Javascript estaba añadiendo funcionalidad y conseguir herramientas de depuración de tasa superior en otros navegadores (como Firebug) VBScript permanecido IE-solamente y casi un-depurable (dev herramientas en Internet Explorer 4/5/6 eran no existía). Mientras tanto VBScript también se expandió para convertirse en una herramienta de scripting muy poderoso en el sistema operativo, pero ninguna de esas características estaban disponibles en el navegador (y cuando eran se convirtieron en enormes agujeros de seguridad).

Todavía hay algunas aplicaciones internas corporativas por ahí que utilizan VBScript (y algunos se basan en los agujeros de seguridad), y siguen corriendo IE7 (que sólo se detuvieron IE6 porque MS finalmente lo mató apagado).

Cómo Javascript a su estado actual ha sido una pesadilla y ha tomado 20 años. Todavía no tiene un apoyo constante, con las características del lenguaje (especificados en 1999) todavía falta en algunos navegadores y un montón de cuñas que se requiera.

Adición de un idioma alternativo para la interpretación en los navegadores se enfrenta a dos problemas principales:

  • Conseguir que todos los proveedores de navegadores para implementar el nuevo estándar del lenguaje -. Algo que todavía no se han logrado para el Javascript en 20 años

  • Una segunda lengua potencialmente diluye el apoyo que ya tiene, lo que permite (por ejemplo) IE tenga el soporte para Javascript segunda tasa mas grande VBScript (de nuevo). Realmente no quiero estar escribiendo código en diferentes lenguajes para diferentes navegadores.

No debe sered que Javascript no está 'terminado' - que todavía está evolucionando para convertirse mejor en los nuevos navegadores. El última versión está años por delante de de las implementaciones de los navegadores y que están trabajando en la siguiente.

Otros consejos

Compilar en Javascript

Por ahora, usar un lenguaje que se compila en Javascript parece ser la única forma realista de llegar a todas las plataformas mientras se escribe código más inteligente, y probablemente seguirá siendo así durante mucho tiempo.Con cualquier oferta nueva, siempre habrá alguna razón por la cual uno o más proveedores no se apresurarán a enviarla.

(Pero realmente no creo que esto sea un problema.Javascript ya se ha optimizado muy bien.El código de máquina tampoco es seguro si se escribe a mano, pero funciona bien como destino de compilación y lenguaje de ejecución).

Tantas opciones

Existe un grupo cada vez mayor de lenguajes que se compilan en Javascript.Puede encontrar una lista bastante completa aquí:

Notable

Mencionaré algunos que creo que son dignos de mención (aunque sin duda dejaré de lado algunas joyas que desconozco):

  • Araña apareció en 2016.Afirma tomar las mejores ideas de Go, Swift, Python, C# y CoffeeScript.No es seguro para tipos, pero tiene algunos problemas menores. Caracteristicas de seguridad.

  • Olmo:Haskell puede ser el lenguaje más inteligente De todos ellos, y Elm es una variante de Haskell para Javascript.Es muy consciente de los tipos de letra y conciso, y ofrece Programación reactiva funcional como una buena alternativa a las plantillas reactivas o espaguetis MVC.Pero puede ser bastante un shock para los programadores de procedimientos.

  • de google Ir tiene como objetivo la concisión, la sencillez y la seguridad.El código Go se puede compilar en Javascript mediante GopherJS.

  • Dardo fue el intento posterior de Google de reemplazar Javascript.Ofrece interfaces y clases abstractas a través de una sintaxis similar a C/Java con escritura opcional.

  • Hax Es como ActionScript de Flash, pero puede apuntar a varios idiomas para que su código pueda ser reutilizado en programas Java, C, Flash, PHP y Javascript.Ofrece objetos dinámicos y con seguridad de tipos.

  • Opalang agrega azúcar sintáctico a Javascript para proporcionar acceso directo a la base de datos, continuaciones inteligentes, verificación de tipos y asistencia con la separación cliente/servidor.(Vinculado a NodeJS y MongoDB).

  • GorillaScript, "un lenguaje de compilación en JavaScript diseñado para capacitar al usuario y al mismo tiempo intentar evitar algunos errores comunes". Es similar a Coffeescript pero más completo y proporciona un montón de funciones adicionales para aumentar la seguridad y reducir los patrones repetitivos.

  • LiteScript cae en algún lugar entre Coffeescript y GorillaScript.Ofrece sintaxis asíncrona/yield para devoluciones de llamadas "en línea" y verificación de errores tipográficos variables.

  • Microsoft Mecanografiado es un pequeño superconjunto de Javascript que le permite colocar restricciones de tipo en los argumentos de una función, lo que puede detectar algunos errores.Similarmente mejorjs le permite aplicar restricciones, pero en Javascript puro, ya sea agregando llamadas adicionales o especificando tipos en los comentarios JSDoc.Y ahora Facebook ha ofrecido Fluir que además realiza inferencia de tipos.

  • LiveScript es un derivado de Coffeescript que fue popular por su brevedad pero que no me parece muy legible.Probablemente no sea lo mejor para los equipos.

¿Como escoger?

Cuando eligiendo un idioma alternativo, hay algunos Factores a considerar:

  • Si otros desarrolladores se unen a su proyecto en el futuro, ¿cuánto tiempo les llevará ponerse al día y aprender este idioma, o cuáles son las posibilidades de que ya lo sepan?

  • ¿El lenguaje tiene muy pocas funciones (el código seguirá lleno de texto repetitivo) o demasiadas (llevará mucho tiempo dominarlo y, hasta entonces, algún código válido puede ser indescifrable)?

  • ¿Tiene las características que necesitas para tu proyecto?(¿Su proyecto necesita verificación de tipos e interfaces?¿Necesita continuaciones inteligentes para evitar el infierno de las devoluciones de llamadas anidadas?¿Hay mucha reactividad?¿Podría ser necesario apuntar a otros entornos en el futuro?)

El futuro...

Jeff Walker ha escrito una serie que invita a la reflexión de publicaciones de blog sobre "el problema de Javascript", incluido el motivo por el que cree que ninguno de los dos Mecanografiado, ni Dardo ni Café ofrecer soluciones adecuadas.Sugiere algunas características deseables para un lenguaje mejorado en la conclusión.

  

JavaScript debe ser el único lenguaje soportado en la plataforma de navegador?

Sí y no. Hay una alternativa por ahí llamado dardo por Google, que se compila a JavaScript y al igual que jQuery se trata de hacer que la manipulación DOM un poco más fácil. Puede ser divertido experimentar, echar un vistazo.

Ver también

Es cierto que Javascript estaba en un punto muy difícil de tratar, pero la comunidad de desarrollo web ha recorrido un largo camino desde entonces. En su lugar, les animo a echar un vistazo a jQuery . Es fácil y abstrae todos los diversos problemas.

Y realmente no hay alternativas que funcionan en todos los ámbitos. Flash viene a la mente, pero eso también es escritura ECMA y es probablemente más de matar para la mayoría de las cosas.

A corto plazo, que haría uso de cosas como jQuery para ocultar las incompatibilidades del navegador. A largo plazo, las tecnologías como Silverlight o Adobe AIR pueden hacer de este un campo de minas muy diferente (pero sigue siendo un campo de minas) en el futuro.

dio una charla a Google detalla la malas y buenas partes de JavaScript y su futuro. En realidad, no ha cambiado mucho a todos desde 1999 - lo que puede decirse que es una buena cosa (casi todos los navegadores pueden ejecutar el mismo código, siempre y cuando usted es consciente de sus limitaciones) y Doug muestra donde las partes buenas eran en su mayoría malentendidos que resultan ser muy potente.

Para DOM manipuluation, mira jQuery como una biblioteca de cliente que reemplaza la mayor parte de la API DOM horrible con las operaciones que son un dolor para escribir bits para bastante elegantes de código que son más fáciles de escribir.

Si usted está pensando que JavaScript tiene problemas profundos, recomiendo el libro de Doug Crockford, JavaScript : las partes buenas. (O Google de "Crockford JavaScript" para encontrar varias presentaciones de vídeo que ha hecho.) Crockford esboza un subconjunto de seguridad y un conjunto de prácticas, y en concreto se enumeran algunas partes de la lengua para evitar.

Estoy al tanto de los planes para reemplazar JavaScript como el de facto medio de manipular el DOM. Así que es mejor aprender a usarlo de manera segura y bien.

En términos de JavaScript del lado cliente es la única manera de manipular el DOM. En términos de lado del servidor hay una multitud de maneras.

Internet Explorer soporta los lenguajes de script enchufables, aunque el único fiable incluido con el IE, además de JScript es VBScript.

Por lo que he visto, parece que hay una especie general de sesgo hacia los lenguajes dinámicos en el navegador, y JavaScript parece llenar esta necesidad de forma suficientemente adecuada que los efectos de la red hacen que cualquier otro lenguaje de un no-arrancador. El lenguaje es en realidad bastante potente, aunque su aplicación en los navegadores deja mucho que desear.

Si usted está dispuesto a restringir sus clientes / visitantes para navegadores específicos, y posiblemente dispuesta a exigir que la instalación de un plug-in, usted podría mirar a MS Silverlight - una descripción legible está en Wikipedia . Con Silverlight 2, puede ejecutar, del lado del cliente, el código que has escrito en C #, IronPython, IronRuby, VB.NET, etc; la clon de Silverlight Moonlight , desde el proyecto Mono, promete traer la misma funcionalidad a Linux .

En la práctica, la mayoría de los desarrolladores de aplicaciones web y sitios prefieren llegar a un público más amplio que el de Silverlight (y eventualmente Moonlight) actualmente puede ofrecer - lo que significa la pervivencia de Javascript, o posiblemente flash (que utiliza un lenguaje de programación similar, ActionScript).

Por lo tanto, ganando la mente compartida sustancial, la adopción y la tracción para todo lo demás está demostrando ser una lucha cuesta arriba incluso para Microsoft con sus grandes grupos de ingenieros y los presupuestos de marketing y un proyecto de software libre en el lado (posiblemente para aliviar las preocupaciones sobre el lock-in patentado) - que puede ayudar a explicar por qué hay muy poco interés, por ejemplo, por parte de la Fundación Mozilla, en empujar hacia ese objetivo. "Además de la interoperabilidad", usted dice: pero es evidente que la cuestión de la interoperabilidad es el Biggie aquí, dado lo que observamos WRT progreso de Silverlight ...

Como ya se ha dicho, tiene Flash (ActionScript, que es un lenguaje derivado de Javascript) y Silverlight / Moonlight (IronPython, IronRuby, JScript, VBScript, C #) que se puede ejecutar en el navegador a través de plugins (el primero es mucho más ubicua).

También hay otra alternativa si te gusta Ruby: HotRuby , se trata de una aplicación de rubí en JavaScript que ejecutar en el navegador. Aún no está muy maduro, pero usted puede tener una mirada en ella.

Una cosa que no he visto mencionado (oh, veo Alcides mencionó HotRuby mientras estaba escribiendo y Nosredna mencionado GWT y de secuencias de comandos #) y me gustaría tirar por ahí es que hay una serie de implementaciones de [lengua] -on-JavaScript (por ejemplo, los traductores que le permiten convertir Rubí , Python , C # , Java , obj-J / Cappuccino [similar al obj-C / Cocoa] o Procesamiento [para la lona] para JavaScript o bien en el cliente o antes de la implementación [y algunos de los cuales también cuentan con varias bibliotecas de abstracción]). Por supuesto que hay una sobrecarga de rendimiento si se está traduciendo en el cliente, pero si se siente más cómodo con otra lengua que le permitirá a cierta flexibilidad.

En lo personal, sin embargo, yo recomiendo aprender a amar JavaScript. Es una excelente, lenguaje poderoso, y muy elegante una vez que llegue a conocerla. Estoy frente al dilema opuesto, muerde las uñas para tener una solución / DOM capaz JavaScript del lado servidor que cumpla con todas mis necesidades. / Opinión no solicitada

No. JavaScript es, pero va a evolucionar. La siguiente versión es "JavaScript Armonía", y se puede aprender más si se busca en Google eso.

De vez en cuando alguien sugiere poner un intérprete de código de bytes en los navegadores junto JavaScript. Probablemente no va a pasar, al menos por un tiempo.

resulta que me encanta JavaScript. Pero hay otras soluciones, incluyendo GWT, que compila Java a JavaScript y secuencias de comandos #, que compila C # para JavaScript.

Jquery (todavía javascript pero) realmente le ayudará tienen soporte para casi todos los navegadores y no es realmente tan difícil de aprender:)

JavaScript es el idioma Inglés de la web. Inglés históricamente se extendió debido a que tenía una fuerte marina conquistando varios países. Esto es comparable a las grandes empresas que conquistaron la web con JavaScript. Es un lenguaje clobbered juntos a partir de múltiples fuentes europeas (griego, latín, las lenguas germánicas, francés incluso algunas palabras de China e India). JavaScript prestado una gran cantidad de conceptos a lo largo de los años a partir de otros idiomas (estructurales, OO, funcional). Inglés se habla en diferentes lugares con ligeras variaciones en dialecto y el acento, que pueden hacer difícil comprensión. Al igual que JavaScript tiene diferentes navegadores que interpretan un poco diferente.

A pesar de Inglés es fácil de aprender inicialmente, tiene pronunciación muy inconsistente y más excepciones que reglas. Al igual que JavaScript siempre está ahí para ofrecer una sorpresa.

A pesar de los diferentes acentos, JavaScript es la lengua franca de la web. Al igual que puede que no sea Inglés y escribir aquí en Inglés, todos los navegadores web tiene un cierto grado de comprensión Inglés. IE6 es como el tipo que dice en su hoja de vida que es fluida, pero sólo fue a un curso de dos semanas de Inglés como lengua extranjera.

Ha habido intentos de suplantar Inglés como idioma principal de los mundos, por ejemplo Esperanto. Pero ninguna de ellas pudo, porque la mayoría de la gente en la tierra hablan algo de Inglés. De la misma manera será difícil introducir mejores alternativas a JavaScript.

No creo Javascript será reemplazado en el corto plazo. Para un enfoque completamente diferente a los clientes ricos, es posible que desee investigar Flex, que es una tecnología basada en Flash.

Tal vez algo así como haxe (ver haxe.org) podría ayudarle. Es un lenguaje que parece más limpio que JavaScript y puede ser compilado a JavaScript, por lo que puede ejecutarse dentro de un navegador.

Sé que esto no es una respuesta directa a su pregunta, pero pensé que podría ser interesante para usted, sin embargo.

Muchas personas entienden que Javascript es un lenguaje más bonita no es el mejor de los siglos. Sin embargo, en la actualidad está soportado por los navegadores, y por lo tanto será muy difícil introducir un idioma diferente. Simplemente no necesitamos otra guerra de los navegadores.

Esto explica por qué no conozco ningún plan de cambiar a un lenguaje del lado del cliente diferente.

Pero creo que Javascript no está tan mal si comienza a pensar en el modelo DOM y ¿cómo uno trabajar con él. Muchas cosas que son desordenado con JS son el resultado de la forma en que funciona el modelo DOM.

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