2011-04-16 24 views
14

Cuando vi this question pensé que sería útil si se pudiera escribir un compilador jQuery . Ahora, por compilador, me refiero a algo que toma el código jQuery y da salida al código javascript sin procesar que finalmente se ejecuta.¿Es posible el compilador Jquery * *?

Esta es la forma en que la visión de un bloque de ejecución de código jQuery:

  1. una función jQuery se llama y los parámetros se pasan a ella
  2. la función se llama a una función javascript prima y pasa los parámetros que recibió a que
  3. la función recién llamado realiza la acción destinada

entiendo que esta es una muy modelo simplificado y podría ser mucho más complejo, pero creo que la complejidad se reduce a los pasos 2 y 3 que se repiten con diferentes funciones raw js que se invocan y cada vez alimentadas con todos o un subconjunto de parámetros/resultados previos.

Si nos suscribimos a ese modelo, entonces podríamos llegar a métodos para hacer las funciones de jQuery realizan una doble función:

  1. lo que ya hacen
  2. Registro de lo que hicieron en forma de raw_function(passed_params)

¿Estoy haciendo algunas suposiciones erróneas que harían esto imposible? ¿Alguna idea de cómo el generador de perfiles de Firebug intenta obtener nombres de funciones? Podría ser utilizado aquí?

Editar

lo que estaba pensando estaba haciendo un cuadro negro con la entrada/salida como:

normal jquery code[BB]code you'd write if you used no library

  • me llamaron a este un compilador , porque compiló una vez y luego usaría el código resultante.
  • Argumenté que podría tener al menos uso educativo, y probablemente también otros usos.
  • La gente dijo que esto tomaría una pequeña cantidad de código y produciría una gran masa; eso no desafía el propósito previsto por lo que veo
  • La gente decía que agregaría un renderizado innecesario, paso a paso, que, dado solo el código resultante, finalmente se usaría (y probablemente se usaría solo para estudiar), no es correcto.
  • La gente dice que no existe una relación uno-a-uno entre las funciones de javascript y las funciones de jquery, e implica que dicho convertidor sería demasiado complicado y probablemente no valga la pena. Con esto ahora estoy de acuerdo.

¡Gracias a todos!

+2

¿Por qué? jQuery es JavaScript! Cuál es el problema con jQuery últimamente ... – halfdan

+0

Nada. Amo jQuery. Todavía tal * compilador * sería útil, incluso si con fines puramente educativos. –

+0

Y tal vez podría ayudar a las personas a apreciar lo que les está haciendo bajo el capó. –

Respuesta

1

Ahora, por compilador, me refiero a algo que se lleva en código y salidas prima de código javascript que es en última instancia ejecutado jQuery.

Creo que esa afirmación puede indicarle qué le sucede.

jQuery es una biblioteca implementada en el lenguaje Javascript. jQuery no es un lenguaje separado de Javascript. jQuery es una colección de código Javascript que puede usar para facilitar el desarrollo de Javascript. Es todo Javascript. Un "compilador de jQuery" para convertir el "código jQuery" en "Javascript sin formato" sería bastante inútil porque jQuery es Javascript sin formato.

Lo que probablemente realmente quiera es un compilador Javascript. En ese caso, es ciertamente posible. De hecho, algunos navegadores web actualmente "compilan" en el código JavaScript en algún tipo de bytecode para mejorar el rendimiento. Pero los flujos de trabajo de desarrollo que implican Javascript normalmente no implican una herramienta compiladora de algún tipo.


Al parecer lo que realmente quiere es "en línea" código de jQuery en el código, algo así como esto:

var myfoo = $('#foo');var myfoo = document.getElementById('foo');

Esto es en realidad algo un compilador de C++ haría para optimizar rendimiento, pero Javascript no es C++, por lo que no se aplica aquí.

No veo cómo esto es útil. El objetivo de jQuery es simplificar el desarrollo de Javascript proporcionando una interfaz consistente como la función $(). Al realizar este procedimiento de "alineación", se produce un código que es aún más difícil de leer y mantener.

¿Y por qué añadir un paso más? ¿Por qué no simplemente entregar el código de la aplicación javascript y la biblioteca jQuery al navegador? ¿Por qué agregar un paso adicional que implica una herramienta adicional para convertir Javascript a Javascript que no proporciona ningún beneficio extra sustancial?

+8

Toma * compilador * demasiado literal (o lo he usado libremente). Sé que jQuery es una biblioteca, y he intentado darle sentido a lo que sucede dentro estudiando el código. Mi comentario en respuesta a @Squeegy aclara a qué me refiero con el compilador. –

+4

esa respuesta comienza de manera grosera. – nimrod

+3

'" Al realizar este procedimiento de "alineación", se genera un código que es aún más difícil de leer y mantener. "' No creo que la idea sea mantener el código "compilado".Los selectores nativos son múltiples veces más rápidos que JQuery y ese es el punto de esta pregunta. – Hardy

2

jQuery código es "código JavaScript sin procesar", por lo que no estoy seguro de qué compilador realmente le compraría. Es como escribir un compilador C# que toma el código C# 4.0 y emite el código C# 1.1. ¿Cuál es el beneficio?

