web-dev-qa-db-ja.com

Webブラウザーの構築を開始するにはどうすればよいですか?

私は、ウェブブラウザをゼロから構築することにいくらか努力することにしました。 最新のWebブラウザの一般的な機能、アーキテクチャ、および機能は何ですか始める前に知っておくべきことは何ですか?

推奨事項は大歓迎です!

65
Galilyou

それを細かく分割してください。 Webブラウザとは何ですか?それは何をするためのものか?それ:

  • 外部コンテンツを取得します。したがって、HTTPライブラリが必要です。または(推奨されませんが)これを自分で記述してください。 HTTPプロトコルには多くの複雑さ/微妙さがあります。たとえば、expiresヘッダーの処理、異なるバージョン(最近ではほとんど1.1です)などです。
  • さまざまなコンテンツタイプを処理します。この種のことをピギーバックできるWindosレジストリがあります。ここでは、MIMEタイプに基づいたコンテンツの解釈について説明しています。
  • HTMLとXMLの解析:DOM(ドキュメントオブジェクトモデル)を作成します。
  • 解析してCSSを適用:これは、すべてのプロパティ、すべての測定単位、および値を指定できるすべての方法を理解することを必要とします(例:「border:1px solid black」対個別のボーダー幅などのプロパティ);
  • W3C視覚モデルを実装(そしてこれが本当のキッカーです);そして
  • Javascriptエンジンを持っています

そして、それは基本的に一言で言えばWebブラウザーです。現在、これらのタスクのいくつかは非常に複雑です。簡単に聞こえるものでも難しい場合があります。外部コンテンツを取得してください。次のようなユースケースに対処する必要があります。

  • 使用する同時接続数
  • ユーザーへのエラー報告。
  • プロキシ;
  • ユーザーオプション;
  • 等.

私と他の人が共同で眉を上げるのは、レンダリングエンジンが難しいからです(そして、誰かが指摘したように、人年が開発に費やされています)。主要なレンダリングエンジンは次のとおりです。

  • Trident: Internet Explorer用にMicrosoftによって開発されました。
  • Gecko: Firefoxで使用されます。
  • Webkit: Safariで使用され、Chrome 0-27;
  • KHTML: KDEデスクトップ環境で使用されます。 Webkitは数年前にKHTMLから分岐しました。
  • Elektra:で使用されるOpera 4-6;
  • Presto:で使用されるOpera 7-12;
  • 点滅: Chrome 28+、Opera 15+、webkit fork;

上位3つは、現在使用されている主要なレンダリングエンジンと見なす必要があります。

Javascriptエンジンも難しいです。特定のレンダリングエンジンに関連付けられる傾向があるこれらのいくつかがあります。

  • SpiderMonkey: Gecko/Firefoxで使用されています。
  • TraceMonkey:はFirefox 3.1のSpiderMonkeyを置き換え、JIT(ジャストインタイム)コンパイルを導入します。
  • KJS: Konquerorで使用され、KHTMLに関連付けられています。
  • JScript: Internet Explorerで使用されるTridentのJavascriptエンジン。
  • JavascriptCore: SafariブラウザーがWebkitで使用。
  • SquirrelFish:はWebkitで使用され、TraceMonkeyのようなJITを追加します。
  • V8: Chrome and Opera;
  • Opera(12.X以前)も独自のものを使用しました。

そしてもちろん、ページ間のナビゲーション、ページ履歴、一時ファイルの消去、URLの入力、URLの自動補完など、すべてのユーザーインターフェイスがあります。

それはlotの仕事です。

110
cletus

本当に興味深いプロジェクトのように聞こえますが、多大な労力を投資する必要があります。

簡単なことではありませんが、学術的な観点からは、そこから多くを学ぶことができます

確認できるリソース:

しかし、現実的の観点から見ると、最初からコーディングするのに必要な多大な努力がこの漫画を思い出しました:


(ソース: geekherocomic.com

がんばろう :-)

21
CMS

これは非常に野心的なプロジェクトです(特に1人の開発者にとって)が、いつかやりたいことがあります-それから多くを学ぶことができます。

プロトコルがどのように機能するのか(あなたが間違いなく研究する必要があるもの)またはブラウザで何が起こるかについてはあまり知りませんが、開始するのに最適な場所は、主にChromeおよびFirefox。 Chromeは、chromeとブラウザーのバックエンドから始まると期待していることだけを行うので、特に注目すべきプロジェクトです。最初はレンダリングエンジンの作成を忘れてください-WebkitまたはGekkoを使用してください。

