162 votes

Choisir Java vs Python sur Google App Engine

Actuellement, Google App Engine prend en charge à la fois de Python Et Java. Le support de Java est moins mature. Cependant, Java semble avoir une longue liste de bibliothèques et surtout le support de Java bytecode quelque soit le langage utilisé pour écrire le code. La langue qui donnera de meilleures performances et plus de puissance? Veuillez informer. Merci!!!!

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

Edit: Par "pouvoir", je veux dire meilleure évolutivité et l'inclusion de bibliothèques disponibles à l'extérieur du cadre. Python permet de pures bibliothèques Python, cependant.

123voto

Alex Martelli Points 330805

Je suis partial (être un expert Python mais assez rouillé en Java) mais je pense que le Python exécution de GAE est actuellement le plus avancé et le mieux développé que le Java runtime-le premier a eu une année supplémentaire pour se développer et mûrir, après tout.

Comment les choses vont continuer à aller de l'avant est bien sûr difficile de prédire -- la demande est probablement plus forte sur le Java côté (surtout depuis qu'il n'est pas seulement à propos de Java, mais d'autres langues perché au sommet de la JVM, donc c'est LA façon de gérer par exemple, PHP ou Ruby code sur App Engine); le Python App Engine équipe n'a cependant l'avantage d'avoir à bord de Guido van Rossum, l'inventeur de Python et un incroyablement forte ingénieur.

En termes de flexibilité, le moteur Java, comme déjà mentionné, ne vous offrons la possibilité de l'exécution du bytecode JVM faites par les différentes langues, et pas seulement Java -- si vous êtes dans un langage multi-boutique qui est assez grand et positif. Vice versa, si vous détestez en Javascript mais doit exécuter du code dans le navigateur de l'utilisateur, de Java GWT (générer le Javascript pour vous à partir de votre Java-le niveau de codage) est beaucoup plus riche et plus avancés que Python-côté de remplacement (dans la pratique, si vous choisissez de Python, vous serez l'écriture de certains JS-vous pour cette fin, alors que si vous choisissez Java GWT est utilisable alternative si vous détestez l'écriture JS).

En termes de bibliothèques, il est à peu près un lavage -- la JVM est assez restreint (pas de fils, pas de classe personnalisée chargeurs, pas de JNI, pas de relationnel) de nuire à la simple réutilisation de l'existant bibliothèques Java autant, ou plus, que les bibliothèques Python sont de même entravée par les restrictions semblables sur l'exécution Python.

En termes de performances, je pense que c'est un lavage, si vous devez un benchmark sur des tâches de votre propre, ne comptez pas sur les performances de très optimisé JIT basé sur la JVM implémentations de l'actualisation de leur grand temps de démarrage et de l'empreinte mémoire, parce que l'app engine environnement est très différent (les coûts de démarrage sera versée souvent, comme des instances de votre application sont démarrés, arrêtés déplacé à différents hôtes, etc, tous les trasparently à vous -- de tels événements sont généralement beaucoup moins cher avec Python environnements d'exécution qu'avec les machines virtuelles).

Le XPath/XSLT situation (à euphémismes...) n'est pas exactement parfait de chaque côté, soupir, mais je pense que c'est peut être un peu moins mauvais dans la JVM (où, apparemment, d'importants sous-ensembles de Saxon peut être fait pour courir, avec un peu de soin). Je pense qu'il vaut la peine de l'ouverture de questions sur l' Appengine Questions de page avec XPath et XSLT dans leurs titres, maintenant il y a seulement des questions demandant des bibliothèques spécifiques, et c'est myope: je ne sais pas vraiment COMMENT une bonne XPath/XSLT est mis en œuvre, pour Python et/ou Java, tant que j'arrive à l'utiliser. (Bibliothèques spécifiques peuvent faciliter la migration de code existant, mais c'est moins important que d'être en mesure d'effectuer des tâches telles que la "appliquer rapidement de transformation XSLT" en QUELQUE sorte!-). Je sais que je serais étoiles à une telle question, si bien formulé (en particulier dans une langue de manière indépendante).

Dernier mais non le moindre: n'oubliez pas que vous pouvez avoir différentes versions de votre application (à l'aide de la même banque de données) certaines sont mises en œuvre avec le runtime de Python, certains avec Java runtime, et vous pouvez accéder à des versions qui diffèrent du "défaut/active" explicite Url. Vous pouvez donc avoir à la fois le Python et le code Java (dans les différentes versions de votre application) d'utiliser et de modifier de la même banque de données, de vous accorder encore plus de souplesse (si seulement on aura le "gentil" URL de la forme foobar.appspot.com -ce qui est probablement important seulement pour l'accès par les utilisateurs interactifs sur les navigateurs, j'imagine;-).

