He escuchado la afirmación de que Python sería demasiado lento para ser de alguna utilidad en los navegadores.
Creo que Javascript es solo superior en este aspecto porque las compañías como Google lo necesitan rápido (y lo hicieron rápido) porque lo necesitan para sobrevivir, pero podría estar equivocado.
¿Hay alguna diferencia en la forma en que Python y Javascript están diseñados que tengan un impacto en cómo se comportarían en los navegadores?
Como a partir de ahora no hay una implementación de Python del lado del cliente, mi pregunta proviene de la declaración que alguien hizo, por lo que tal vez tenga algo que ver con los lenguajes en sí (aunque no lo creo).
javascript
python
browser
client-side
Profpatsch
fuente
fuente
would
?Respuestas:
Para empezar, debemos hacer una distinción clara entre lenguajes e implementaciones . Un lenguaje es algo abstracto, la implementación es algo concreto que puede medir el rendimiento. Por ejemplo, Lisp alguna vez se consideró demasiado ineficiente para uso práctico, pero los compiladores siguieron madurando y, finalmente, se desarrolló un hardware dedicado para ello; en un momento en la década de 1980 fue la plataforma de desarrollo elegida para el desarrollo de estaciones de trabajo de alto rendimiento.
Dicho esto, la respuesta más simple es que una implementación rápida de Javascript como el V8 de Google elimina la implementación estándar de Python (CPython) fuera del agua . V8 es una máquina virtual altamente optimizada con un JITer que es increíblemente rápido, mientras que CPython es una VM bastante simple en comparación. Hay una implementación de Python con un JIT, pero eso solo es aproximadamente 5-6 veces más rápido.
Hace cinco años hubiera sido una historia diferente. Los navegadores tenían implementaciones de Javascript simplistas porque la velocidad no era una preocupación, ya que nadie construía un software 'real' y Python habría sido igual, si no más rápido.
fuente
En los viejos tiempos de la web, cuando los applets de Java eran la única forma
principalde contenido interactivo del lado del cliente, las personas se daban cuenta de que tenía que haber una forma de obtener formularios en una página web para poder interactuar con los applets en la página web.A partir de esto, se creó un lenguaje de secuencias de comandos para vincular el applet de Java a la página web con el nombre ... javascript.
Uno puede ver los vestigios de este legado con preguntas SO tales como [ 1 ], [ 2 ], [ 3 ] - y los dos documentos oficiales: Invocación de código JavaScript desde un applet e Invocación de métodos de applet desde código JavaScript
Con dicho lenguaje disponible, los navegadores de la época (Netscape es el predominante) pusieron javascript disponible como una ventaja competitiva (javascript diseñado en Netscape: Netscape fue el primer javascript del lado del servidor con su servidor en el '94, casi dos décadas antes del nodo .js). Otros navegadores hicieron lo mismo. La gente escribía páginas que usaban JavaScript, otros intentos de secuencias de comandos del lado del cliente significarían páginas completamente incompatibles entre cosas que funcionan y cosas que no funcionan, o la duplicación de código (aquí está el bloque {insert language here} que hace esto para no javascript navegadores y aquí está el bloque javascript para todos los demás).
Como Netscape fue el navegador dominante durante un período, JavaScript se apoderó. Si bien el legado de Netscape se pierde en las notas a pie de página de los archivos fuente de Mozilla, javascript sigue vivo y nada ha sido capaz de sobrepasar su lugar.
El problema persiste para cualquier otro lenguaje de script de diapositivas de cliente. Javascript es compatible con todos los navegadores. Si se hiciera un navegador que admitiera Python (por ejemplo) en lugar de JavaScript, no sería capaz de utilizar la gran mayoría de los sitios web. Además, a menos que ese navegador pueda obtener una parte significativa del tráfico del navegador, los diseñadores web no desean crear dos conjuntos de páginas con diferentes lenguajes de script para la misma página.
Uno podría intentar crear un complemento de script de Python para algún navegador que habilitara un script de Python en la página ... similar a cómo funciona vrml en la actualidad. Pero a menos que haya escuchado y visto una página web que usa vrml, es probable que una encuentre uso para otra página web para otro lenguaje de secuencias de comandos.
fuente
No creo que Python sea demasiado lento en absoluto. No hay nada en el lenguaje que evite que se ejecute lo suficientemente rápido como para que coincida con JavaScript. Se puede compilar en JavaScript, por lo que, si nada más, podría incluir un compilador en el navegador y solo aumentar potencialmente los tiempos de carga de la página.
ACTUALIZACIÓN: consulte los comentarios a continuación sobre por qué compilar Python a JS sería considerablemente más costoso de lo que aquí se implica.
El problema es tratar de convencer a los proveedores de navegadores y al W3C de que primero elijan Python, en lugar de Ruby o cualquier otro lenguaje de script agradable, luego definan un subconjunto estandarizado, ya que no pueden permitir llamadas al sistema, etc., y luego implementarlo bien, todo mientras compatible con JavaScript todavía. Eso no va a suceder, pero si sucediera, dudo que la velocidad se convierta en un problema grave.
fuente
a = something(); frobincate(a); return quux
yif condition: react()
son una sola línea cada una. Y n niveles de sangría solo necesitan n espacios, no n * 4 espacios.Creo que Python tiene su propia máquina virtual. No tengo mucha experiencia con Python, pero no veo ninguna razón por la que no funcione tan bien como un motor JavaScript no optimizado.
Algunos pensamientos al azar:
(1) Probablemente podría ejecutar Python localmente a través de un applet de Java utilizando Jython. Lo difícil que veo aquí es que los applets son muy restrictivos, por lo que es posible que deba modificar Jython para que se ajuste a las restricciones de acceso. Por ejemplo, si escribe en un archivo de registro, es posible que deba eliminar el código de registro. Un applet no necesita ser notablemente visible.
(2) Alguien podría construir un "compilador" / convertidor de Python a JavaScript. Esto sería mucho trabajo.
fuente
Someone could build a Python-to-JavaScript "compiler"/converter
Bueno, alguien ya lo hizo .Brython
funciona de forma interesante y rápida, al menos para partes bastante aisladas en las páginas (baja interacción con elDOM tree
).Depende de la implementación del lenguaje y no necesariamente del lenguaje en sí. La mayoría de los intérpretes de JavaScript son mucho más rápidos que casi todas las implementaciones de Python.
Esto no significa que el lenguaje Python no se pueda usar a casi la misma velocidad que JavaScript. Opal implementa casi todo el lenguaje Ruby y la biblioteca estándar en el navegador compilando el código Ruby en código JavaScript envuelto en cierres. Dejando a un lado la sobrecarga de incluir la biblioteca Opal, su velocidad es mucho más cercana a la de JavaScript directo que cualquier otro intérprete de Ruby que conozca.
No sé si hay un equivalente en Python de Opal, pero tal proyecto probablemente significaría que la respuesta a su pregunta es "no". Con el uso creciente de JavaScript como un "lenguaje ensamblador para la web", no me sorprendería si se usará cada vez más como plataforma para otros idiomas, especialmente a medida que aumenta la potencia de la informática móvil y la sobrecarga de tener un idioma implementado en JavaScript se vuelve cada vez más negligente.
EDITAR: Aquí hay una lista de implementaciones de Python para el navegador que compila / ejecuta en JavaScript.
https://github.com/jashkenas/coffeescript/wiki/list-of-languages-that-compile-to-js#python
Y en caso de que esté interesado, puede consultar Opal, que realmente me gusta.
http://opalrb.org/
Dado que dudo que los navegadores alguna vez vengan con soporte para intérpretes separados, tales compiladores son probablemente el camino del futuro en términos de uso de otros idiomas además de JavaScript. Incluso ahora, obtendrá un rendimiento comparable en la mayoría de las áreas. Sin embargo, esta es mi opinión, así que tenlo en cuenta.
fuente
Incluso cuando hizo esta pregunta, ya había una serie de implementaciones de Python disponibles en JavaScript que se pueden usar en las páginas web de hoy.
Eche un vistazo a http://www.skulpt.org/ o http://www.brython.info/ para empezar.
El rendimiento no parece ser demasiado malo, pero debe probarlos usted mismo y descubrirlo.
fuente
Python es un lenguaje de "consola" que se ejecuta en el servidor
Javascript es un lenguaje de "navegador" que se ejecuta en el cliente
Como tal, no compiten directamente
... por supuesto, hay node.js y probablemente complementos del navegador Python, pero luego es más una cuestión sobre el rendimiento de una implementación en particular.
Además, para la mayoría de las aplicaciones, Python funcionará bien, excepto si tiene que hacer algún tipo de cálculos extensivos y exprimir los ciclos de la CPU.
Como última nota, python y javascript comparten muchas similitudes. Debido a su naturaleza dinámica, ambos deben interpretarse en tiempo de ejecución y no pueden compilarse con tanta fuerza como los lenguajes de tipo estático. Como tal, supongo que su rendimiento alcanzable sería similar.
fuente
jsc
le permite trabajar con javascript como consola, de forma muy similar a lo que se obtendría si escribierapython
en una consola.