14
Ross

独自のレンダリングエンジンを作成するという意味ですか?

幸運としか言えない。現在の世代のさまざまなブラウザーには多くの人年が費やされています。どちらよりもうまくやるには、いくつかの深刻なスキルが必要になります。どこから始めればよいかを尋ねる必要がある場合、そのようなタスクを試みるのが理にかなってしまう前に、おそらく数年以上勉強する必要があります。

とはいえ、ここにいくつかの(明らかな)ポインタがあります:

  1. projecteuler.net のすべての問題を解決するなど、小さなことを行う多くのコードを書く
  2. ツールキットとそのコミュニティ標準についてできることをすべて学ぶ
  3. より多くのコードを書く
  4. 有限状態マシンの本当の確実な把握を得る
  5. さらにコードを書く
  6. tcp/ipスタックとそれがhttpでどのように使用されるかについてのすべてを学ぶ
  7. httpについてできることをすべて学ぶ
  8. 標準(html、xml、sgml、css)を学ぶ
  9. 150歳の誕生日を祝います。
  10. 実際のブラウザプロジェクトを開始します。

ここで以下を編集

私はそれがやる気を起こさせたりやる気を起こさせたりするつもりはありませんでした。ブラウザが本当に大きなプロジェクトであり、本当に大きなプロジェクトには多くの考えが必要であることを示すための試みです。ユーモアをまぶした素直な正直さ。

私は人生の3分の2以上にわたってプログラミングを行ってきましたが、私はかなりまともなプログラマーだと思うのが好きですが、まともなWebブラウザーをゼロから書くチャンスは半分だと思うのは愚かでしょう。

もちろん、これがあなたがしたいことであるなら、私のコメントを邪魔させないでください。あなたはおそらくInternet Explorerよりも良い結果を出すことができます。

13
Kris

ほとんどの最新のWebブラウザは巨大な獣であり、おそらく(そしてWeb自体も)偶然の方法で進化したため、おそらくかなり設計が不十分です。

まず、プロジェクトの目標(および達成したいこと)を非常に明確にすることから始める必要があります。これはあなたがただ楽しみのためにやっていることですか、それとも他の人があなたのブラウザを使うことを期待していますか?他の人がそれを使用することを期待する場合、それらのインセンティブは何ですか?誰もがChrome、Safari、Firefox、IE、Operaなどの代替として使用できる新しいブラウザをゼロから開発することを期待するのは非現実的です。これらのプロジェクトはすべて、10〜15年の順調なスタートを切っています。あなた、そしてあなたが彼らに追いついた時までに、彼らはあなたのさらに10-15年先にいるでしょう。加えて、彼らの背後にはもっと多くの人材がいるので、プロジェクトを成功させるには、ある時点でその人材が必要になります。

これがAppleとGoogle、リソースの多い大企業がゼロからスタートしなかった理由です。Microsoftでさえゼロからスタートしませんでした。元のIE Mosaicに基づいていました。今日でもまだゼロから開始された重要なブラウザは、OperaKonqueror、およびLynx、残念ながらすべてが非常に小さな市場シェアを持っています。Lynxはテキスト専用のブラウザであり、おそらく特定のニッチを提供しているためだと思われます。 Operaは間違いなく史上最高のブラウザの1つですが、大きな市場シェアを獲得したことはありません。KHTMLはKonquerorの背後にあるエンジンです。それ自体は非常に成功しましたが、AppleとGoogleの両方が使用するWebKitの基礎です。KHTMLが作成されたことがない場合、SafariもChrome exi聖興味深いことに、KHTMLとOperaの両方は、オスロの同じ建物で働いているノルウェーのプログラマーによって大部分が作成されました。

オペレーティングシステムの構築のようなWebブラウザーの構築を検討する必要があります。これは基本的にブラウザーであるためです。Webアプリを実行するためのオペレーティングシステムです。また、オペレーティングシステムと同様に、Webブラウザは多くのコンポーネントを備えた非常に複雑なソフトウェアです。もちろん、人々はゼロから新しいオペレーティングシステムを作成することに成功しています。 Linus Torvaldsが思い浮かびます。彼は、これまでで最も成功したオペレーティングシステムの1つであるLinuxを作りました。

