Pythonはブラウザでクライアント側で使用するには遅すぎますか?


17

Pythonはブラウザーで使用するには遅すぎるという声明を聞きました。

Javascriptはこの点で優れていると思うのは、グーグルのような企業が生き残るためにそれを必要としているので、それを速く必要としている(そして速くした)からです。

PythonとJavascriptの設計方法に違いがあり、それらがブラウザでどのように機能するか(影響するか)に影響はありますか?

今のところクライアント側のPython実装はないので、私の質問は誰かの声明から来ているので、言語自体と関係があるのか​​もしれません(信じられませんが)。


2
ブラウザーのPython?それはいつ起こったのですか?
ヤンニス

6
しませんでした。注意してくださいwould
-Profpatsch

16
それが起こらなかったら、質問が何であるかわかりません。パフォーマンスについて話すときは、言語についてではなく、言語の実装について話します(Javascriptの場合と同様に、Pythonについてもいくつかの実装が存在します)。クライアント側のPython実装がない場合、何について話す必要がありますか?
ヤンニス

1
理論科学!:D私の質問は誰かの声明から来ているので、多分それは言語自体と関係があるのか​​もしれません(私はそれを信じていませんが)。
Profpatsch

1
COMインターフェイスを介したInternet ExplorerのPython統合実装があり、DOMをスクリプト化するVBScriptオプションも有効になりました。MSは、バージョン5または6でCOM統合を使用するオプションを中止したと思いますが、思い出せません。
マーティンピーターズ

回答:


23

まず、言語実装を明確に区別する必要があります。言語は抽象的なものであり、実装はパフォーマンスを測定できる具体的なものです。たとえば、かつてLispは実際にはあまりにも効率が悪いと考えられていましたが、コンパイラは成熟し続け、最終的には専用のハードウェアが開発されました。1980年代のある時点では、高性能ワークステーション開発に最適な開発プラットフォームでした。

そうは言っても、最も簡単な答えは、GoogleのV8のような高速なJavascript実装が、Pythonの標準実装(CPython)を水面から吹き飛ばすことです。V8は高度に最適化された仮想マシンであり、JITerは驚くほど高速ですが、CPythonは比較的単純なVMです。JITを使用したPythonの実装がありますが、それでも約5〜6倍高速です。

5年前は別の話でした。ブラウザーは単純なJavascript実装を備えていました。これは、「実際の」ソフトウェアをビルドする人はいなかったため、速度は問題にならなかったからです。


これはこれまでで最も洞察に満ちた答えです。したがって、潜在的なものではなく、時間とお金です。
-Profpatsch

7
「5年前は別の話だったでしょう」...そして5年後、それはまた違うかもしれません。
ブライアンオークリー

1
>>言語は抽象的なものであり、実装はパフォーマンスを測定できる具体的なものです。<<はい、プログラミング言語の実装は具体的なものです。いいえ、プログラミング言語の実装には、測定可能なプロパティのパフォーマンスはありません。パフォーマンスは、特定のコンテキストで言語実装を使用する特定のプログラムのプロパティです。
igouy

2
@igouyだから、2つの機能的に同一のプログラム(Cで1つとPythonで1つ)を作成する場合、パフォーマンスの違いはアプリケーションのプロパティであり、言語の実装ではないと考えますか?
ConditionRacer

1
@ConditionRacer:同じプログラムを書く方法はたくさんあります。そのため、プログラムのpythonバージョンがCバージョンと異なるパフォーマンス特性を持っていたとしても、どのPythonバージョンもCバージョンと同等ではないことを証明しません。asm.jsのようなものをすべての言語で見ることができます。巨大な配列を使用してプログラムのすべての状態を保存でき、言語の基本操作の簡単に最適化できる小さなサブセットを使用できます。(彼らは「どんな言語でもCを書くことができる」と言うように。)
マンカルセ14

5

Webの時代、クライアント側のインタラクティブコンテンツの主な唯一の形式であるJavaアプレットは、Webページ上のアプレットと対話できるようにWebページ上のフォームを取得する方法が必要であることに気付きました。

これから、javaアプレットをWebページにリンクするスクリプト言語が、javascriptという名前で作成されました。

[ 1 ]、[ 2 ]、[ 3 ] などのSOの質問と、アプレットからのJavaScriptコードの呼び出しJavaScriptコードからのアプレットメソッドの呼び出しの 2つの公式ドキュメントで、この遺産の痕跡を見ることができます。

そのような言語が利用可能になったため(当時のブラウザはNetscapeが主流でした)、javascriptを競争上の優位性として利用できるようになりました(Netscapeで設計されたjavascript -Netscapeは、94年に戻った最初のサーバー側javascriptでした-ノードの約20年前.js)。他のブラウザも同様です。人々はjavascriptを使用するページを書いていましたが、クライアントサイドスクリプティングの他の試みは、機能するものとそうでないものの間で完全に互換性のないページを意味します-またはコードの複製ブラウザとここに他の皆のためのjavascriptブロックがあります)。

