Ouvi a afirmação de que o Python seria muito lento para ser útil em navegadores.
Eu acho que o Javascript é apenas superior nesse aspecto por causa de empresas como o Google que precisam rápido (e rápido) porque precisam para sobreviver, mas eu posso estar errado.
Existem diferenças na maneira como o Python e o Javascript são projetados que afetam o desempenho dos navegadores?
Como até o momento não há uma implementação Python no lado do cliente, minha pergunta vem da declaração de alguém, então talvez tenha algo a ver com as próprias linguagens (embora eu não acredite nisso).
javascript
python
browser
client-side
Profpatsch
fonte
fonte
would
?Respostas:
Para começar, precisamos fazer uma distinção clara entre idiomas e implementações . Uma linguagem é uma coisa abstrata, a implementação é uma coisa concreta que pode ter o desempenho medido. Por exemplo, o Lisp já foi considerado ineficiente demais para uso prático, mas os compiladores continuaram amadurecendo e, eventualmente, um hardware dedicado foi desenvolvido para ele; em um ponto da década de 1980, era a plataforma de desenvolvimento preferida para o desenvolvimento de estações de trabalho de alto desempenho.
Dito isso, a resposta mais simples é que uma implementação rápida de Javascript como a V8 do Google expulsa a implementação padrão do Python (CPython) . A V8 é uma máquina virtual altamente otimizada com um JITer incrivelmente rápido, enquanto o CPython é uma VM bastante simples em comparação. Existe uma implementação do Python com um JIT, mas ainda é apenas cerca de 5-6x mais rápido.
Cinco anos atrás, teria sido uma história diferente. Os navegadores tinham implementações simplificadas de Javascript porque a velocidade não era uma preocupação, já que ninguém construía software 'real' com ela e o Python teria sido igual, se não mais rápido.
fonte
Nos tempos antigos da web, quando os miniaplicativos java, onde a
principalforma de conteúdo interativo do lado do cliente, as pessoas percebiam que era preciso haver uma maneira de obter formulários em uma página da web para poder interagir com os miniaplicativos na página da web.A partir disso, uma linguagem de script para vincular o applet java à página da web foi criada com o nome ... javascript.
Podemos ver os vestígios desse legado com perguntas do SO, como [ 1 ], [ 2 ], [ 3 ] - e os dois documentos oficiais: Invocando Código JavaScript de um Applet e Invocando Métodos de Applet do Código JavaScript
Com essa linguagem disponível, os navegadores da época (Netscape sendo o predominante) disponibilizaram o javascript como uma vantagem competitiva (javascript desenvolvido na Netscape - o Netscape foi o primeiro javascript do lado do servidor com seu servidor em 94 - quase duas décadas antes do nó .js). Outros navegadores seguiram o exemplo. As pessoas estavam escrevendo páginas que usavam javascript, outras tentativas de script no cliente significariam páginas completamente incompatíveis entre coisas que funcionam e coisas que não funcionam - ou duplicação de código (aqui está o bloco {insert language here}} que faz isso para não-javascript navegadores e aqui está o bloco javascript para todos os outros).
Como o Netscape foi o navegador dominante por um período, o javascript entrou em ação. Enquanto o legado do Netscape é perdido nas notas de rodapé dos arquivos de origem do Mozilla, o javascript permanece vivo e nada foi capaz de exagerar.
O problema permanece para qualquer outra linguagem de script de slides do cliente. Javascript é suportado em todos os navegadores. Se alguém fizesse um navegador que suporta python (por exemplo) em vez de javascript, ele não seria capaz de usar a grande maioria dos sites. Além disso, a menos que o navegador tenha conseguido uma parcela significativa do tráfego do navegador, os web designers não desejam criar dois conjuntos de páginas com diferentes linguagens de script para a mesma página.
Pode-se tentar criar um plugin de script python para algum navegador que habilite um script python na página ... semelhante a como o vrml funciona hoje. Mas, a menos que você tenha ouvido e visto uma página da Web que usa vrml, é provável que um deles encontre uso para outra página da Web para outra linguagem de script.
fonte
Eu não acho que o Python seria muito lento. Não há nada na linguagem que o impeça de executar rápido o suficiente para corresponder ao JavaScript. Ele pode ser compilado em JavaScript; portanto, se nada mais, você pode incluir um compilador no navegador e aumentar potencialmente o tempo de carregamento da página.
ATUALIZAÇÃO: Por favor, veja os comentários abaixo discutindo por que compilar Python para JS seria consideravelmente mais caro do que o implícito aqui.
O problema está tentando convencer os fornecedores de navegadores e o W3C a escolher primeiro Python, em vez de Ruby ou qualquer outra linguagem de script agradável, depois definir um subconjunto padronizado, pois eles não podem permitir chamadas do sistema e assim por diante, e implementá-lo bem, enquanto isso. ainda suporta JavaScript. Isso não vai acontecer, mas se isso acontecer, duvido que a velocidade acabe sendo um problema sério.
fonte
a = something(); frobincate(a); return quux
eif condition: react()
cada uma possui uma linha. E os níveis de indentação n precisam de apenas n espaços, não n * 4 espaços.Eu acho que o Python tem sua própria máquina virtual. Não tenho muita experiência com Python, mas não vejo nenhuma razão para que ele não funcione tão bem quanto um mecanismo JavaScript não otimizado.
Alguns pensamentos aleatórios:
(1) Você provavelmente pode executar o Python localmente através de um applet Java usando o Jython. A parte difícil que vejo aqui é que os applets são muito restritivos; portanto, você pode precisar modificar o Jython para se ajustar às restrições de acesso. Por exemplo, se ele grava em um arquivo de log, pode ser necessário remover o código de log. Um applet não precisa ser visivelmente visível.
(2) Alguém poderia criar um "compilador" / conversor de Python para JavaScript. Isso daria muito trabalho.
fonte
Someone could build a Python-to-JavaScript "compiler"/converter
Bem, alguém já fez .Brython
funciona curiosamente rápido, pelo menos para partes isoladas nas páginas (baixa interação com oDOM tree
).Depende da implementação da linguagem e não necessariamente da própria linguagem. A maioria dos intérpretes JavaScript é muito mais rápida do que quase todas as implementações do Python.
Isso não significa que a linguagem Python não possa ser usada quase na mesma velocidade que o JavaScript. O Opal implementa quase toda a linguagem Ruby e a biblioteca padrão no navegador, compilando o código Ruby no código JavaScript envolvido em fechamentos. Deixando de lado a sobrecarga de incluir a biblioteca Opal, sua velocidade é muito mais próxima da do JavaScript direto do que qualquer outro intérprete de Ruby que eu conheça.
Não sei se existe um equivalente em Python do Opal, mas esse projeto provavelmente significaria que a resposta para sua pergunta é "não". Com o crescente uso do JavaScript como uma "linguagem assembly para a web", não me surpreenderia se ele fosse cada vez mais usado como plataforma para outros idiomas, especialmente à medida que o poder da computação móvel aumenta e a sobrecarga de ter uma linguagem implementado em JavaScript se torna cada vez mais negligente.
EDIT: Aqui está uma lista de implementações Python para o navegador que compilam / executam em JavaScript.
https://github.com/jashkenas/coffeescript/wiki/list-of-languages-that-compile-to-js#python
E caso você esteja interessado, pode conferir o Opal, que eu realmente gosto.
http://opalrb.org/
Como duvido que os navegadores venham a oferecer suporte para intérpretes separados, esses compiladores provavelmente são o caminho do futuro em termos de uso de idiomas diferentes do JavaScript. Mesmo agora, você obterá um desempenho comparável na maioria das áreas. Esta é a minha opinião, no entanto, tenha isso em mente.
fonte
Mesmo quando você fez essa pergunta, já havia várias implementações python disponíveis em javascript que podem ser usadas nas páginas da web hoje.
Dê uma olhada em http://www.skulpt.org/ ou http://www.brython.info/ para iniciantes.
O desempenho não parece muito ruim, mas você deve testá-los e descobrir.
fonte
Python é uma linguagem de "console", rodando no servidor
Javascript é uma linguagem de "navegador", em execução no cliente
Como tal, eles não competem diretamente
... é claro que existem node.js e provavelmente plugins de navegador python, mas é mais uma pergunta sobre o desempenho de uma implementação específica.
Além disso, para a maioria dos aplicativos, o python funcionará perfeitamente, exceto se você tiver que fazer algum tipo de computação extensa e reduzir os ciclos da CPU.
Como última nota, python e javascript compartilham muitas semelhanças. Devido à sua natureza dinâmica, ambos precisam ser interpretados em tempo de execução e não podem ser compilados com tanta força quanto as linguagens estáticas. Como tal, presumo que o desempenho alcançável deles seja semelhante.
fonte
jsc
permite que você trabalhe com javascript como um console, da mesma forma que seria possível se eles digitassempython
em um console.