web-dev-qa-db-ja.com

HTML / JavaScript / CSSがコンパイルされた言語ではないのはなぜですか?

HTML/JavaScript/CSSがコンパイルされた言語にならないのはなぜですか(単一のコンパイルされた言語にマージされることもあります)?ブラウザーが「ブラウザー仮想マシン」を実行していて、html/javascript/cssソースが「ブラウザーバイトコード」にコンパイルされる場合はどうなりますか。それは開発者とユーザーに大いに役立ちませんか?

私はいくつかの課題を見ることができます:

  1. 何十億もの既存のページをどうするか?このコンパイルをオプションにして、必要に応じてプレーンな古いhtmlを使用できるようにします。コンパイルされたページをブラウザにフィードする場合は、たとえば.chtmlを使用します。

  2. 検索プロバイダーはどのようにページをインデックス化しますか?バイトコードを正確な元のソースに逆コンパイルする逆コンパイラを作成します(たとえば、フラッシュを逆コンパイルできるようにします)。または、検索プロバイダーは同じ仮想マシンを使用して、そこから必要なデータを取得できます。

  3. すべてのブラウザと互換性を持たせる方法は?この仮想マシンを開発するために1人の集中開発者(w3cとしましょう)がいて、各ブラウザーがそれを組み込みます。

しかし、利益についてはどうですか?

  1. 速度。
  2. サイズ。
  3. 「ゆるい」および「半分正しい」htmlはもうありません。正しいか、コンパイルされません。
  4. すべての(サポートされている)ブラウザーで同じに見えます。

バイトコードでない場合、少なくとも何らかのネイティブ圧縮が行われている場合、htmlはおそらくデータを保存する最も効率的な方法ではありません。 gzipがあることは知っていますが、サーバーで毎回ページを圧縮し、一度圧縮してブラウザーにフィードできるのに、ブラウザーで解凍するのはなぜですか?

それで、私たちがこの道を進むのを止めるのは何ですか(まあ、それをすべて実現するための多大な努力のほかに)?

40
serg

ああ、でもJavascript ISコンパイルされた言語になります。Firefox3.5を TraceMonkey でチェックしてください。um-know-whoのブラウザと比べるとめちゃくちゃ速いです。JSは本当ですCになることは決してありませんが、Cよりもはるかに動的な言語であり、多くの点でCをより表現力豊かで強力なものにします。

HTMLに関する限り、HTMLの妥当性の欠如が速度を大きく損なうとは思いません。私は、視覚的表現を組み合わせてDOMを操作するエンジンは、もっと良くなる必要があると思います(ええと、IE、私はあなたの一般的な方向を探しています...)。 CSSコンプライアンスはより良くなる必要があり、CSS自体はより強力になる必要があります。 (CSS 3人でバスに乗ろう!)

しかし、FirefoxとChrome=の速度は、主流のアプリケーション開発に実際に使用し始めるほどまでは、速度が向上すると思います。おかしいです。Adobeが販売しているようです。動的WebコンテンツのプラットフォームとしてのFlash、MSFTは動的Webコンテンツ用のSilverlightを販売しており、GoogleはHTMLとJavascriptを改善して動的Webコンテンツを表示することを望んでいます。これまでのところ、Googleはかなりうまく機能しています。

19
Dave Markle

HTMLとCSSはコードではないため、コンパイルできません。 Google ChromeのV8エンジンは、実際にはJSをバイトコードに変換します。他のレンダリングエンジンも同様です。

http://code.google.com/apis/v8/design.html

私たちは最近、minifyを使用して複数のJSとCSSをそれぞれ1つのファイルに圧縮するために作成したphpテンプレートシステムを作り直しました。 Minifyはgzipとキャッシュも行うので、ウェブサイトの高速化には本当に素晴らしいです。

http://code.google.com/p/minify/

つまり、HTMLやCSSのような非コードをコンパイルすることはできません。 JSはコンパイル可能であり、コンパイルされ始めていますが、すべてはブラウザの動作に依存します。

ブラウザは、Web標準のサポートに関しては、ボールの上にある必要があります。これを行うブラウザーが多いほど、Web開発者の頭痛の種は少なくなります。 YouTubeのIE6に対するサポートの公開が非常に落ちたことにとても満足しています。 Webを前進させるには、このようなアクションがさらに必要です。

4
Simon

JavaScriptに適用すると、アイデアが有効になります。他の人が指摘しているように、ある程度の数のベンダーが、今でもJSにそれらの原則を適用しようとしています。この分野でのもう1つの大きなステップは、おそらくChrome Googleが発表したOSです。しかし、(X)HTMLとCSSに関しては、あなたのアイデアは要点を逃しているかもしれません。

ワールドワイドウェブは、バグの多い一貫性のないアプリケーションプラットフォームではなく、相互接続されたドキュメントの膨大かつ前例のないコレクションです。ウェブの力は、多くの場合JavaScriptを介して提供される、しばしば固定された(そして壊れやすい)ビジュアルレイアウトとますます複雑になるページ内機能からデータを抽象化することにあります。これらのページを(X)HTMLでエンコードすることは、ブラウザーの観点からも、ページの作成に必要な技術的知識の観点からも、可能な限り幅広いユーザーがページにアクセスできるようにするのに理想的です。

