Pergunta

Atualmente o Google App Engine suporta Python e Java. suporte Java é menos maduro. No entanto, Java parece ter uma longa lista de bibliotecas e apoiar especialmente para bytecode Java, independentemente das línguas utilizadas para escrever esse código. Qual idioma lhe dará um melhor desempenho e mais poder? Por favor informar. Obrigado!

Editar: http: / /groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine?pli=1

Editar: Por "poder" I significa melhor capacidade de expansão ea inclusão de bibliotecas disponíveis fora do quadro. Python permite que bibliotecas Python única puros, apesar de tudo.

Foi útil?

Solução

Estou inclinado (sendo um especialista em Python, mas muito enferrujado em Java), mas eu acho que o tempo de execução Python da GAE é atualmente mais avançado e melhor desenvolvido do que o tempo de execução Java - o primeiro teve um ano extra para desenvolver e amadurecer , depois de tudo.

Como as coisas vão proceder daqui para frente é naturalmente difícil prever - a demanda é provavelmente mais forte no lado Java (especialmente uma vez que não se trata apenas de Java, mas outras línguas empoleirado em cima da JVM também, por isso é a maneira de executado por exemplo, código PHP ou ruby ??on App Engine); a equipe Python App Engine no entanto tem a vantagem de ter a bordo de Guido van Rossum, o inventor do Python e um engenheiro incrivelmente forte.

Em termos de flexibilidade, o motor de Java, como já mencionado, faz oferta a possibilidade de executar JVM bytecode feita por diferentes linguagens, não apenas Java - se você estiver em uma loja multi-linguagem que é um bem grande positivo. Vice-versa, se você detesta Javascript, mas devem executar algum código no navegador do usuário, GWT de Java (gerando o Javascript para você a partir de sua codificação em nível de Java) é muito mais rico e mais avançado do que as alternativas Python do lado (na prática, se você escolher Python, você estará escrevendo alguns JS-se para este fim, enquanto que se você escolher Java GWT é uma alternativa utilizável se você detesta escrever JS).

Em termos de bibliotecas é praticamente uma lavagem - a JVM é restrito o suficiente (não segmentos, há carregadores de classe personalizada, não JNI, nenhum banco de dados relacional) para dificultar a reutilização simples de bibliotecas Java existentes tanto, ou mais, de bibliotecas Python existentes são igualmente dificultada pelas restrições semelhantes sobre o tempo de execução Python.

Em termos de desempenho, eu acho que é uma lavagem, mas você deve referência em tarefas de sua própria - não confiar no desempenho de implementações de JVM baseada em JIT altamente otimizados descontando seus grandes tempos de inicialização e pegadas de memória, porque o ambiente do app engine é muito diferente (custos de arranque será pago muitas vezes, como exemplos de sua aplicação são iniciado, parado, mudou-se para diferentes hosts, etc, todos trasparently a você - tais eventos são geralmente muito mais barato com ambientes de execução Python do que com JVMs).

A situação XPath / XSLT (para ser eufemística ...) não é exatamente perfeito em ambos os lados, suspiro, embora eu acho que pode ser um pouco menos ruim no JVM (onde, aparentemente, subconjuntos substanciais de Saxon pode ser feito para ser executado, com algum cuidado). Eu acho que é questões de abertura valor na página os href="http://code.google.com/p/googleappengine/issues/list" Questões AppEngine com XPath e XSLT em sua títulos - agora só existem questões que pedem bibliotecas específicas, e isso é míope: Eu realmente não me importo como um bom XPath / XSLT é implementado, para Python e / ou para Java, contanto que eu começar a usá-lo. (Bibliotecas específicas podem facilitar a migração do código existente, mas isso é menos importante do que ser capaz de executar tarefas como "aplicar rapidamente transformação XSLT" de alguma forma -!). Eu sei que eu estrelar uma questão tão bem se expressou (especialmente de uma forma independente da linguagem).

Por último, mas não menos importante: lembre-se que você pode ter versão diferente do seu aplicativo (usando o mesmo armazenamento de dados) algumas das quais são implementadas com o tempo de execução Python, alguns com o tempo de execução Java, e você pode acessar versões que diferem do " default / "um ativo com URLs explícitos. Então, você poderia ter tanto Python e código Java (em diferentes versões do seu app) uso e modificar o mesmo armazenamento de dados, concedendo-lhe ainda mais flexibilidade (embora apenas um terá o "bom" URL como foobar.appspot.com - o que provavelmente é importante apenas para acesso pelos usuários interativos em navegadores, imagino; -).