jQuery no es un idioma diferente que reemplaza o incluso se sienta encima de JavaScript. Es un marco de código JavaScript que proporciona muchos ayudantes útiles para tareas comunes. En mi opinión, lo mejor es que su estructura distintiva ayuda a diferenciarlo de los lenguajes más "similares a Java".

JavaScript por sí mismo es engañosamente similar a otros idiomas y esto tiende a ser uno de sus mayores fallas como lenguaje. La gente trata de pensar en términos de Java, a pesar de que las similitudes se detienen en el nombre. Estructuralmente, JavaScript es muy diferente en muchos aspectos (mecanografía, alcance, concurrencia, herencia, polimorfismo, etc.) y me gusta especialmente cómo jQuery y otros proyectos modernos de JavaScript han logrado que el lenguaje se sostenga por sus propios méritos.

Supongo que tengo que volver a la pregunta ... Si está buscando convertir JavaScript de estilo jQuery en JavaScript de estilo Java, entonces eso es un paso atrás.Ambas versiones serían interpretadas por el navegador de la misma manera, pero una de las versiones es menos elegante y representa el idioma más pobremente que la otra.

Tenga en cuenta que jQuery no es el único marco que hace estas cosas, es sólo el más popular. ¿Tal compilador necesitaría también manejar todos los otros marcos? Todos hacen cosas diferentes de diferentes maneras para aprovechar el idioma. No creo que homogeneizarlos en una forma "más simple" nos compre algo.

Editar:? (En respuesta a las diversas observaciones en torno a esta pregunta y sus respuestas, una especie de ...

¿Cómo estructurar este compilador Teniendo en cuenta que (como hemos tratado de señalar) . jQuery es JavaScript y es sólo una biblioteca de código JavaScript, y dada la forma en navegadores y trabajo JavaScript, el "compilador" simplemente tendrían que ser otra biblioteca JavaScript Así que, esencialmente, lo que quiere es pasar de:

  • Una página web
  • La biblioteca jQuery
  • código JavaScript que utiliza la librería jQuery

a:

  • Una página web
  • La biblioteca jQuery
  • código JavaScript que utiliza la librería jQuery
  • Su biblioteca "compilador"
  • Algunos más código JavaScript que envía el código JavaScript anterior a través de su biblioteca de alguna manera
  • Su biblioteca "jQuery equivalente"
  • Algunos más código JavaScript que sustituye al código original JavaScript con su nueva versión

con el fin de hacer cosas más simples? ¿O de alguna manera hacer que las herramientas de depuración como FireBug sean más fáciles de usar? Lo que está proponiendo se llama "ofuscador" y su único propósito es hacer que el código sea más difícil de aplicar ingeniería inversa. Un efecto secundario es que también hace que el código sea más difícil de comprender y mantener.

+0

"código JavaScript sin formato" ¡incorrecto! No estoy hablando de qué biblioteca jQuery está escrita en sí misma, por supuesto que es * raw javascript *, pero no tenemos ningún método o función * en javascript * llamado 'replaceWith()'. –

+1

@Majid: Excepto que la biblioteca jQuery proporciona una función llamada 'replaceWith()' (que creo que es, como la mayoría de las cosas en la biblioteca, una extensión del objeto 'jQuery'). ¿Cuál sería su compilador/intérprete/etc. hacer además de simplemente copiar la función jQuery existente exactamente? Preservar su funcionalidad de una manera útil y significativa (y en muchos sentidos buena) sería simplemente copiar la función de un archivo .js a otro. ¿Cuál es el beneficio? – David

+0

@Majid: Lo que esencialmente propones no es tanto un "compilador" o un "intérprete" o algo por el estilo. Lo que está proponiendo es escribir su propia biblioteca jQuery-equivelant y escribir una herramienta para traducir de uno a otro. Si puede escribir jQuery de una manera que de alguna manera es mejor por cualquier medio que jQuery, ¿por qué no contribuir al proyecto jQuery real? – David

3

Si el propósito del compilador para convertir Javascript (jQuery que puede ser o nada) a una mejor Javascript (que he entendido de que decir "en última instancia ejecutado"), Google ya ha hecho eso. Hicieron closure compiler y algunos han intentado con jQuery en este post. ¿No es esto lo que estás sugiriendo?

5

creo que lo que quiere decir es: si se escribe

var myId = $("#myId") 

que se convertirá en

var myId = document.getElementById("myId") 

Creo que es posible, pero el problema es, las funciones de jQuery vuelven objetos jQuery, por lo en el ejemplo anterior, la primera myId será un jQuery objeto & la segunda será un objeto de nodo (creo) que afectará a otras funciones que necesita utilizar más tarde en el código después de la compilación.Especialmente si están encadenados

en segundo lugar, tendrá que estar seguro de que la conversión en realidad tiene beneficios de rendimiento. Sin embargo, si es consciente de todo esto y puede programar su código en consecuencia, creo que será posible

Cuestiones relacionadas