もちろん、新しいsuccessful OSを構築するよりも新しいsuccessfulブラウザを構築するのが難しくなるという追加の課題に直面します。ブラウザは、ウェブ上に浮かぶすべてのレガシーコードを完璧に実行することが期待されています。ここで、Linus Torvaldsが、UNIXまたは既存のOSとの完全な下位互換性がなければ、新しいOSは重要ではないと言われたと仮定します。彼が気にかけたのではないかと疑っていますし、Linuxはおそらく今日存在しないでしょう。もちろん、現実的には、Linuxが人気を博した唯一の理由は、それが適切に設計され、GNUプロジェクトが大量の既存コードをLinuxに移植するツールを作成できたからです。 Linux、それはチャンスがなかったでしょう。

あなたが本当に成功した新しいブラウザを作ろうとするのに十分な野心的(または愚か者)であると仮定すると、あなたが焦点を当てるべきはarchitecturedesignです。何らかの方法で既存のブラウザの設計を改善できることが確実でない限り、新しいブラウザをゼロから構築する実用的な理由はありません。つまり、WebKitGeckoのコードを十分に理解して、設計上の決定を十分に理解する必要がありますが、それ以外の場合は単にコードを使用する可能性があるため、デザインをコピーしようとしないでください。

私の個人的な考えは(十分な調査を行っていなくても)、今日のブラウザーは十分にモジュール化されていないということです。新しいブラウザーを作成する場合、(JavaScriptエンジンを別のものに置き換えるなど)物事を簡単に交換できるようにし、既存のブラウザーで現在持っているよりも多くの制御をユーザーに与える方法を見つけます。最新のブラウザとWebデザイナーは、ほとんどすべての制御をユーザーから奪い去っています。ユーザーが、マシンに表示されているコンテンツをどのようにレンダリングするかをWebブラウザーに指示できないのはなぜですか?オリジナルのHTMLはコンテンツの構成方法のガイドラインを提供するだけであり、時間が経つにつれて、新しい標準はますます独断的になり、ユーザーはWebデザイナーの完全な慈悲になりました。 Linuxの魅力は、ユーザーに制御を戻すことでした。そのため、非常に多くのオタクがLinuxをサポートし、成功したOSにしました。

私があなただったら、私が研究に費やすもう1つのことは、オペレーティングシステムの設計原則です。少なくとも理論的には、優れたブラウザーの設計には、優れたOSの設計と同じ原則が必要です(特に、並行プロセス、セキュリティモデルなどに関して)。

最後に、多くの調査を行った後、ここからコーディングを開始する必要があります。

  1. リエンジニアリングMosaicですが、独自のデザインアイデアがあります。これは、あなたが楽しみのために、またはあなた自身の教育的利益のためだけにやっているなら、私が提案することでもあります。元のHTML 1.0仕様とHTML 2.0仕様、およびHTTP 1.1仕様と現在のURI仕様を読み、ブラウザがこれらすべての仕様に準拠していることを確認してください。もちろん、既にトランスポートプロトコル、URI規約などを処理している既存のソフトウェアをダウンロードできますが、独自のブラウザの設計に真剣に取り組んでいる場合は、これらのことをゼロから行うことも良い練習だと思います。すべてのパズルのピースがどのように組み合わされるかについての感覚。ステップ0の終わりに、少なくとも90年代の最先端のものに匹敵するブラウザーが必要です。これは良い最初のマイルストーンです。そして、実際にオリジナルのMosaicを ftp://ftp.ncsa.uiuc.edu/Mosaic/ からダウンロードして、ブラウザーとの比較を確認できます。また、現在のWebサイトがMosaicのような古代のブラウザでどのようにレンダリングされるかを確認するのも良い練習です。

  2. DOMのサポートをブラウザーに追加します。 W3C DOMレベル1とレベル2に最初に焦点を当てます。現在のブラウザーのほとんどがこれらを完全にサポートしているためです。次に、レベル3とレベル4を見てください。DOMはWebプログラミングの非常に基本的なものです。したがって、実際に最新のWebブラウザーを構築する場合は、設計全体でこれを考慮する必要があります。 C#でブラウザを記述しているため、既存の.NETオブジェクトモデルを活用してどのように有利に活用できるかを考慮する必要があります。

  3. 既存のスクリプトエンジンを調べて、プロジェクトに移植できるかどうかを確認します。独自のJavaScriptインタープリターを作成することはお勧めしません。それ自体が非常に大きなプロジェクトであるだけでなく、JSコンパイラ(V8など)の最適化に多くの作業が既に行われているためです。したがって、コンパイラー設計の第一人者でない限り、EMCAScript仕様に完全に準拠していても、手作りのJSインタープリターはすでにあるものよりも劣っている可能性があります。繰り返しますが、スクリプトエンジンは、実際のブラウザーとはまったく別のモジュールである必要があると思います。そのため、スクリプトエンジンを構築するのではなく、スクリプトエンジンを置き換えることができるフレームワークを用意する方がはるかに便利だと思いますこれはブラウザでのみ機能します。

  4. 北米の上位10〜20のWebサイト(Google、Facebook、YouTube、Twitter、Wikipedia、Amazon、人気のあるブログプラットフォームなど)のHTML/CSS/JSソースコードを確認し、これらのサイトで動作するようにブラウザーを設計します。これは、既存のすべての標準に準拠したブラウザー(現在のブラウザーではまだ完全に実行できないもの)を作成するよりも、Web上のすべてのWebサイトを正しくレンダリングするブラウザーを作成するよりも、解決するのがやや扱いやすい問題です(誰もできません)それを行う)。あなたのブラウザが標準規格に違反しているなどと文句を言う人もいますが、あなたのブラウザでGoogleやFacebookにアクセスできないと文句を言う人ほど大きな問題ではありません。最初のリリースで、すべての(またはほとんどの)標準に正しく準拠したブラウザーは考えられないので、気にしないでください。人々が2番目または3番目のバージョンが存在するほど十分に使いたいものを作成できる場合、その時点で標準について心配することができます。

