Python sarebbe troppo lento per l'utilizzo sul lato client nei browser?

17

Ho sentito affermare che Python sarebbe troppo lento per essere di qualche utilità nei browser.

Riconosco che Javascript è superiore in questo aspetto a causa di aziende come Google che ne hanno bisogno velocemente (e lo hanno reso veloce) perché ne hanno bisogno per sopravvivere, ma potrei sbagliarmi.

Ci sono differenze nel modo in cui Python e Javascript sono progettati che hanno un impatto sul modo in cui (dovrebbero) comportarsi nei browser?

Poiché al momento non esiste un'implementazione Python lato client, la mia domanda deriva dall'affermazione fatta da qualcuno, quindi forse ha qualcosa a che fare con le lingue stesse (anche se non lo credo).

    
posta Profpatsch 12.03.2013 - 14:16
fonte

7 risposte

23

Per cominciare, dobbiamo fare una chiara distinzione tra lingue e implementazioni . Una lingua è una cosa astratta, l'implementazione è una cosa concreta che può misurare le prestazioni. Ad esempio, Lisp era considerato troppo inefficiente per l'uso pratico, ma i compilatori continuavano a maturare e, alla fine, l'hardware dedicato è stato sviluppato per questo; a un certo punto negli anni '80 era la piattaforma di sviluppo scelta per lo sviluppo di workstation ad alte prestazioni.

Detto questo, la risposta più semplice è che un'implementazione Javascript veloce come V8 di Google soffia fuori dall'acqua l'implementazione standard di Python (CPython) . V8 è una macchina virtuale altamente ottimizzata con un JITer che è incredibilmente veloce mentre CPython è una macchina virtuale abbastanza semplice in confronto. C'è un'implementazione di Python con un JIT, ma è ancora solo circa 5-6 volte più veloce.

Cinque anni fa sarebbe stata una storia diversa. I browser avevano implementazioni di Javascript semplicistiche, perché la velocità non era un problema dal momento che nessuno creava software "reale" con esso e Python sarebbe stato uguale, se non addirittura più veloce.

    
risposta data 12.03.2013 - 19:55
fonte
5

Nei vecchi tempi del web, quando le applet java in cui la main forma unica di contenuto interattivo lato client le persone si rendevano conto che doveva essere un modo per ottenere moduli su una pagina web per essere in grado per interagire con le applet sulla pagina web.

Da questo, un linguaggio di scripting per collegare l'applet java alla pagina web è stato creato con il nome ... javascript.

Si possono vedere le vestigia di questa eredità con domande SO come [ 1 ], [ 2 ], [3 ] - e i due ufficiali documenti: Richiamo del codice JavaScript da un'applet e Invocazione di metodi di applet dal codice JavaScript

