Domanda

Al momento Google App Engine supporta sia Python e Java. supporto Java è meno maturo. Tuttavia, Java sembra avere un elenco di librerie più a lungo e in particolare il supporto per Java bytecode a prescindere dai linguaggi utilizzati per scrivere che il codice. Quale lingua darà prestazioni migliori e più potere? Si prega di avvisare. Grazie!

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

Modifica Con il termine "potere" Voglio dire una migliore espandibilità e l'inclusione delle librerie disponibili al di fuori del quadro. Python consente solo le librerie Python puri, però.

È stato utile?

Soluzione

io sono di parte (essendo un esperto di Python, ma piuttosto arrugginito in Java), ma penso che il runtime di Python di GAE è attualmente più avanzato e più sviluppata rispetto al runtime Java - il primo ha avuto uno anno in più di sviluppare e maturare , dopo tutto.

Come le cose procederanno per il futuro è naturalmente difficile da prevedere - la domanda è probabilmente più forte sul lato Java (soprattutto perché non si tratta solo di Java, ma altre lingue arroccato sulla cima della JVM troppo, quindi è il modo per eseguire ad esempio PHP o il codice Ruby on App Engine); il team del motore di Python App però ha il vantaggio di avere a bordo Guido van Rossum, l'inventore di Python e un sorprendentemente forte ingegnere.

In termini di flessibilità, il motore Java, come già accennato, non offre la possibilità di eseguire bytecode JVM fatta da diverse lingue, non solo Java - se siete in un negozio multi-lingua che è un abbastanza grande positivo. Viceversa, se si detestano Javascript ma deve eseguire del codice nel browser dell'utente, GWT di Java (che genera il Javascript per voi dal vostro codice a livello di Java) è molto più ricco e più avanzato rispetto alle alternative Python-side (in pratica, se si sceglie Python, ti scriverà qualche te stesso JS per questo scopo, mentre se si sceglie Java GWT è un utile alternativa se detesto scrivere JS).

In termini di librerie è praticamente un lavaggio - la JVM è limitato sufficiente (nessun thread, nessun caricatori di classe personalizzati, senza JNI, non relazionale DB) per ostacolare il semplice riutilizzo di librerie Java esistenti tanto, o più, di librerie Python esistenti sono allo stesso modo ostacolati dalle restrizioni simili sul runtime di Python.

In termini di prestazioni, penso che sia un lavaggio, anche se si dovrebbe punto di riferimento sulle attività della propria - non contare sulle prestazioni di implementazioni altamente ottimizzati JVM JIT a base di attualizzazione loro grandi tempi di avvio e impronte di memoria, perché l'ambiente del motore applicazione è molto diverso (costi di avvio saranno pagati spesso, come si avviano istanze della vostra applicazione, si fermò, si trasferì a diversi host, ecc, tutti trasparently a voi - tali eventi sono in genere molto più conveniente con ambienti di runtime di Python che con JVM).

Il / situazione XSLT XPath (per essere eufemistico ...) non è esattamente perfetta su entrambi i lati, sospiro, anche se penso che potrebbe essere un po 'meno male nella JVM (dove, a quanto pare, notevoli sottoinsiemi di Saxon possono essere fatta a correre, con una certa attenzione). Penso che sia questioni di apertura per un valore sul Problemi AppEngine pagina con XPath e XSLT nella loro titoli - in questo momento ci sono solo le questioni che chiedono librerie specifiche, e questo è miope: non mi interessa come un buon XPath / XSLT è implementato, per Python e / o per Java, fino a quando riesco a usarlo. (Librerie specifiche possono facilitare la migrazione di codice esistente, ma questo è meno importante di essere in grado di eseguire attività quali "si applicano rapidamente trasformazione XSLT" in qualche modo -!). So che avrei stelle una questione se ben formulata (in particolare in un modo indipendente dalla lingua).

Ultimo ma non meno importante: ricordate che si può avere la versione diversa della vostra applicazione (utilizzando lo stesso datastore), alcuni dei quali sono implementate con il runtime di Python, alcuni con il runtime di Java, e si può accedere alle versioni che si differenziano dal " default / attivo" uno con gli URL espliciti. Così si potrebbe avere sia Python e codice Java (in diverse versioni della tua app) utilizzare e modificare lo stesso archivio dati, si concede una flessibilità ancora maggiore (anche se solo uno avrà l'URL "bella", come foobar.appspot.com - che è probabilmente importante solo per l'accesso dagli utenti interattivi su browser, immagino, -).

