Ich habe die Aussage gehört, dass Python zu langsam wäre, um in Browsern von Nutzen zu sein.
Ich denke, Javascript ist in dieser Hinsicht nur überlegen, weil Unternehmen wie Google es schnell brauchen (und schnell gemacht haben), weil sie es brauchen, um zu überleben, aber ich könnte mich irren.
Gibt es Unterschiede in der Gestaltung von Python und Javascript, die sich auf die Leistung in Browsern auswirken (würden)?
Da es derzeit keine clientseitige Python-Implementierung gibt, kommt meine Frage von der Aussage, die jemand gemacht hat. Vielleicht hat es etwas mit den Sprachen selbst zu tun (obwohl ich das nicht glaube).
javascript
python
browser
client-side
Profpatsch
quelle
quelle
would
?Antworten:
Zunächst müssen wir klar zwischen Sprachen und Implementierungen unterscheiden . Eine Sprache ist eine abstrakte Sache, die Implementierung ist eine konkrete Sache, deren Leistung gemessen werden kann. Zum Beispiel wurde Lisp einmal als viel zu ineffizient für den praktischen Gebrauch angesehen, aber die Compiler entwickelten sich weiter und schließlich wurde dedizierte Hardware dafür entwickelt. Zu einem Zeitpunkt in den 1980er Jahren war es die Entwicklungsplattform der Wahl für die Entwicklung von Hochleistungsarbeitsplätzen.
Die einfachste Antwort ist jedoch, dass eine schnelle JavaScript-Implementierung wie Googles V8 die Standardimplementierung von Python (CPython) aus dem Ruder läuft . V8 ist eine hochoptimierte virtuelle Maschine mit einem JITer, der erstaunlich schnell ist, während CPython im Vergleich dazu eine relativ einfache VM ist. Es gibt eine Implementierung von Python mit einer JIT, die aber immer noch 5-6x schneller ist.
Vor fünf Jahren wäre es eine andere Geschichte gewesen. Browser hatten vereinfachte Javascript-Implementierungen, da die Geschwindigkeit kein Problem darstellte, da niemand 'echte' Software damit erstellte und Python gleich wäre, wenn nicht schneller.
quelle
In den älteren Zeiten der Bahn, wenn Java - Applets , wo die
Haupteinzige Form der Client - Seite interaktive Inhalte Menschen erkannt , dass es benötigte eine Art und Weise zu erhalten Formulare auf einer Webseite sein , um mit dem Applets auf der Webseite zu interagieren.Daraus wurde eine Skriptsprache mit dem Namen ... Javascript erstellt, um das Java-Applet mit der Webseite zu verknüpfen.
Man kann die Spuren dieses Erbes mit SO-Fragen wie [ 1 ], [ 2 ], [ 3 ] und den beiden offiziellen Dokumenten sehen: Aufrufen von JavaScript-Code aus einem Applet und Aufrufen von Applet-Methoden aus JavaScript-Code
Mit einer solchen Sprache zur Verfügung die Browser der Zeit (Netscape die vorherrschende ist) gemacht Javascript verfügbar als Wettbewerbsvorteil (Javascript entwickelt bei Netscape - Netscape war der erste Server - Seite Javascript mit seinem Server zurück in '94 - fast zwei Jahrzehnte , bevor der Knoten .js). Andere Browser folgten. Die Leute schrieben Seiten, die Javascript verwendeten. Andere Versuche, clientseitig Skripte zu erstellen, würden völlig inkompatible Seiten zwischen Dingen bedeuten, die funktionieren, und Dingen, die nicht funktionieren - oder die Vervielfältigung von Code (hier ist der Block {Sprache hier einfügen}, der dies für Nicht-Javascript tut Browser und hier ist der Javascript-Block für alle anderen).
Da Netscape eine Zeit lang der dominierende Browser war, setzte sich Javascript durch. Während das Erbe von Netscape in den Fußnoten der Quelldateien von Mozilla verloren geht, lebt Javascript weiter und nichts war in der Lage, seinen Platz zu überschreiten.
Das Problem bleibt für alle anderen Client-Folien-Skriptsprachen bestehen. Javascript wird in jedem Browser unterstützt. Wenn man einen Browser machen würde, der Python (zum Beispiel) anstelle von Javascript unterstützt, wäre es nicht möglich, die überwiegende Mehrheit der Websites zu verwenden. Darüber hinaus möchten Webdesigner nicht zwei Sätze von Seiten mit unterschiedlichen Skriptsprachen für dieselbe Seite erstellen, es sei denn, dieser Browser konnte einen erheblichen Anteil des Browserverkehrs abrufen.
Man könnte versuchen, ein Python-Skript-Plugin für einen Browser zu erstellen, der ein Python-Skript auf der Seite aktiviert hat ... ähnlich wie vrml heute funktioniert. Aber es sei denn, Sie haben von einer Webseite gehört und gesehen, die vrml verwendet, findet eine genauso wahrscheinlich Verwendung für eine andere Webseite für eine andere Skriptsprache.
quelle
Ich glaube nicht, dass Python zu langsam wäre. Es gibt nichts an der Sprache, was verhindert, dass sie schnell genug ausgeführt wird, um mindestens JavaScript zu entsprechen. Es kann mit JavaScript kompiliert werden. Sie können also, wenn nichts anderes angegeben ist, einen Compiler in den Browser aufnehmen und die Ladezeiten von Seiten möglicherweise erhöhen.
UPDATE: In den Kommentaren unten wird erläutert, warum das Kompilieren von Python in JS erheblich teurer ist als hier angenommen.
Das Problem besteht darin, die Browser-Hersteller und W3C zu überzeugen, zuerst Python anstelle von Ruby oder einer anderen netten Skriptsprache auszuwählen, dann eine standardisierte Teilmenge zu definieren, da sie keine Systemaufrufe usw. zulassen und diese dann währenddessen gut implementieren können unterstützt immer noch JavaScript. Das wird nicht passieren, aber ich bezweifle, dass sich die Geschwindigkeit als ernstes Problem herausstellen würde.
quelle
a = something(); frobincate(a); return quux
undif condition: react()
sind jeweils einzelne Zeilen. Und n Einrückungsstufen benötigen nur n Leerzeichen, nicht n * 4 Leerzeichen.Ich denke, Python hat eine eigene virtuelle Maschine. Ich habe nicht viel Erfahrung mit Python, aber ich sehe keinen Grund, warum es nicht so gut funktioniert wie eine nicht optimierte JavaScript-Engine.
Einige zufällige Gedanken:
(1) Möglicherweise können Sie Python mithilfe von Jython lokal über ein Java-Applet ausführen. Der schwierige Teil, den ich hier sehe, ist, dass Applets sehr restriktiv sind, so dass Sie möglicherweise Jython so ändern müssen, dass es den Zugriffsbeschränkungen entspricht. Wenn beispielsweise in eine Protokolldatei geschrieben wird, müssen Sie möglicherweise den Protokollierungscode entfernen. Ein Applet muss nicht sichtbar sein.
(2) Jemand könnte einen Python-zu-JavaScript "Compiler" / Konverter erstellen. Das wäre viel Arbeit.
quelle
Someone could build a Python-to-JavaScript "compiler"/converter
Nun, jemand hat es bereits getan .Brython
funktioniert interessanterweise schnell, zumindest bei eher isolierten Teilen auf Seiten (geringe Interaktion mit demDOM tree
).Dies hängt von der Implementierung der Sprache ab und nicht unbedingt von der Sprache selbst. Die meisten JavaScript-Interpreter sind viel schneller als fast alle Implementierungen von Python.
Dies bedeutet nicht, dass die Python-Sprache nicht mit annähernd der gleichen Geschwindigkeit wie JavaScript verwendet werden kann. Opal implementiert fast die gesamte Ruby-Sprache und die Standardbibliothek im Browser, indem Ruby-Code in JavaScript-Code kompiliert wird, der in Closures eingeschlossen ist. Abgesehen von dem Aufwand für das Einbeziehen der Opal-Bibliothek ist ihre Geschwindigkeit der von direktem JavaScript weitaus näher als die anderer mir bekannter Ruby-Interpreter.
Ich weiß nicht, ob es ein Python-Äquivalent zu Opal gibt, aber ein solches Projekt würde wahrscheinlich bedeuten, dass die Antwort auf Ihre Frage "nein" lautet. Angesichts der zunehmenden Verwendung von JavaScript als "Assemblersprache für das Web" würde es mich nicht überraschen, wenn es immer mehr als Plattform für andere Sprachen verwendet wird, insbesondere wenn die mobile Rechenleistung zunimmt und der Aufwand für eine Sprache zunimmt in JavaScript implementiert wird zunehmend nachlässig.
BEARBEITEN: Hier ist eine Liste von Python-Implementierungen für den Browser, die mit JavaScript kompiliert / ausgeführt werden.
https://github.com/jashkenas/coffeescript/wiki/list-of-languages-that-compile-to-js#python
Und wenn Sie interessiert sind, können Sie sich Opal ansehen, was mir sehr gut gefällt.
http://opalrb.org/
Da ich bezweifle, dass Browser jemals separate Interpreter unterstützen werden, sind solche Compiler wahrscheinlich der Weg der Zukunft, wenn es darum geht, andere Sprachen als JavaScript zu verwenden. Selbst jetzt werden Sie in den meisten Bereichen eine vergleichbare Leistung erzielen. Dies ist jedoch meine Meinung, denken Sie daran.
quelle
Selbst als Sie diese Frage stellten, gab es bereits eine Reihe von Python-Implementierungen in Javascript, die heute auf Webseiten verwendet werden können.
Schauen Sie sich für den Anfang http://www.skulpt.org/ oder http://www.brython.info/ an.
Die Leistung scheint nicht schlecht zu sein, aber Sie sollten sie selbst testen und herausfinden.
quelle
Python ist eine "Konsolensprache", die auf dem Server ausgeführt wird
Javascript ist eine "Browser" -Sprache, die auf dem Client ausgeführt wird
Als solche konkurrieren sie nicht direkt
... natürlich gibt es node.js und wahrscheinlich Python-Browser-Plugins, aber dann ist es eher eine Frage der Leistung einer bestimmten Implementierung.
Darüber hinaus funktioniert Python für die meisten Anwendungen einwandfrei, es sei denn, Sie müssen umfangreiche Berechnungen durchführen und die CPU-Zyklen herausdrücken.
Zum Schluss haben Python und Javascript viele Gemeinsamkeiten. Aufgrund ihrer Dynamik müssen beide zur Laufzeit interpretiert werden und können nicht so stark kompiliert werden wie statische typisierte Sprachen. Als solches gehe ich davon aus, dass ihre erreichbare Leistung ähnlich wäre.
quelle
jsc
Ermöglicht das Arbeiten mit Javascript als Konsole, ähnlich wie bei der Eingabepython
an einer Konsole.