11
user2188685

他の皆がすでに言ったように、ウェブブラウザは巨大なプロジェクトです。 tcp/ip&sockets、htmlのレンダリング、cssの使用、DOMモデルの作成、javascriptの実行、不正なマークアップとコードの処理、すべてのタイプのファイルの処理について心配する必要があります。ブラウザ(つまり、ブックマーク、履歴、プライベートブラウジング、セキュリティなど)それは巨大なプロジェクトです。

そうは言っても、それはできます。私の提案は、Firefoxのソースを見に行くことです。あなたが最初からブラウザを構築したいと言っていることは知っていますが、最初にオープンソースプロジェクトからlearnすることは非常に役立つでしょう。

Firefoxのソースをダウンロードし、ゆっくりと削除します。つまり、ソースを取得し、removeすべてのブックマーク機能を使用します。次に、アドオンを処理する機能を削除します。次に、ファイルの保存に関するすべてのコードを削除します。 very基本的なWebブラウザを取得するまで、このプロセスを続けます。そのコードに目を通します。

それから、私は私自身の構築を開始します。 Firefoxを分解して得た知識を活用し、新しいブラウザーの構築に活用しました。

A 運全体あなたに!

7
stalepretzel

Udacityには、「Building a Web Browser」というコースがあります- https://www.udacity.com/course/programming-languages--cs262

6
Elijah Lynn

整形式で有効なXHTMLから始めることができます。これは、ブラウザーが実際の「生活」で遭遇するタグスープよりも簡単なはずです。

次に、Webからの実際のHTMLをニーズに合わせて曲げる方法を見つける必要があります。

しかし、自分をからかってはいけません。ブラウザは小さなプロジェクトではありません。

4
stesch

...その後、セキュリティについて心配し始めます

(ただし、非機能的で横断的な問題は一般的に事前に考慮される必要があります:))

2
Matt

非常に野心的なプロジェクトですが、1人の開発者がこれを単独で行うことはできませんチーム(プロジェクトマネージャ、テスター...)が必要です同じ)とにかく私はあなたの幸運を祈って、私はあなたのブラウザを使用して幸せになるでしょう:D

1
Hannoun Yassir

あなたは本当にあなたの手の中に多くの自由時間を持っていますよね?私の知る限り、ほとんどのブラウザはC++で書かれており、すべてのユーザーが.NETフレームワークをコンピューターにインストールしているわけではありません。

これには何年もかかる可能性がありますが、とにかく、FireFox、Google Chrome ..など)の多くのオープンソースブラウザーがあります。まずはコードを見て、幸運を祈ります。 )

0
Waleed Eissa