Netscapeがしばらくの間支配的なブラウザであったため、javascriptが定着しました。Netscapeの遺産は、Mozillaのソースファイルの脚注には失われていますが、javascriptは存続しており、Netscapeの場所を捨てることはできませんでした。

問題は、他のクライアントスライドスクリプト言語については残っています。Javascriptはすべてのブラウザーでサポートされています。javascriptではなくpython(たとえば)をサポートするブラウザを作成する場合、ほとんどのWebサイトを使用できません。さらに、そのブラウザーがブラウザートラフィックのかなりの部分を獲得できなかった場合、Webデザイナーは同じページに対して異なるスクリプト言語を使用して2セットのページを作成することを望みません。

ページでpythonスクリプトを有効にしたブラウザ用のpythonスクリプトプラグインを作成しようとするかもしれません。ただし、vrmlを使用するWebページを聞いて見たことがなければ、別のスクリプト言語の別のWebページで使用できる可能性があります。


1
これは「どのように通過したのか...」の非常に優れた概要であり、正解としてマークしたい限り、「今日のクライアントサイド言語はなぜJavascriptですか?」ではなく「 Pythonがクライアント側で使用するには遅すぎる設計上の問題はありますか?」
Profpatsch

VRML ...すごいよ!
FrustratedWithFormsDesigner

1
@Profpatschには、クライアントサイド言語として不適切なjavascriptの技術的な設計上の問題はありません-それを使用しないものと、それが何らかの重要な利点を提供しない限り(Javaアプレットとの対話性を含む可能性が高い)、何もありません。問題は技術的なものではなく、「なぜJavaScript」の歴史を理解しない限り、「なぜPythonではないのか」と答えることはできません。

2
@MichaelT:「クライアント側の言語として不適切なjavascriptの技術的な設計上の問題はありません」と書きました。PythonではなくJSですか?
カールスミス

@CarlSmithああ、はい。私の間違い...そして、特定の時間を超えてコメントを編集することはできません。訂正していただきありがとうございます。

4

Pythonが遅すぎるとは思わない。少なくともJavaScriptに匹敵するほど高速に動作することを妨げる言語については何もありません。JavaScriptにコンパイルできるので、ブラウザにコンパイラーを追加するだけで、ページの読み込み時間が長くなる可能性があります。

更新:PythonをJSにコンパイルするのに、ここで示されているよりもかなりコストがかかる理由については、以下のコメントを参照してください。

問題は、ブラウザーベンダーとW3Cが最初にPythonを選択し、Rubyまたはその他の優れたスクリプト言語を選択し、標準化されたサブセットを定義するように説得することです。 JavaScriptをまだサポートしています。それは起こらないだろうが、もしそうなら、速度が深刻な問題になるとは思えない。


7
最初のポイントは続きません。すべては(マシン・コードを含む)のほとんどすべてにコンパイルすることができますが、それはいくつかの言語Lで書かれたプログラムを意味し、C言語Cで書かれた同等のプログラムとして速いようであるいくつかの言語にコンパイルされていません

1
さて、CoffeeScriptは基本的にJavaScriptと同じコアコンセプトの異なる構文であり、Cは基本的に移植可能なアセンブリ言語です。一方、PythonとJavascriptは大きく異なります。Pythonを正しく実装するには、クラスモデル、演算子のオーバーロード、メタクラスなどをサポートする必要があります(数十億のなかで)。そのほとんどはJavaScriptに簡単かつ効率的にマッピングされません。それらのいずれかをCまたはマシンコードにコンパイルする際の同じ問題。専門のJITが唯一の希望かもしれませんが、JSを対象とするJITコンパイラはまだ実用的であることが証明されていません。

3
1つの問題は、JSのようにPythonを圧縮できないという事実です。これらのスペースと改行をすべて削除すると、スコープが設定されます。したがって、Pythonの重要なチャンクでは、ロード時間が長くなります。
TMN

1
@TMNの興味深い点は、Pythonの表現力がそれを緩和するのに大いに役立つことを願っています(そして、そう、それは文字ではなく行を数えますが、それでもPythonはかなり表現力のある言語です)。
ダニエルB

2
@TMNダニエルBが言ったことと、gzipで違いを減らすべきです。ああ、Pythonはこれらの新しい行とスペースのほとんどを必要としません。多くの(すべてではないが)のラインは例えば、Pythonでうまく一緒に連結することができ、a = something(); frobincate(a); return quuxかつif condition: react()各単一ラインです。また、n個のインデントレベルでは、n * 4個のスペースではなく、n個のスペースのみが必要です。

2