72voto

Richard Watson Points 1863

Regardez ce soft pour les changements de performance Python et Java :

http://gaejava.appspot.com/

Actuellement, le Python et utilisant l’API de bas niveau dans Java sont plus rapides que JDO sur Java, pour ce simple test. Au moins si le moteur sous-jacent change, que l’app doit refléter les changements de performance.

18voto

Judy2K Points 259

Basée sur l'expérience de l'exécution de ces machines virtuelles sur d'autres plates-formes, je dirais que vous obtiendrez probablement plus de matières premières performances de Java que Python. Ne sous-estimez pas Python points de vente, cependant: Le langage Python est beaucoup plus productif en termes de lignes de code - l'accord général est que Python nécessite un troisième du code de l'équivalent d'un programme Java, tout en restant le plus ou des plus lisible. Cette prestation est multiplié par la capacité d'exécuter du code immédiatement sans une étape de compilation explicite.

En ce qui concerne la disposition des bibliothèques, vous trouverez beaucoup de la vaste Python à la bibliothèque d'exécution fonctionne hors de la boîte (comme Java). Le populaire framework Web Django (http://www.djangoproject.com/) est également pris en charge sur AppEngine.

En ce qui concerne la "puissance", il est difficile de savoir ce que tu veux dire, mais Python est utilisé dans de nombreux domaines différents, en particulier le Web: YouTube est écrit en Python, comme Sourceforge (à compter de la semaine dernière).

15voto

tschundeee Points 9241

Juin 2013: Cette vidéo est une très bonne réponse par un ingénieur google:

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

TLDR; est:

  • Choisissez la langue que vous et votre équipe est la plus productive avec
  • Si vous voulez construire quelque chose de production: Java ou Python (ne pas Aller)
  • Si vous avez une grosse équipe et un complexe à base de code: Java (en raison de l'analyse statique de code et de refactoring)
  • De petites équipes qui itérer rapidement: Python (bien que Java est également possible)

9voto

Tom Points 4834

Une question importante à considérer pour décider entre Python et Java est la façon dont vous allez utiliser la banque de données dans chaque langue (et la plupart des autres angles à la question de départ ont déjà été abordés assez bien à ce sujet).

Pour Java, la méthode standard consiste à utiliser JDO ou JPA. Ce sont grands pour la portabilité, mais ne sont pas très bien adaptés à la banque de données.

Une API de bas niveau est disponible, mais c'est trop bas niveau pour le jour-à-jour - il est plus approprié pour la construction de la 3e partie des bibliothèques.

Pour Python, il existe une API conçue spécifiquement pour fournir aux applications simple mais puissant de l'accès à la banque de données. C'est génial, sauf qu'il n'est pas portable, de sorte qu'il se verrouille en FGA.

Heureusement, il existe des solutions développées pour les faiblesses énumérées pour les deux langues.

Pour Java, l'API de bas niveau est utilisé pour développer la persistance des bibliothèques qui sont beaucoup mieux adapté à la banque de données, puis JDO/JPA (OMI). Les exemples incluent la Sienne projet, et de l' Objectiver.

J'ai récemment commencé à utiliser Objectiver et je suis de trouver qu'il est très facile à utiliser et bien adapté à la banque de données, et de sa popularité croissante, s'est traduit par un bon soutien. Par exemple, Objectiver est officiellement pris en charge par Google à nouveau Nuage de points de terminaison du service. D'autre part, d'Objectiver ne fonctionne qu'avec la banque de données, tandis que la Sienne est "inspiré" par la banque de données, mais est conçu pour fonctionner avec une variété de bases de données SQL et NoSQL banques de données.

Pour Python, il y a des efforts en cours pour permettre l'utilisation de Python GAE de la banque de données de l'API hors de la FGA. Un exemple est l'SQLite backend que Google a sorti pour une utilisation avec le kit de développement logiciel, mais je doute qu'ils l'intention d'en devenir quelque chose de prêt pour la production. Le TyphoonAE projet a probablement plus de potentiel, mais je ne pense pas qu'il est prêt pour la production encore (corrigez-moi si je me trompe).

Si quelqu'un a de l'expérience avec l'une de ces solutions de rechange ou sait que d'autres, veuillez les ajouter dans un commentaire. Personnellement, j'aime beaucoup le GAE datastore - je trouve que c'est une amélioration considérable par rapport à la AWS SimpleDB - donc, je souhaite que le succès de ces efforts visant à atténuer certains des problèmes de l'utiliser.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X