2011-12-15 7 views
5

Chrome、Firefox、Safari(WebKit)などの最新のWebブラウザのコードベースはかなり大きいです。私は特に、実装が膨大な量のコードを必要とすることを自明にしているのは不思議です。現代のWebブラウザ用のコードベースはなぜ大規模なのですか?

仮想的なブラウザが互換性の問題を避けるために、厳密なHTML5とJavaScriptのみをサポートしていた場合、コードベースはかなり小さくなりますか?

+0

+1。 – Thilo

答えて

7

、現代のブラウザが実装する必要があるもの(一部のブラウザでは、オペレーティング・システム・サービスへの外に、この作品のいくつかを押して)考えてみます。

  1. をいくつかのパーサー:XML、HTMLやJavaScript、CSS、少なくとも。
  2. 少なくとも4つの別々のレイアウトシステム(CSSボックスモデル、フレックスボックス、SVG、MathML)。
  3. 少なくとも1つのグラフィックライブラリ。クロスプラットフォームのブラウザでは、プラットフォームごとのバックエンドが必要です(IE9 +はシステムのDirect2Dライブラリを使用します; MacのSafariは私が知る限りQuartzだけを使用します)。
  4. JIT、ガベージコレクタ、標準ライブラリの一部(すべての時間が成長しています;型付き配列やその他の最近のJavaScriptのさまざまな機能を参照)を備えた高性能仮想マシン。
  5. DOMの実装には、HTML固有のインターフェイスやSVG固有のDOMインターフェイスなどが含まれます。
  6. オーディオおよびビデオ処理機能(MacではSafari、IEではこれをオペレーティングシステムにオフロード)。
  7. 少なくともJPG/GIF/PNGをサポートする画像処理機能。ここでも、一部のブラウザでは、これの一部をオペレーティングシステムにオフロードすることができる場合があります。
  8. バイトストリームをUnicode文字に変換するためのライブラリ。この場合も、これはオペレーティングシステムにオフロードされることがあります。
  9. クロスプラットフォームのブラウザの場合、プラットフォーム固有のビットを抽象化するある種の移植性レイヤー。
  10. トランザクションとプログラム可能なAPIを持つHTMLエディタ。 contenteditableだと思う。
  11. テキストエリア用のプレーンテキストエディタ。これはHTMLエディタと共有することができます。
  12. OSにオフロードされる場合とされない場合があるスペルチェッカー。
  13. HTTP、多分SPDY、おそらくFTP、そしておそらくいくつかの他のプロトコルをサポートするネットワークライブラリ。この場合も、これはOSにオフロードされる場合とされない場合があります。
  14. SSLおよびその他のさまざまな暗号化ニーズを処理するための暗号ライブラリ。この場合も、これはOSにオフロードされる場合とされない場合があります。
  15. 少なくとも1つのデータベース実装(sqliteが普及しているようです)。
  16. 実際のユーザーインターフェイスとその他のもののためのさまざまなコード。
  17. JavaScriptとDOM間の呼び出しを管理するコード、DOMが変更されたときにスタイルとレイアウトの情報を再計算するコード、JavaScriptから文字列を挿入するコードなどがあります。パーサの入力ストリームなどがあります。グルーコードの量は、相互作用するモジュールの数において一般に二次的であることに留意されたい。

私はおそらくいくつか不足していますが、それは私の頭の上から外れています。

さらに、GeckoとWebKitには、文字列や配列などのテンプレートライブラリがあります(C++標準ライブラリにはさまざまな欠点があります)。

この時点で、多くの「互換性ハッキング」は実際にはWeb標準の一部です。だからあなたはそれらを厳密に避けることはできません。あなたのシナリオでは、JavaScriptやHTMLについては話しますが、SVGやMathMLやCSSについては言及していません。あなたが実際にHTMLとJavaScriptを意味し、CSSやその他のものを意味しないのであれば、明らかにたくさんのコードを削除することができます。 HTML5のすべての機能と、HTML5のオーディオ機能とビデオ機能を組み込み、ブラウザのパフォーマンスを向上させたい場合は、それをもっと小さくすることはできません。

+0

IMHOのサイズの半分 - しかし10倍にならないかもしれません。 –

+0

2001年頃のWeb機能からCSSを差し引いて喜んでいるなら、コードの1/3程度まではほぼ確実に落ちるかもしれませんが、確かに言うのは難しいです。 –

+1

私は考えていました - 現在のWebブラウザは標準と急速な開発に集中しています。集中したチームがスリムなバージョンを作成する作業をしていたら、私は不思議を信じています。 –

1

最近のWebブラウザは複雑なアプリだと思います。主に、さまざまな種類のHTML、HTML形式(XML、RSSなど)を扱う能力、CSSハンドラ、時にはJITを伴うJavascriptエンジンを処理するレンダリングエンジンがあります。

それ以外にも、プラグインのアーキテクチャとAPI、プラットフォーム間の違いを抽象化する部分があり、通常は他のアプリケーションが使用するコンポーネントを使用して構築されます。

これは非常に重要ではありません。あなたのコロラリーについては、そうだと思います。 Lynxは非常に小さく、JavascriptやファンシーなHTMLをサポートしていません。あなたの最初の質問については

+0

Lynxは悪い例です。可能な限り最古のHTMLしかサポートしていません。問題は、最新かつ最も標準に準拠したHTML(従来の癖に関係しない)のみに限定された場合、コードベースが著しく単純化される(またはわずかに単純化される)ということでした。 – Thilo

+0

私は、あなたがサポートする機能が少ないほど、ブラウザーに与えるリーンさを増やしたいと思っていました。プラグインAPIを取り除くと、より簡単になります。残りの機能についても同様です。 Lynxは "極端な"例です。 –

関連する問題