Pythonには独自の仮想マシンがあると思います。Pythonの経験はあまりありませんが、最適化されていないJavaScriptエンジンほどパフォーマンスが良くない理由はわかりません。

いくつかのランダムな考え:

(1)Jythonを使用して、Javaアプレットを介してPythonをローカルで実行できます。ここで難しいのは、アプレットが非常に制限されているため、アクセス制限内に収まるようにJythonを変更する必要がある場合があることです。たとえば、ログファイルに書き込む場合は、ログコードを削除する必要があります。アプレットを目立つように表示する必要はありません。

(2)誰かがPythonからJavaScriptへの「コンパイラー」/コンバーターを作成できます。これは大変な作業です。


5
Someone could build a Python-to-JavaScript "compiler"/converterさて、誰かがすでにやった
ヤニス


私はこれを自分で行う必要はありませんでしたが、Jythonを使用してJavaアプレットを作成した人々を知っています。ただし、ブラウザのJavascriptをPythonに置き換えるのと同じことではありません
マーティンピーターズ

Brython少なくとも、ページ上のかなり孤立した部分では、興味深いことに高速に動作します(との相互作用が少ないDOM tree)。
-Profpatsch

@Profpatsch前回見たときの状態から、Python言語の大部分を実装することすらありません。便利なことに、実装されていない機能には、JavaScriptの上にハードに実装される機能があります。PyPyの著者の1人を言い換えると、Pythonの重要なサブセットを簡単に高速化するのは簡単です。完全なPythonが難しくなります。

1

それは言語の実装に依存し、必ずしも言語自体に依存するわけではありません。ほとんどのJavaScriptインタープリターは、Pythonのほぼすべての実装よりもはるかに高速です。

これは、Python言語をJavaScriptとほぼ同じ速度で使用できないという意味ではありません。Opalは、RubyコードをクロージャーでラップされたJavaScriptコードにコンパイルすることにより、ブラウザーにほぼ完全なRuby言語と標準ライブラリを実装します。Opalライブラリーを含めるオーバーヘッドを別にすれば、その速度は、私が知っている他のRubyインタープリターよりも、まっすぐなJavaScriptの速度にはるかに近いです。

Opalに相当するPythonが存在するかどうかはわかりませんが、そのようなプロジェクトは、おそらくあなたの質問に対する答えが「いいえ」であることを意味します。「Webのアセンブリ言語」としてのJavaScriptの使用の増加に伴い、特にモバイルコンピューティングの能力が向上し、言語を持つオーバーヘッドとして、他の言語のプラットフォームとしてますます使用されるようになっても驚かないJavaScriptでの実装はますます軽視されています。

編集:JavaScriptでコンパイル/実行するブラウザーのPython実装のリストを以下に示します。

https://github.com/jashkenas/coffeescript/wiki/list-of-languages-that-c​​ompile-to-js#python

興味がある場合は、Opalをチェックできます。

http://opalrb.org/

ブラウザーが個別のインタープリターをサポートするようになることは疑わしいので、このようなコンパイラーは、JavaScript以外の言語を使用するという点ではおそらく将来の方法です。今でも、ほとんどの分野で同等のパフォーマンスが得られます。しかし、これは私の意見ですので、そのことを覚えておいてください。



-4

Pythonはサーバー上で実行される「コンソール」言語です

Javascriptは「ブラウザ」言語であり、クライアントで実行されます

そのため、彼らは直接競争しません

...もちろん、node.jsとおそらくpythonブラウザーのプラグインがありますが、特定の実装に関するパフォーマンスについての質問です。

さらに、大規模な計算を行い、CPUサイクルを絞り出す必要がある場合を除き、ほとんどのアプリケーションではpythonで問題なく動作します。

最後の注意として、pythonとjavascriptは多くの類似点を共有しています。動的な性質のため、両方を実行時に解釈する必要があり、静的型付き言語ほど強力にコンパイルすることはできません。そのため、達成可能なパフォーマンスは似ていると思います。


2
サーバー側のjavascriptは'94年頃でした。 jscコンソールでjavascriptを操作できますpython。コンソールで入力した場合とほぼ同じです。

@MichaelT:OK、私はそれに応じて応答を編集しました
-dagnelies

2
また、Pythonでデスクトップアプリを作成することもできます。...あなたが行っている区別の本当の理由はわかりません。
クリストラバーズ

さらに、3DモデリングツールBlenderは、UIからメッシュ生成まですべてにPythonを使用します。性能的に競争力がない場合、それは何ですか?
アンドリューグレイ

@Chris:違いは、javascriptは主にブラウザーテクノロジーであり、pythonは主にデスクトップ/コンソールテクノロジーであることです。私のポイントは、両方を比較することはまったく異なる目的に役立つため、ほとんど意味がないということでした。
-dagnelies
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.