Altri suggerimenti

Guarda questa applicazione per le modifiche in Python e Java prestazioni:

http://gaejava.appspot.com/ (Edit: le scuse, collegamento viene interrotto ora, ma dopo para applicate ancora quando l'ho visto correre per ultimo.)

Al momento, Python e utilizzando l'API di basso livello in Java sono più veloci di JDO su Java, per questo semplice test . Almeno se i sottostanti modifiche del motore, l'app dovrebbe riflettere i cambiamenti di prestazioni.

Sulla base dell'esperienza con l'esecuzione di questi macchine virtuali su altre piattaforme, direi che probabilmente otterrete maggiori prestazioni grezzo di Java di Python. Non sottovalutare i punti di vendita di Python, comunque: Il linguaggio Python è molto più produttivo in termini di linee di codice - l'accordo generale è che Python richiede un terzo del codice di un programma Java equivalente, pur rimanendo come o più leggibile. Questo vantaggio viene moltiplicato per la possibilità di eseguire codice immediatamente, senza un passo di compilazione esplicita.

Per quanto riguarda le librerie disponibili, troverete che gran parte della vasta libreria di runtime di Python funziona out of the box (come fa Java). Il popolare Web framework Django ( http://www.djangoproject.com/ ) è supportato anche su AppEngine.

Per quanto riguarda il 'potere', è difficile sapere che cosa vuoi dire, ma Python viene utilizzato in molti settori diversi, in particolare il Web: YouTube è scritto in Python, come Sourceforge (come della scorsa settimana)

Giugno 2013: Questo video è una risposta molto buona da un ingegnere di Google:

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

TLDR; è:

  • Scegli la lingua che voi e il vostro team è più produttivo con
  • Se si vuole costruire qualcosa per la produzione: Java o Python (not Go)
  • Se si dispone di una grande squadra e una base di codice complesso: Java (a causa di analisi statica del codice e refactoring)
  • Piccoli squadre che iterano rapidamente: Python (anche se Java è anche bene)

Una questione importante da considerare nel decidere tra Python e Java è come si intende utilizzare l'archivio dati in ogni lingua (e la maggior parte altre angolazioni alla domanda iniziale sono già stati coperti abbastanza bene in questo argomento) .

Per Java , il metodo standard è quello di utilizzare JDO e JPA. Questi sono grandi per la portabilità, ma non sono molto ben si adatta al datastore.

Un'API di basso livello è disponibile, ma questo è il livello troppo basso per il giorno per giorno - è più adatto per la costruzione di librerie 3rd party

.

Per Python non v'è un'API progettato specificamente per fornire alle applicazioni facile ma potente accesso al datastore. E 'ottimo, tranne che non è portatile in modo che si blocca in GAE.

Per fortuna, ci sono soluzioni in fase di sviluppo per le debolezze elencate per entrambe le lingue.

Per Java , l'API di basso livello viene utilizzato per sviluppare le librerie di persistenza che sono molto più adatti al datastore poi JDO / JPA (IMO). Gli esempi includono il Siena progetto , e oggettivare .

Recentemente ho iniziato ad usare oggettivare e sto trovando che sia molto facile da usare e ben si adatta al datastore, e la sua crescente popolarità è tradotto in un buon supporto. Ad esempio, oggettivare è ufficialmente supportato dal nuovo servizio endpoint cloud di Google. D'altra parte, oggettivare funziona solo con l'archivio dati, mentre Siena è 'ispirata' dalla datastore, ma è progettato per funzionare con una varietà di entrambi i database SQL e NoSQL datastore.

Per Python , ci sono gli sforzi compiuti per consentire l'utilizzo dell'archivio dati API Python GAE iniziale del GAE. Un esempio è il backend SQLite che Google ha rilasciato per l'utilizzo con l'SDK, ma dubito che intendono questo per crescere in qualcosa di pronto per la produzione. Il progetto TyphoonAE probabilmente ha più potenziale, ma io non credo che sia la produzione ancora pronto o (correggetemi se sbaglio).

Se qualcuno ha esperienza con una qualsiasi di queste alternative o sa di altri, si prega di aggiungere un commento. Personalmente, mi piace molto il datastore GAE - Trovo che sia un notevole miglioramento rispetto al AWS SimpleDB - così mi auguro per il successo di questi sforzi per alleviare alcuni dei problemi a usarlo

.

Sono fortemente raccomandare Java per GAE ed ecco perché:

  1. Prestazioni:. Java è potenzialmente più veloce allora Python
  2. sviluppo Python è sotto pressione di una mancanza di librerie di terze parti. Per esempio, non v'è alcuna XSLT per Python / GAE a tutti. Quasi tutte le librerie di Python sono C binding (e quelli non sono supportati da GAE).
  3. API Memcache: Java SDK hanno abilità più interessanti di Python SDK
  4. .
  5. archivio dati API:. JDO è molto lento, ma Java nativo archivio dati API è molto facile e veloce

Sto usando Java / GAE in fase di sviluppo in questo momento.

Come si è identificato, utilizzando una JVM non si limitano a usare il linguaggio Java. Un elenco delle lingue JVM e link può essere trovato qui . Tuttavia , Google App Engine fa restringere l'insieme di classi che è possibile utilizzare dal normale set di Java SE, e si vuole indagare se uno qualsiasi di queste implementazioni possono essere usati sul motore app.

EDIT: Vedo che hai trovato un elenco del genere

Non posso commentare le prestazioni di Python. Tuttavia, la JVM è una piattaforma molto potente performance, data la sua capacità di compilare in modo dinamico e ottimizzare il codice durante la fase di esecuzione.

In definitiva le prestazioni dipenderà da ciò che la vostra applicazione fa, e come si codificarlo. In assenza di ulteriori informazioni, penso che non è possibile dare alcuna più puntatori in questo settore.

Sono stato stupito di come pulito, semplice e senza problemi Python / Django SDK è. Tuttavia ho iniziato a correre in situazioni in cui avevo bisogno di iniziare a fare più Javascript e pensato potrei voler approfittare del GWT e altre utility Java. Ho ottenuto appena a metà strada attraverso il tutorial GAE Java, e hanno avuto un problema dopo l'altro: Eclipse problemi di configurazione, JRE versionitis, la complessità noiose di Java, e un tutorial confuso e possibilmente rotto. Il check-out questo sito e altri collegati da qui ha conquistato per me. Io torno a Python, e io guardare in pigiama per aiutare con le mie sfide JavaScript.

Sono un po 'tardi per la conversazione, ma qui ci sono i miei due centesimi. Ho davvero avuto un momento difficile scegliere tra Python e Java, dal momento che io sono ben versato in entrambe le lingue. Come tutti sappiamo, ci sono vantaggi e svantaggi per entrambi, e si deve prendere in considerazione le vostre esigenze e dei quadri che funzionano meglio per il vostro progetto.

Come faccio di solito in questo tipo di dilemmi, guardo per i numeri per sostenere la mia decisione. Ho deciso di andare con Python per molte ragioni, ma nel mio caso, c'era una trama che è stato il punto di svolta. Se si cerca "Google App Engine" in GitHub come di Settembre 2014 , si trova la figura che segue:

Statistiche Lingua GAE

Ci potrebbero essere molti pregiudizi in questi numeri, ma nel complesso, ci sono tre volte più GAE Python repository di repository GAE Java. Non solo, ma se si elencano i progetti per il "numero di stelle" si vedrà che la maggioranza dei progetti Python appaiono in alto (si deve prendere in considerazione che Python è stato più a lungo). Per me, questo rende un forte caso per Python perché prendo in adozione conto Community e supporto, la documentazione, e la disponibilità di progetti open-source.

E 'una buona domanda, e penso che molte delle risposte hanno dato buoni punti di vista di pro e contro su entrambi i lati della barricata. Ho provato sia Python e AppEngine JVM-based (nel mio caso ho usato Gaelyk che è un Groovy application framework costruito per AppEngine). Quando si tratta di prestazioni sulla piattaforma, una cosa che non avevo considerato fino a quando non mi stava fissando in faccia è l'implicazione di "Caricamento Richieste" che si verificano sul lato Java della recinzione. Quando si utilizza Groovy queste richieste di carico sono un killer.

ho messo insieme un post sul tema ( http : //distractable.net/coding/google-appengine-java-vs-python-performance-comparison/ ) e sto sperando di trovare un modo di lavorare intorno al problema, ma se non penso' ll essere tornare a una combinazione Python + Django fino fredde richieste java di partenza ha un impatto minore.

In base a quanto ho sentito gente Java lamentano AppEngine rispetto agli utenti di Python, direi Python è molto meno stressante per l'uso.

C'è anche proiettare vuoto Rondine , che è apparentemente Google- finanziato se non di proprietà di Google. Stanno cercando di implementare un backend LLVM-based per Python 2.6.1 bytecode, in modo da poter utilizzare un JIT e varie ottimizzazioni belle / multi-core nativa di codice / GC. (Bella citazione: "Aspiriamo a fare nessun lavoro originale, invece utilizzando come gran parte degli ultimi 30 anni di ricerca il più possibile.") Stanno cercando un 5x velocità fino a CPython

.

Naturalmente questo non risponde alla tua domanda immediata, ma i punti verso una "chiusura del gap" (se presente) in futuro (si spera).

La bellezza di oggigiorno Python è come ben si comunica con altri linguaggi. Per esempio si può avere sia python e Java sullo stesso tavolo con Jython. Naturalmente Jython anche se supporta pienamente le librerie Java non supporta le librerie completamente pitone. Ma la sua una soluzione ideale se si vuole pasticciare con le librerie Java. Esso permette anche di mescolare con il codice Java senza codifica supplementare.

Ma anche lo stesso Python ha fatto alcuni passi forwared. Vedere ctypes per esempio, nei pressi di velocità C, è di passaggio senza scalo a librerie C tutto questo senza lasciare la comodità della codifica pitone. Cython fa un passo avanti, consentendo di mescolare il codice C con codice Python con facilità, o anche se non volete pasticciare con C o C ++, è ancora possibile il codice in Python, ma usare digitare statico variabili rendere i vostri programms pitone più velocemente applicazioni C . Cython si sia utilizzato e supportato da Google a proposito.

Ieri ho anche trovato gli strumenti per Python per inline C o anche il montaggio (vedi CorePy), non si può ottenere qualsiasi più potente di quello.

Python è sicuramente un linguaggio molto maturo, non solo in piedi su se stessa, ma in grado di coooperate con qualsiasi altra lingua con facile. Credo che questo sia ciò che rende python una soluzione ideale anche in una molto avanzata ed esigente scenari.

Con Python si può avere Acess al C / C ++, Java, .NET e molte altre biblioteche con quasi zero aggiuntivo di codifica dandovi anche un linguaggio che riduce al minimo, semplifica e abbellisce codifica. Il suo un linguaggio molto allettante.

Via col Python, anche se GWT sembra un partner perfetto per il tipo di un app sto sviluppando. APP è piuttosto incasinato su GAE (ad esempio non oscuri limitazioni @Embeddable e altri non documentate). Dopo aver trascorso una settimana, posso dire che Java semplicemente non si sente proprio sul GAE al momento.

pensare di prendere in considerazione sono i quadri che si intende yo uso. Non tutti i quadri sul lato Java sono particolarmente adatti per applicazioni in esecuzione su App Engine, che è un po 'diverso rispetto ai server Java app tradizionali.

Una cosa da considerare è il tempo di avvio dell'applicazione. Con tradizionali applicazioni web Java non si ha realmente bisogno di pensare a questo. L'applicazione si avvia e poi si corre solo. Non importa se l'avvio impiega 5 secondi o pochi minuti. Con App Engine si potrebbe finire in una situazione in cui l'applicazione viene avviata solo quando arriva una richiesta. Ciò significa che l'utente è in attesa, mentre gli stivali di applicazione su. Nuovo GAE caratteristiche come le istanze riservate aiuto qui, ma controllare prima.

Un'altra cosa sono le diverse limitazioni psoes GAE su Java. Non tutti i quadri sono felici con le limitazioni su quali classi è possibile utilizzare o il fatto che le discussioni non sono ammessi o che non è possibile accedere file system locale. Questi problemi sono probabilmente facili da trovare da solo googling sulla compatibilità GAE.

Ho visto anche alcune persone che si lamentano problemi con le dimensioni della sessione su moderni quadri di interfaccia utente (Wicket, cioè). In generale, questi quadri tendono a fare alcuni compromessi al fine di prendere in giro lo sviluppo, veloce e facile. A volte questo può portare a conflitti con le limitazioni di App Engine.

Inizialmente ho iniziato a sviluppare a lavorare su GAE con Java, ma poi passato a Python a causa di questi motivi. Il mio sensazione personale è che Python è una scelta migliore per lo sviluppo di App Engine. Credo che Java è più "a casa" per esempio sul fagiolo magico elastico di Amazon.

MA con App Engine cose stanno cambiando molto rapidamente. GAE sta cambiando se stessa e come si diventa più popolare, i quadri stanno cambiando per aggirare i suoi limiti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top