アプリケーションプラットフォームとしてWebがますます使用されています。これは、このテクノロジの強力でエキサイティングな使用法です。しかし、これらのAjax駆動の「Web 2.0」アプリケーションは、拡張機能を備えた単なるドキュメントであるという事実を見失うことはありません。コンパイルはドキュメントには意味がなく、圧縮はすでに行われています(gzipなどを介して)。

より実用的なメモとして、W3Cは氷河のペースで動き、ブラウザベンダーは、未完成の仕様での実験的な機能のサポートと、テーブルに存在し、長年にわたって一般的に使用されている他の仕様をサポートするための甘い時間を交互に利用しています。全体のプロセスは猫を放牧するようなものです。彼らがあなたが提案している種類の急進的な変更をすぐに行うために彼らの息を止めません。

4
Josh Thaxton

V8 JavaScriptエンジン(これもGoogle Chromeに埋め込まれていますが、オープンソースで自由にライセンスされているので、次のブラウザーで使用しても大丈夫です!)はJavascriptをネイティブマシンコードにコンパイルします- -もちろん、それは「ジャストインタイム」(ほとんどの最新のコンパイラ-Java、C#など)とは異なり、「前倒し」ではありません(Fortranが1954年にコンピュータが弱すぎてコンパイルを処理できなかったときのように)実行中)。最新のFirefoxやSafariにあるような他の優れたJSエンジンが同じことをしなかったとしたら、私は驚くでしょう。

「コンパイルされた言語としてのJavaScript」を推奨しているようではありません(優れたJSエンジンを使用している場合は、明らかにISコンパイル済み)ため) "そのためのコンパイル(ほとんどの現代の言語が本質的に事前コンパイルを放棄している場合だけです。)コンパイル可能なコードではなくマシンコードをプッシュすることは、恐ろしい考えのように聞こえます。サイズが大きく、CPUをサポートするのが難しい、それを適切にサンドボックス化することによるセキュリティの悪夢など)。

とは言っても、マシンコードをクライアントにプッシュすることに本当に熱心である場合は、試してみてください nativeclient (クライアントがx86マシンである限り-地球上のすべてのスマートフォン、多くのネットブック、良い古いマックなど)-少なくとも、セキュリティの悪夢に対する修正を約束します。 nativeclientに満足している場合、ジャストインタイムコンパイラを前倒しに変換することは、はるかに簡単な技術的課題です(もちろん、他の言語ではなくソースにJavascriptを使い続けたい場合は、 )。

2
Alex Martelli

この問題に関する以前の議論については here を参照してください

与えられた理由のすべてが必ずしも有効であるとは限りませんが、1つの重要な理由は、Googleでない限り、サーバー側のCPUサイクルはクライアント側のサイクルよりもはるかに価値があるため、クライアントにコンパイル/最適化させる方が簡単です多くの場合、サーバーではなく動的に生成されるHTML/JavaScriptです。

ケン

1
Ken Smith

速度。

HTMLの解析にはかなりの時間がかかると想定しています。ただし、その時間は、他の何かに必要な時間と比較して重要ではない場合があります。エンドユーザーのウィンドウにテキストをレイアウトするのに必要な時間。

「ゆるい」および「半分正しい」htmlはもうありません。正しいか、コンパイルされません。

[X] HTMLを使用して、すでにそれを取得しています。

すべての(サポートされている)ブラウザーで同じように見えます。

ブラウザーは1つだけにするか、すべてのブラウザーが同じようにサポートすると言っているようです。

単一のボディ(w3c)が何かを実装し、それを標準として宣言することによって、インターネット標準は起こりません。代わりに、インターネット標準は、複数の独立した団体が複数の実装を作成することによって発生します。結果は次のとおりです。

  • 一部の人々はまだ標準ではないものを開発しました(つまり、彼らは標準よりも進んでいます)
  • 一部の人々はまだ標準的なものを開発していません(つまり、標準に遅れています)。
1
ChrisW

あなたの考えは正しいと思いますが、それでも標準を強制する方法はありません。したがって、サポートされていない機能があった場合、ページ全体が何も表示しない可能性が十分にあります。現在の設定では、重要な情報を渡すことができます。

0
Alex S

Google V8 。これは、多くの新世代のJavaScriptエンジンの1つであり、.NETがc#をその場で「コンパイル」するのと同様に、JavaScriptを疑似コードに「コンパイル」します。ここには魔法のようなものはありません。特にそれの多くを期待してください。ウェブアプリが重くなり、要求が厳しくなるにつれて

0
Scott Evernden

HTML

HTMLはほとんどXMLです。 DTDはさまざまなバージョンに存在し、開発者はいつでもそれをチェックできます。

CSS

CSSはプログラミング言語ではありませんが、「コンパイルされた」CSSは、コンパイルによって圧縮されるため、動作する可能性があることに同意します。ただし、CSSのサポートと、CSSが必要とする重要なハックの数があれば、エラーなしにコンパイルすることはできません。

JS

他の人が述べたように、JS ISは、ブラウザがあなたのためではなくあなたのためにそれをコンパイルすることを除いて、コンパイルされた言語になります。

0
Darko Z