J'ai entendu la déclaration que Python serait trop lent pour être utile aux navigateurs.
Je pense que Javascript n'est supérieur que dans cet aspect, car des entreprises comme Google en ont besoin rapidement (et l'ont fait rapidement) parce qu'elles en ont besoin pour survivre, mais je peux me tromper.
Existe-t-il des différences dans la conception de Python et Javascript qui ont un impact sur leur performance (dans le cas) dans les navigateurs?
Comme il n'y a pour l'instant pas d'implémentation Python côté client, ma question vient de la déclaration de quelqu'un, alors peut-être que cela a quelque chose à voir avec les langages eux-mêmes (bien que je ne le crois pas).
javascript
python
browser
client-side
Profpatsch
la source
la source
would
?Réponses:
Pour commencer, nous devons faire une distinction claire entre les langages et les implémentations . Un langage est une chose abstraite, l'implémentation est une chose concrète qui peut avoir des performances mesurées. Par exemple, Lisp était autrefois considéré comme beaucoup trop inefficace pour une utilisation pratique, mais les compilateurs ont continué à mûrir et, finalement, du matériel dédié a été développé pour lui; à un moment donné dans les années 80, elle était la plate-forme de développement de choix pour le développement de postes de travail hautes performances.
Cela dit, la réponse la plus simple est qu'une implémentation Javascript rapide comme le V8 de Google fait sauter l'implémentation standard de Python (CPython) hors de l'eau . V8 est une machine virtuelle hautement optimisée avec un JITer incroyablement rapide tandis que CPython est une machine virtuelle assez simple en comparaison. Il existe une implémentation de Python avec un JIT mais qui n'est toujours que 5 à 6 fois plus rapide.
Il y a cinq ans, cela aurait été une autre histoire. Les navigateurs avaient des implémentations Javascript simplistes car la vitesse n'était pas un problème car personne n'avait construit de «vrais» logiciels avec et Python aurait été égal, sinon plus rapide.
la source
Dans les temps anciens du Web, lorsque les applets java, où la seule forme
principalede contenu interactif côté client, les gens se rendaient compte qu'il devait y avoir un moyen d'obtenir des formulaires sur une page Web pour pouvoir interagir avec les applets sur la page Web.De là, un langage de script pour lier l'applet Java à la page Web a été créé avec le nom ... javascript.
On peut voir les vestiges de cet héritage avec des questions SO telles que [ 1 ], [ 2 ], [ 3 ] - et les deux documents officiels: invocation de code JavaScript à partir d'une applet et invocation de méthodes d'applet à partir de code JavaScript
Avec un tel langage disponible, les navigateurs de l'époque (Netscape étant le prédominant) ont rendu le javascript disponible comme avantage concurrentiel (javascript conçu chez Netscape - Netscape a été le premier javascript côté serveur avec son serveur en 1994 - près de deux décennies avant le nœud .js). D'autres navigateurs ont emboîté le pas. Les gens écrivaient des pages qui utilisaient javascript, d'autres tentatives de script côté client signifieraient des pages complètement incompatibles entre les choses qui fonctionnent et celles qui ne fonctionnent pas - ou la duplication de code (voici le bloc {insérer la langue ici} qui fait cela pour non-javascript navigateurs et voici le bloc javascript pour tout le monde).
Comme Netscape était le navigateur dominant pendant une période, le javascript s'est installé. Alors que l'héritage de Netscape est perdu dans les notes de bas de page des fichiers source de Mozilla, le javascript continue de vivre et rien n'a pu renverser sa place.
Le problème persiste pour tout autre langage de script de diapositives client. Javascript est pris en charge sur tous les navigateurs. Si l'on devait créer un navigateur prenant en charge python (par exemple) plutôt que javascript, il ne serait pas en mesure d'utiliser la grande majorité des sites Web. De plus, à moins que ce navigateur n'ait pu obtenir une part importante du trafic du navigateur, les concepteurs Web ne veulent pas créer deux ensembles de pages avec des langages de script différents pour la même page.
On pourrait essayer de créer un plugin de script python pour un navigateur qui a activé un script python sur la page ... semblable au fonctionnement de vrml aujourd'hui. Mais à moins que vous n'ayez entendu et vu une page Web qui utilise vrml, il est tout aussi probable que vous trouviez une autre page Web pour un autre langage de script.
la source
Je ne pense pas que Python serait trop lent du tout. Il n'y a rien dans le langage qui l'empêche de fonctionner assez rapidement pour correspondre au moins à JavaScript. Il peut être compilé en JavaScript, donc, si rien d'autre, vous pouvez inclure un compilateur dans le navigateur et augmenter uniquement les temps de chargement des pages.
MISE À JOUR: Veuillez voir les commentaires ci-dessous expliquant pourquoi la compilation de Python en JS serait considérablement plus coûteuse qu'impliquée ici.
Le problème essaie de convaincre les fournisseurs de navigateurs et le W3C de choisir d'abord Python, plutôt que Ruby ou tout autre langage de script agréable, puis de définir un sous-ensemble normalisé, car ils ne peuvent pas autoriser les appels système, etc., puis l'implémenter correctement, tout en supportant toujours JavaScript. Cela ne se produira pas, mais si c'était le cas, je doute que la vitesse se révèle être un problème grave.
la source
a = something(); frobincate(a); return quux
etif condition: react()
sont une seule ligne chacune. Et n niveaux d'indentation n'ont besoin que de n espaces, pas de n * 4 espaces.Je pense que Python a sa propre machine virtuelle. Je n'ai pas beaucoup d'expérience avec Python, mais je ne vois aucune raison pour laquelle il ne fonctionnerait pas aussi bien qu'un moteur JavaScript non optimisé.
Quelques pensées aléatoires:
(1) Vous pourriez probablement exécuter Python localement via une applet Java à l'aide de Jython. La partie difficile que je vois ici est que les applets sont très restrictives, vous devrez donc peut-être modifier Jython pour s'adapter aux restrictions d'accès. Par exemple, s'il écrit dans un fichier journal, vous devrez peut-être supprimer le code de journalisation. Une applet n'a pas besoin d'être visiblement visible.
(2) Quelqu'un pourrait construire un "compilateur" / convertisseur Python vers JavaScript. Ce serait beaucoup de travail.
la source
Someone could build a Python-to-JavaScript "compiler"/converter
Eh bien, quelqu'un l'a déjà fait .Brython
fonctionne très rapidement, du moins pour les parties plutôt isolées des pages (faible interaction avec leDOM tree
).Cela dépend de l'implémentation de la langue et pas nécessairement de la langue elle-même. La plupart des interprètes JavaScript sont beaucoup plus rapides que presque toutes les implémentations de Python.
Cela ne signifie pas que le langage Python ne peut pas être utilisé à presque les mêmes vitesses que JavaScript. Opal implémente presque le langage Ruby complet et la bibliothèque standard dans le navigateur en compilant le code Ruby en code JavaScript enveloppé dans des fermetures. Mis à part les frais généraux liés à l'inclusion de la bibliothèque Opal, sa vitesse est beaucoup plus proche de celle de JavaScript direct que tout autre interprète Ruby que je connaisse.
Je ne sais pas s'il existe un équivalent Python d'Opale, mais un tel projet signifierait probablement que la réponse à votre question est "non". Avec l'utilisation croissante de JavaScript en tant que «langage d'assemblage pour le Web», je ne serais pas surpris qu'il soit de plus en plus utilisé comme plate-forme pour d'autres langages, en particulier à mesure que la puissance de calcul mobile augmente et que le surcoût d'avoir un langage implémenté en JavaScript devient de plus en plus négligent.
EDIT: Voici une liste des implémentations Python pour le navigateur qui se compilent / s'exécutent sur JavaScript.
https://github.com/jashkenas/coffeescript/wiki/list-of-languages-that-compile-to-js#python
Et si vous êtes intéressé, vous pouvez consulter Opal, que j'aime beaucoup.
http://opalrb.org/
Étant donné que je doute que les navigateurs soient compatibles avec des interprètes distincts, ces compilateurs sont probablement la voie de l'avenir en termes d'utilisation de langues autres que JavaScript. Même maintenant, vous obtiendrez des performances comparables dans la plupart des domaines. C'est mon avis, cependant, gardez cela à l'esprit.
la source
Même lorsque vous avez posé cette question, il y avait déjà un certain nombre d'implémentations python disponibles en javascript qui peuvent être utilisées sur les pages Web aujourd'hui.
Jetez un œil à http://www.skulpt.org/ ou http://www.brython.info/ pour commencer.
Les performances ne semblent pas trop mauvaises, mais vous devriez les tester vous-même et le découvrir.
la source
Python est un langage "console", fonctionnant sur le serveur
Javascript est un langage "navigateur", fonctionnant sur le client
En tant que tels, ils ne concurrencent pas directement
... bien sûr, il y a node.js et probablement des plugins de navigateur python, mais alors c'est plus une question sur les performances d'une implémentation particulière.
De plus, pour la plupart des applications, python fonctionnera très bien, sauf si vous devez effectuer une sorte de calculs étendus et évincer les cycles de CPU.
Enfin, python et javascript partagent de nombreuses similitudes. En raison de leur nature dynamique, les deux doivent être interprétés au moment de l'exécution et ne peuvent pas être compilés aussi fortement que les langages typés statiques. En tant que tel, je suppose que leurs performances réalisables seraient similaires.
la source
jsc
vous permet de travailler avec javascript en tant que console, de la même manière que l'on obtiendrait s'ils tapaientpython
sur une console.