Question

Actuellement Google App Engine prend en charge Python et Java. Le support Java est moins mature. Cependant, Java semble avoir une liste plus longue des bibliothèques et en particulier pour soutenir Java bytecode quelles que soient les langues utilisées pour écrire ce code. Quelle langue donnera de meilleures performances et plus de puissance? S'il vous plaît donnez votre avis. Merci!

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

Edit: Par « puissance » Je veux dire une meilleure capacité d'extension et de l'inclusion des bibliothèques disponibles en dehors du cadre. Python permet seulement pur bibliothèques Python, cependant.

Était-ce utile?

La solution

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

Comment les choses vont procéder pour l'avenir est bien sûr difficile de prévoir - la demande est probablement plus forte du côté Java (d'autant plus que ce n'est pas seulement de Java, mais d'autres langues perché au-dessus de la machine virtuelle Java, donc c'est la façon de exécuter par exemple code PHP ou Ruby sur App Engine); l'équipe App Engine Python n'a cependant l'avantage d'avoir à bord Guido van Rossum, l'inventeur de Python et un ingénieur étonnamment forte.

En termes de flexibilité, le moteur Java, comme déjà mentionné, n'offre la possibilité d'exécuter du bytecode JVM faite par des langues différentes, et pas seulement Java - si vous êtes dans un magasin multi-langue qui est un assez grand positif. Vice-versa, si vous détestez Javascript, mais vous devez exécuter du code dans GWT de navigateur de l'utilisateur, Java (générer le Javascript pour vous de votre codage Java niveau) est beaucoup plus riche et plus avancé que les alternatives côté Python (dans la pratique, si vous choisissez Python, vous serez en train d'écrire un peu vous JS à cet effet, alors que si vous choisissez Java GWT est une alternative utilisable si vous détestez l'écriture JS).

En ce qui concerne les bibliothèques, il est à peu près un lavage - la machine virtuelle Java est limitée assez (pas de fils, pas de chargeurs de classe personnalisée, pas JNI, aucun DB relationnelle) pour entraver la réutilisation simple des bibliothèques Java existantes autant, ou plus, que les bibliothèques existantes Python sont également entravés par les restrictions similaires sur le moteur d'exécution Python.

En termes de performance, je pense qu'il est un lavage, si vous devez de référence sur les tâches de votre propre - ne comptez pas sur les performances des implémentations de la JVM à base de JIT hautement optimisées d'actualisation leurs grands temps de démarrage et de l'empreinte mémoire, parce que l'environnement du moteur d'application est très différent (coûts de démarrage seront payés souvent, comme les cas de votre application sont mis en marche, arrêt, déplacés vers différents hôtes, etc, tous trasparently vous - tels événements sont généralement beaucoup moins cher avec des environnements d'exécution Python qu'avec JVMs).

La XPath / XSLT situation (être euphémique ...) est pas tout à fait parfaite de chaque côté, en soupirant, mais je pense qu'il peut être un peu moins mal dans la machine virtuelle Java (où, apparemment, sous-ensembles importants de Saxon peuvent être fait courir, avec soin). Je pense qu'il est des questions d'une valeur d'ouverture sur le la page de AppEngine Problèmes avec XPath et XSLT dans leur - titres en ce moment il n'y a que des questions demandant des bibliothèques spécifiques, et c'est myope: Je ne me soucie pas vraiment comment un bon XPath / XSLT est mis en œuvre, pour Python et / ou pour Java, aussi longtemps que je me l'utiliser. (Bibliothèques spécifiques peuvent faciliter la migration du code existant, mais qui est moins important que d'être en mesure d'effectuer des tâches telles que « appliquer rapidement la transformation XSLT » en quelque sorte -!). Je sais que je StAR une telle question si elle est bien formulée (en particulier d'une manière indépendante de la langue).

Last but not least: rappelez-vous que vous pouvez avoir la version différente de votre application (en utilisant la même datastore) dont certaines sont mises en œuvre avec le moteur d'exécution de Python, certains avec le moteur d'exécution Java, et vous pouvez accéder à des versions qui diffèrent de la " default / active » avec une URL explicite. Donc, vous pourriez avoir à la fois Python et code Java (dans différentes versions de votre application) utiliser et de modifier le même magasin de données, vous accorder encore plus de flexibilité (bien que l'on aura l'URL « belle », comme foobar.appspot.com - ce qui est probablement importante que pour l'accès par les utilisateurs interactifs sur les navigateurs, j'imagine; -).