Outras dicas

Watch este aplicativo para mudanças no Python e Java desempenho:

http://gaejava.appspot.com/ (EDIT: desculpas, ligação é interrompida agora Mas seguinte para ainda aplicada quando o vi correndo passado.)

Atualmente, Python e usando a API de baixo nível em Java são mais rápidos que JDO em Java, para este teste simples . Pelo menos se as mudanças de motor subjacentes, esse aplicativo deve refletir as mudanças de desempenho.

Com base na experiência com o funcionamento destes VMs em outras plataformas, eu diria que você provavelmente vai sair desempenho mais cru de Java do que Python. Não subestime pontos de venda do Python, no entanto: A linguagem Python é muito mais produtivo em termos de linhas de código - o consenso geral é que Python requer um terço do código de um programa Java equivalente, mantendo-se tão ou mais legível. Este benefício é multiplicado pela capacidade de executar código imediatamente, sem um passo de compilação explícito.

Com relação às bibliotecas disponíveis, você verá que a maior parte da extensa biblioteca de tempo de execução Python funciona fora da caixa (como faz Java 's). O quadro populares Django Web ( http://www.djangoproject.com/ ) também é suportado no AppEngine.

Com relação ao 'poder', é difícil saber o que você quer dizer, mas Python é usado em muitos domínios diferentes, especialmente a Web: YouTube é escrito em Python, como é Sourceforge (como da semana passada)

Junho de 2013: Este vídeo é uma resposta muito boa por um engenheiro do Google:

http://www.youtube.com/watch?v=tLriM2krw2E

TLDR; é:

  • Escolha o idioma que você e sua equipe é mais produtivo com
  • Se você quer construir algo para produção: Java ou Python (não Go)
  • Se você tem uma grande equipe e uma base de código complexo: Java (por causa de análise estática de código e refactoring)
  • equipes pequenas que iterate rapidamente: Python (embora Java também é bom)

Uma questão importante a considerar ao decidir entre Python e Java é como você vai usar o armazenamento de dados em cada idioma (e mais outros ângulos para a pergunta original já foram cobertas muito bem neste tópico) .

Para Java , o método padrão é usar JDO ou JPA. Estes são grandes para a portabilidade, mas não são muito bem adequado para o armazenamento de dados.

A-baixo nível API está disponível, mas isso é muito baixo nível para o uso do dia-a-dia -. É mais adequado para a construção de bibliotecas de 3rd party

Para Python há uma API projetado especificamente para fornecer aplicações com acesso fácil, mas poderosa para o armazenamento de dados. Ele é grande, exceto que não é portátil para que ele bloqueia você em GAE.

Felizmente, existem soluções que estão sendo desenvolvidos para as fraquezas listadas para ambas as línguas.

Para Java , a API de baixo nível está sendo usado para desenvolver persistência bibliotecas que são muito mais adequado para o armazenamento de dados, em seguida, JDO / JPA (IMO). Exemplos incluem o Siena projeto e Objectify .

Eu recentemente comecei a usar Objectify e estou achando que ele seja muito fácil de usar e bem adequado para o armazenamento de dados, e sua crescente popularidade se traduziu em um bom suporte. Por exemplo, Objectify é oficialmente suportado pelo novo serviço de Cloud Endpoints do Google. Por outro lado, Objectify só funciona com o armazenamento de dados, enquanto Siena é 'inspirado' pelo armazenamento de dados, mas é projetado para trabalhar com uma variedade de ambos os bancos de dados SQL e armazenamentos de dados NoSQL.

Para Python , há esforços que estão sendo feitos para permitir o uso do Python GAE armazenamento de dados API fora do GAE. Um exemplo é o backend SQLite que o Google lançou para uso com o SDK, mas duvido que a intenção deste de crescer em produção algo pronto. O projeto TyphoonAE provavelmente tem mais potencial, mas eu não acho que é produção pronto ainda quer (me corrija se eu estiver errado).

Se alguém tem experiência com qualquer uma dessas alternativas ou sabe de outras pessoas, por favor, adicioná-los em um comentário. Pessoalmente, eu realmente gosto do armazenamento de dados GAE - Acho que é para ser uma melhoria considerável em relação a AWS SimpleDB -. Então eu desejo o sucesso desses esforços para aliviar alguns dos problemas em usá-lo

Eu estou recomendando fortemente Java para GAE e aqui está o porquê:

  1. Performance:. Java é potencialmente mais rápido, então Python
  2. desenvolvimento Python está sob pressão de uma falta de bibliotecas de terceiros. Por exemplo, não há XSLT para Python / GAE em tudo. Quase todas as bibliotecas Python são ligações C (e aqueles não são suportados pelo GAE).
  3. Memcache API: Java SDK têm habilidades mais interessantes do que Python SDK
  4. .
  5. Datastore API:. JDO é muito lento, mas Java nativa armazenamento de dados API é muito rápido e fácil

Eu estou usando Java / GAE em desenvolvimento agora.

Como você já identificados, usando uma JVM não restringi-lo a usar a linguagem Java. A lista de idiomas JVM e links podem ser encontrados aqui . No entanto , o Google App Engine faz restringir o conjunto de classes que você pode usar a partir do normal, conjunto Java SE, e você vai querer investigar se qualquer uma dessas implementações podem ser usados ??no app engine.

EDIT: Eu vejo que você encontrou essa lista

Não posso comentar sobre o desempenho do Python. No entanto, a JVM é uma plataforma muito poderosa em termos de performance, dada a sua capacidade de dinamicamente compilar e código de otimizar durante o tempo de execução.

Em última análise, o desempenho vai depender do que sua aplicação faz, e como você codificá-lo. Na ausência de informação mais adicional, eu acho que não é possível dar mais nenhum ponteiros nesta área.

Eu fui espantado em como limpo, simples e livre de problemas o Python / Django SDK é. No entanto, eu comecei a correr em situações onde eu precisava para começar a fazer mais JavaScript e pensei que eu poderia querer aproveitar o GWT e outros utilitários Java. Eu comecei apenas a meio do tutorial GAE Java, e tiveram um problema após outro: problemas de configuração do Eclipse, JRE versionitis, a complexidade de entorpecimento mental de Java, e um tutorial confuso e possivelmente quebrado. Verificar este site e outros ligados a partir daqui conquistou isso por mim. Eu vou voltar para Python, e eu vou olhar para Pijama para ajudar com meus desafios JavaScript.

Eu sou um pouco tarde para a conversa, mas aqui estão meus dois centavos. Eu realmente tive um tempo difícil escolher entre Python e Java, uma vez que estou bem versado em ambas as línguas. Como todos sabemos, existem vantagens e desvantagens para ambos, e você tem que levar em conta suas necessidades e os quadros que funcionam melhor para o seu projeto.

Como eu costumo fazer neste tipo de dilemas, eu olhar para os números para apoiar a minha decisão. Eu decidi ir com Python por muitas razões, mas no meu caso, havia uma trama que foi o ponto de inflexão. Se você pesquisar "Google App Engine" no GitHub como de Setembro 2014 , você vai encontrar a figura a seguir:

GAE Estatísticas Language

Pode haver muitos preconceitos nestes números, mas no geral, há três vezes mais repositórios GAE Python que repositórios GAE Java. Não só isso, mas se você listar os projectos pelo "número de estrelas", você verá que a maioria dos projetos Python aparecer no topo (você tem que levar em conta que Python tem sido em torno de mais). Para mim, isso constitui um forte argumento para Python, porque eu levo na adoção comunidade conta e suporte, documentação e disponibilidade de projetos de código aberto.

É uma boa pergunta, e eu acho que muitas das respostas deram boa pontos de vista dos prós e contras de ambos os lados da cerca. Eu tentei tanto Python e AppEngine baseado em JVM (no meu caso eu estava usando Gaelyk que é um Groovy framework de aplicações construídas para AppEngine). Quando se trata de desempenho na plataforma, uma coisa que eu não tinha considerado até que ele estava me olhando na cara é a implicação de "Carregamento de pedidos" que ocorrem no lado Java da cerca. Ao usar Groovy essas solicitações de carregamento é um assassino.

Eu coloquei um post em conjunto sobre o tema ( http : //distractable.net/coding/google-appengine-java-vs-python-performance-comparison/ ) e eu estou esperando para encontrar uma maneira de trabalhar em torno do problema, mas se não eu acho que eu' vai ser voltar para uma combinação Python + Django até pedidos java frias começando tem um impacto menor.

Com base em quanto eu ouço as pessoas queixam-se de Java AppEngine comparação com usuários de Python, eu diria que Python é muito menos estressante para usar.

Há também projetar andorinha Unladen , que é aparentemente Google- financiado se não for de propriedade do Google. Eles estão tentando implementar um backend baseado em LLVM para Python 2.6.1 bytecode, para que eles possam usar um JIT e vários agradáveis ??código / GC / optimizações multi-core nativos. (Citação Nice: "Aspiramos a fazer nenhum trabalho original, em vez de usar o máximo dos últimos 30 anos de investigação quanto possível.") Eles estão procurando por uma aceleração 5x a CPython

.

É claro que isso não responder à sua pergunta imediata, mas aponta para um "fechamento do gap" (se houver) no futuro (espero).

A beleza de nowdays python é o quão bem ele se comunica com outras línguas. Por exemplo, você pode ter os dois python e java na mesma mesa com Jython. Claro jython mesmo que apoia plenamente as bibliotecas Java não suporta totalmente bibliotecas python. Mas é uma solução ideal se você quer mexer com bibliotecas Java. Ele ainda permite que você misturá-lo com o código Java sem codificação extra.

Mas mesmo python próprio fez alguns passos forwared. Veja ctypes por exemplo, próximo da velocidade C, accees diretos C bibliotecas tudo isso sem sair do conforto de python codificação. Cython vai um passo além, permitindo misturar código c com código de python com facilidade, ou até mesmo se você não quer mexer com C ou C ++, você pode ainda código em python, mas o uso estaticamente digitar variáveis ??fazendo seus programms python tão rápido quanto aplicativos C . Cython é tanto utilizada e apoiado pelo Google pelo caminho.

Ontem eu ainda encontrou ferramentas para python para inline C ou mesmo Assembly (veja CorePy), você não pode ficar mais poderoso do que isso.

Python é certamente uma linguagem muito madura, não só de pé em si, mas capaz de coooperate com qualquer outra língua, com fácil. Eu acho que é o que faz python uma solução ideal mesmo em muito avançadas e exigentes cenários.

Com python você pode ter acesso ao C / C ++, Java, .NET e muitas outras bibliotecas com quase zero adicional de codificação dando-lhe também uma linguagem que minimiza, simplifica e embeleza codificação. É um muito tentador idioma.

Gone with Python, embora GWT parece uma combinação perfeita para o tipo de um aplicativo que estou desenvolvendo. APP é consideravelmente desordenado em GAE (por exemplo, limitações obscura não-documentados não @Embeddable e outros). Depois de ter passado uma semana, posso dizer que o Java simplesmente não se sente bem no GAE no momento.

Um acho que ter em conta são os quadros que você pretende yo uso. Nem todas as estruturas do lado Java são bem adequados para aplicações em execução no App Engine, que é um pouco diferente do que os servidores tradicionais de aplicativos Java.

Uma coisa a considerar é que a aplicação de arranque. Com tradicionais aplicações web Java você realmente não precisa pensar sobre isso. O aplicativo é iniciado e, em seguida, ele só é executado. Realmente não importa se o arranque demora 5 segundos ou alguns minutos. Com o Google App Engine, você pode acabar em uma situação onde a aplicação só é iniciado quando um pedido entra. Isso significa que o usuário está esperando, enquanto suas botas de aplicação para cima. New GAE características como instâncias reservadas ajudar aqui, mas primeiro cheque.

Outra coisa são as diferentes limitações psoes GAE em Java. Nem todas as estruturas estão felizes com as limitações sobre o que as classes que você pode usar ou o facto de tópicos não são permitidas ou que você não pode acessar sistema de arquivos local. Estas questões são, provavelmente, fácil de descobrir por apenas pesquisando sobre a compatibilidade do GAE.

Eu também vi algumas pessoas reclamando sobre problemas com tamanho da sessão sobre frameworks de UI modernos (Wicket, nomeadamente). Em geral estes quadros tendem a fazer certas compensações, a fim de tirar sarro de desenvolvimento, fácil e rápido. Às vezes, isso pode levar a conflitos com as limitações App Engine.

I inicialmente começou a desenvolver trabalhando em GAE com Java, mas depois passou para Python por causa dessas razões. Meu sentimento pessoal é que Python é uma escolha melhor para o desenvolvimento do App Engine. Eu acho que Java é mais "em casa", por exemplo no Amazon Elastic Beanstalk.

MAS com o App Engine as coisas estão mudando muito rapidamente. GAE está mudando a si mesmo e como se torna mais popular, os quadros também estão mudando para contornar suas limitações.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top