Con un tale linguaggio disponibile i browser del tempo (Netscape è il principale) ha reso disponibile javascript come vantaggio competitivo (javascript progettato su Netscape - Netscape è stato il primo javascript lato server con il suo server indietro nel '94 - quasi due decenni prima di node.js). Altri browser hanno seguito l'esempio. Le persone scrivevano pagine che utilizzavano javascript, altri tentativi di scripting lato client significherebbero pagine completamente incomprimibili tra cose che funzionano e cose che non lo fanno - o duplicazione di codice (qui c'è il blocco {insert language here} che lo fa per non-javascript browser ed ecco il blocco javascript per tutti gli altri).

Poiché Netscape era il browser dominante per un certo periodo, javascript ha preso piede. Mentre l'eredità di Netscape viene persa dalle note a piè di pagina dei file sorgente di Mozilla, javascript sopravvive e nulla è stato in grado di gettare il suo posto.

Il problema rimane per qualsiasi altro linguaggio di scripting della diapositiva del client. Javascript è supportato su ogni browser. Se si dovesse creare un browser che supporta python (ad esempio) piuttosto che javascript, non sarebbe in grado di utilizzare la maggior parte dei siti web. Inoltre, a meno che quel browser non sia in grado di ottenere una quota significativa del traffico del browser, i web designer non vogliono creare due gruppi di pagine con linguaggi di scripting diversi per la stessa pagina.

Si potrebbe provare a creare un plugin per script Python per alcuni browser che abilitino uno script python sulla pagina ... simile a come funziona vrml oggi. Ma a meno che tu non abbia sentito e visto una pagina web che usa vrml, è altrettanto probabile che trovi l'uso per un'altra pagina web per un altro linguaggio di scripting.

    
risposta data 12.03.2013 - 14:52
fonte
4

Non penso che Python sarebbe troppo lento. Non c'è nulla nel linguaggio che lo impedisca di funzionare abbastanza velocemente da corrispondere almeno a JavaScript. Può essere compilato su JavaScript, quindi, se non altro, potresti includere un compilatore nel browser e aumentare potenzialmente i tempi di caricamento della pagina.

AGGIORNAMENTO: Si vedano i commenti seguenti che spiegano perché compilare Python in JS sarebbe molto più costoso di quello implicito qui.

Il problema è cercare di convincere i produttori di browser e il W3C a scegliere prima Python, Ruby o qualsiasi altro linguaggio di scripting piacevole, quindi definire un sottoinsieme standardizzato, poiché non possono consentire le chiamate di sistema e così via, e quindi implementarlo bene , il tutto supportando ancora JavaScript. Non succederà, ma se lo facesse, dubito che la velocità si rivelerà un problema serio.

    
risposta data 12.03.2013 - 14:51
fonte
2

Penso che Python abbia la sua macchina virtuale. Non ho molta esperienza con Python, ma non vedo alcun motivo per cui non funzionerebbe altrettanto bene come un motore JavaScript non ottimizzato.

Alcuni pensieri casuali:

(1) Probabilmente potresti eseguire Python localmente attraverso un'applet Java usando Jython. La parte difficile che vedo qui è che le applet sono molto restrittive, quindi potrebbe essere necessario modificare Jython per adattarsi alle restrizioni di accesso. Ad esempio, se scrive su un file di registro, potrebbe essere necessario rimuovere il codice di registrazione. Non è necessario che l'applet sia visibile.

(2) Qualcuno potrebbe creare un "compilatore" / convertitore da Python a JavaScript. Questo sarebbe molto lavoro.

    
risposta data 12.03.2013 - 14:42
fonte
1

Dipende dall'implementazione della lingua e non necessariamente dalla lingua stessa. La maggior parte degli interpreti JavaScript è molto più veloce di quasi tutte le implementazioni di Python.

Questo non significa che il linguaggio Python non possa essere usato quasi alla stessa velocità di JavaScript. Opal implementa quasi tutto il linguaggio Ruby e la libreria standard nel browser compilando il codice Ruby nel codice JavaScript avvolto nelle chiusure. Mettendo da parte il sovraccarico di includere la libreria Opal, la sua velocità è molto più vicina a quella del diritto JavaScript di qualsiasi altro interprete Ruby che io conosca.

Non so se esiste un equivalente Python di Opal, ma un progetto del genere significherebbe probabilmente che la risposta alla tua domanda è "no". Con l'uso crescente di JavaScript come "linguaggio assembly per il web", non mi sorprenderebbe se venisse usato sempre più come piattaforma per altre lingue, specialmente con l'aumentare della potenza di calcolo mobile e il sovraccarico di avere una lingua implementato in JavaScript diventa sempre più negligente.

EDIT: Ecco un elenco di implementazioni Python per il browser che compilano / eseguono su JavaScript.

link

E nel caso tu sia interessato, puoi dare un'occhiata a Opal, che mi piace molto.

link

Poiché dubito che i browser arriveranno con il supporto di interpreti separati, questi compilatori sono probabilmente la via del futuro in termini di utilizzo di lingue diverse da JavaScript. Anche ora, otterrai prestazioni comparabili in molte aree. Questa è la mia opinione, tuttavia, tieni questo a mente.

    
risposta data 08.01.2015 - 19:25
fonte
0

Anche quando hai fatto questa domanda, c'erano già un certo numero di implementazioni python disponibili in javascript che possono essere utilizzate su pagine web oggi.

Dai un'occhiata al link o link per i principianti.

Le prestazioni non sembrano essere troppo male, ma dovresti testarle tu stesso e scoprirlo.

    
risposta data 17.02.2014 - 11:39
fonte
-4

Python è una lingua "console", in esecuzione sul server

Javascript è una lingua "browser", in esecuzione sul client

In quanto tali, non competono direttamente

... ovviamente ci sono node.js e probabilmente plug-in del browser Python, ma poi è più una domanda sulle prestazioni di una particolare implementazione.

Inoltre, per la maggior parte delle applicazioni Python andrà benissimo, tranne se devi fare una sorta di calcoli estesi e spremere i cicli della CPU.

Come ultima nota, python e javascript condividono molte somiglianze. A causa della loro natura dinamica, entrambi devono essere interpretati in fase di esecuzione e non possono essere compilati con la stessa forza dei linguaggi tipizzati statici. Pertanto, presumo che le prestazioni ottenibili siano simili.

    
risposta data 12.03.2013 - 15:47
fonte

Leggi altre domande sui tag