Autres conseils

Suivre cette application pour l'évolution des performances Python et Java:

http://gaejava.appspot.com/ (Edit: Désolé, le lien est rompu maintenant, mais encore par la suite appliqué quand je l'ai vu courir dernier.)

À l'heure actuelle, Python et en utilisant l'API de bas niveau en Java sont plus rapides que JDO sur Java, pour ce test simple . Au moins, si les changements de moteur sous-jacent, cette application devrait tenir compte des changements de performance.

Basé sur l'expérience avec l'exécution de ces machines virtuelles sur d'autres plates-formes, je dirais que vous aurez probablement plus de performances brutes de Java que Python. Ne pas sous-estimer les points de vente de Python, cependant: Le langage Python est beaucoup plus productif en termes de lignes de code - l'accord général est que Python a besoin d'un tiers du code d'un programme Java équivalent, tout en demeurant ou plus lisible. Cet avantage est multiplié par la capacité d'exécuter du code immédiatement sans une étape de compilation explicite.

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

En ce qui concerne le « pouvoir », il est difficile de savoir ce que vous voulez dire, mais Python est utilisé dans de nombreux domaines différents, en particulier sur le Web: YouTube est écrit en Python, comme Sourceforge (la semaine dernière)

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 le plus productif avec
  • Si vous voulez construire quelque chose pour la production: Java ou Python (not Go)
  • Si vous avez une grande équipe et une base de code complexe: Java (en raison de l'analyse de code statique et refactoring)
  • petites équipes qui se répètent de rapidement: Python (bien que Java est également correct)

Une question importante à considérer dans le choix entre Python et Java est la façon dont vous utiliserez le datastore dans chaque langue (et la plupart des autres angles à la question initiale ont déjà été assez bien couvert dans cette rubrique) .

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 datastore.

Une API de bas niveau est disponible, mais ce qui est trop faible pour une utilisation au jour le jour - il est plus approprié pour la construction de bibliothèques 3ème partie

.

Pour Python il y a une API conçue spécifiquement pour fournir des applications avec un accès facile mais puissant pour le datastore. Il est grand, sauf que ce n'est pas vous portable il se verrouille en GAE.

Heureusement, il existe des solutions en cours d'élaboration pour les faiblesses énumérées pour les deux langues.

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

J'ai récemment commencé à utiliser Objectify et je trouve qu'il est d'être très facile à utiliser et bien adaptée à la datastore, et sa popularité croissante a traduit en un bon soutien. Par exemple, Objectify est officiellement pris en charge par un nouveau service Cloud Endpoints Google. D'autre part, Objectify fonctionne uniquement avec le datastore, tandis que Sienne est « inspiré » par le datastore, mais est conçu pour fonctionner avec une variété de deux bases de données SQL et NoSQL datastores.

Pour Python , il y a des efforts déployés pour permettre l'utilisation de l'API Python datastore GAE hors du GAE. Un exemple est le back-end SQLite que Google a publié pour être utilisé avec le SDK, mais je doute qu'ils ont l'intention de se développer dans ce quelque chose de prêt pour la production. Le projet TyphoonAE a probablement plus de potentiel, mais je ne pense pas que ce soit la production encore prête soit (corrigez-moi si je me trompe).

Si quelqu'un a l'expérience avec l'une de ces alternatives ou connaît d'autres, s'il vous plaît les ajouter dans un commentaire. Personnellement, je aime vraiment le datastore GAE - Je trouve que ce soit une amélioration considérable par rapport à l'AWS SimpleDB - donc je souhaite que le succès de ces efforts pour atténuer certains des problèmes à l'utiliser

.

Je recommande fortement Java pour GAE et voici pourquoi:

  1. Performance:. Java est potentiellement plus rapide que Python
  2. Le développement de Python est sous pression d'un manque de bibliothèques tierces. Par exemple, il n'y a pas XSLT pour Python / GAE du tout. Presque toutes les bibliothèques Python sont des liaisons C (et ce sont pas étayées par GAE).
  3. API Memcache: Java SDK ont des capacités plus intéressantes que Python SDK
  4. .
  5. API Datastore. JDO est très lent, mais Java API Datastore natif est très rapide et facile

J'utilise Java / GAE dans le développement en ce moment.

Comme vous l'avez identifié, à l'aide d'une machine virtuelle Java ne vous empêche pas d'utiliser le langage Java. Une liste des langues JVM et des liens se trouve . Cependant , Google App Engine fait restreindre l'ensemble des classes que vous pouvez utiliser de l'ensemble normale Java SE, et vous voulez vérifier si l'une de ces mises en œuvre peuvent être utilisées sur le moteur de l'application.

EDIT: Je vois que vous avez trouvé une telle liste

Je ne peux pas commenter sur la performance de Python. Cependant, la machine virtuelle Java est une performance sage plate-forme très puissante, étant donné sa capacité à compiler dynamiquement et optimiser le code pendant le temps d'exécution.

En fin de compte la performance dépendra de ce que fait votre application, et comment vous coder. En l'absence d'informations plus loin, je pense qu'il est impossible de donner plus de pointeurs dans ce domaine.

J'ai été étonné de voir comment propre, simple et sans problème le SDK Python / Django est. Cependant, je commencé à courir dans des situations où je devais commencer à faire plus Javascript et pensé que je pourrais vouloir profiter des utilitaires GWT et d'autres Java. Je l'ai obtenu chemin juste la moitié par le tutoriel GAE Java, et ont eu un problème après l'autre: Eclipse problèmes de configuration, JRE versionitis, la complexité abrutissante de Java, et un tutoriel confus et peut-être cassé. Vérification sur ce site et d'autres liés d'ici pour moi fait pencher la balance. Je vais revenir à Python, et je vais examiner Pyjama pour aider à mes défis JavaScript.

Je suis un peu en retard à la conversation, mais voici mes deux cents. J'ai eu vraiment du mal à choisir entre Python et Java, depuis que je suis bien versé dans les deux langues. Comme nous le savons tous, il y a des avantages et des inconvénients pour les deux, et vous devez prendre en compte vos besoins et les cadres qui fonctionnent le mieux pour votre projet.

Comme je le fais habituellement dans ce type de dilemmes, je cherche des chiffres à l'appui de ma décision. J'ai décidé d'aller avec Python pour de nombreuses raisons, mais dans mon cas, il y avait un complot qui était le point de basculement. Si vous recherchez "Google App Engine" dans GitHub au Septembre 2014 , vous trouverez la figure suivante:

GAE langue Statistiques

Il pourrait y avoir de nombreux biais dans ces chiffres, mais dans l'ensemble, il y a trois fois plus de dépôts GAE Python que les référentiels GAE Java. Non seulement cela, mais si vous la liste des projets par le « nombre d'étoiles », vous verrez que la majorité des projets Python apparaissent en haut (vous devez prendre en compte le fait que Python a été autour plus). Pour moi, cela fait un cas fort pour Python parce que je prends dans la communauté compte l'adoption et le soutien, la documentation et la disponibilité de projets open-source.

Il est une bonne question, et je pense que la plupart des réponses ont donné de bons points de vue des avantages et des inconvénients des deux côtés de la clôture. Je l'ai essayé à la fois Python et AppEngine basé sur JVM (dans mon cas, j'utilisais Gaelyk qui est un Groovy cadre d'application construit pour AppEngine). En ce qui concerne la performance sur la plate-forme, une chose que je ne l'avais pas considéré jusqu'à ce qu'il me regardait fixement en face est l'implication des « demandes de chargement » qui se produisent sur le côté Java de la clôture. Lorsque vous utilisez Groovy ces demandes de chargement sont un tueur.

Je mets un poste ensemble sur le sujet ( http : //distractable.net/coding/google-appengine-java-vs-python-performance-comparison/ ) et j'espère trouver un moyen de contourner le problème, mais si je pense pas que je ll aller retour à une combinaison Python + Django jusqu'à ce que les demandes java de démarrage à froid a moins d'impact.

Sur la base de combien j'entends Java les gens se plaignent de AppEngine par rapport aux utilisateurs de Python, je dirais que Python est d'utiliser beaucoup moins stressant.

Il y a aussi le projet hirondel , qui est apparemment Google- financé sinon Google appartenant. Ils essaient de mettre en place un back-end basé sur LLVM pour Python 2.6.1 bytecode, ils peuvent utiliser un JIT et plusieurs beaux code natif / GC / Optimisations multi-core. (Citation de Nice: « Nous aspirons à faire aucun travail d'origine, au lieu d'utiliser autant des 30 dernières années de recherche possible. ») Ils sont à la recherche d'une 5x vitesse jusqu'à CPython

.

Bien sûr, cela ne répond pas à votre question immédiate, mais les points vers une « fermeture de l'espace » (le cas échéant) à l'avenir (je l'espère).

La beauté de nowdays python est la façon dont il communique avec d'autres langues. Par exemple, vous pouvez avoir à la fois python et java sur la même table avec Jython. Bien sûr Jython même si elle soutient pleinement les bibliothèques de Java, il ne supporte pas les bibliothèques entièrement python. Mais sa solution idéale si vous voulez jouer avec Java Bibliothèques. Il vous permet même de le mélanger avec du code Java sans codage supplémentaire.

Mais python même lui-même a fait quelques pas forwared. Voir ctypes par exemple, près de la vitesse de C, accees directe aux bibliothèques C tout cela sans quitter le confort de codage python. Cython va un peu plus loin, ce qui permet de mélanger le code c avec le code python avec facilité, ou même si vous ne voulez pas salir avec c ou c ++, vous pouvez coder encore en python, mais utiliser le type statiquement variables qui vos programms python aussi vite que des applications C . Cython est à la fois utilisé et soutenu par google par le chemin.

Hier j'ai même trouvé des outils pour python à inline C ou même Assemblée (voir CorePy), vous ne pouvez pas obtenir plus puissant que cela.

Python est certainement une langue très mature, non seulement debout sur elle-même, mais capable de coooperate avec une autre langue avec facile. Je pense que c'est ce qui fait python une solution idéale, même dans un très avancé et des scénarios exigeant.

Avec python vous pouvez avoir acess à C / C ++, Java, .NET et beaucoup d'autres bibliothèques avec le codage supplémentaire presque zéro, vous donnant aussi une langue qui minimise, simplifie et embellit le codage. Son langage très tentant.

Autant en emporte Python même si GWT semble un match parfait pour le genre d'une application que je développe. JPA est assez foiré sur GAE (par exemple pas @Embeddable et d'autres obscures limites non documentées). Après avoir passé une semaine, je peux dire que Java ne fonctionne tout simplement se sent pas bien sur GAE au moment.

On ne pense à prendre en compte sont les cadres que vous comptez utiliser yo. Tous les cadres sur le côté Java sont bien adaptés pour les applications en cours d'exécution sur App Engine, qui est un peu différent de celui des serveurs d'applications Java traditionnels.

Une chose à considérer est le temps de démarrage de l'application. Avec les applications web Java traditionnels que vous ne avez pas vraiment besoin de penser à ce sujet. L'application démarre et il court juste. Ne pas vraiment d'importance si le démarrage prend 5 secondes ou quelques minutes. Avec App Engine, vous pourriez finir dans une situation où l'application ne démarre que lorsqu'une demande vient. Cela signifie que l'utilisateur attend pendant que vos bottes d'application vers le haut. New GAE fonctionnalités telles que des instances réservées aide ici, mais il faut vérifier d'abord.

Une autre chose sont les différentes limites GAE psoes sur Java. Tous les cadres sont satisfaits des limites à ce que les classes que vous pouvez utiliser ou le fait que les fils ne sont pas autorisés ou que vous ne pouvez pas accéder à système de fichiers local. Ces problèmes sont probablement faciles à trouver par juste googler sur la compatibilité GAE.

Je l'ai aussi vu des gens se plaindre de problèmes avec la taille de la session sur les cadres de l'interface utilisateur moderne (Wicket, à savoir). En général, ces cadres ont tendance à faire certains compromis pour se moquer de développement, rapide et facile. Parfois, cela peut conduire à des conflits avec les limites App Engine.

J'ai d'abord commencé à travailler sur le développement GAE avec Java, mais Python passé à cause de ces raisons. Mon sentiment personnel est que Python est un meilleur choix pour App Engine développement. Je pense que Java est plus « à la maison », par exemple sur Elastic Beanstalk d'Amazon.

et avec App Engine choses changent très rapidement. GAE est en train de changer lui-même et comme il devient plus populaire, les cadres sont en train de changer pour contourner ses limites.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top