先ほど chromium のソースをチェックしましたが、このモンスターを回避する方法を必死に学ぶ必要があります。
興味のある動作や機能を実装するコードの部分をどのように検索すればよいでしょうか?
アドレスバーに URL を入力した後に何が起こるかを確認したいとします。そのコードを見つけるにはどうすればよいでしょうか?
または、HTML を解析しているときに特定のタグに到達したときに何が起こるかを確認したい場合もあります。
膨大な量のソースコードが目の前にありますが、それを操作するスキルがありません。どうすればそのスキルを習得できるでしょうか?
ベストアンサー1
最初に、ソースを見てみることをお勧めします。http://code.google.com/p/chromiumembedded/。
これは Chrome の凝縮版のようなもので、具体的に使用されているファイルを見ると、ソース ツリーに含まれているファイルか、Chromium リポジトリ全体からそこに含まれているファイルのいずれかです。Chromium のコード ベースは膨大な量で、そのほとんどは実際にはブラウザーには含まれていません。サードパーティのリポジトリから取り込まれた大量のコードがあり、ビルド プロセスで要約されるか、ツリーの別の場所に Chromium の実装が配置されているため、多くのサイド プロジェクトがあります (これらは興味深く、幅広い情報源として素晴らしいものですが)。これらのサイド プロジェクトにより、ブラウザーの実装とその連携方法に具体的に焦点を絞るという目標の達成が妨げられます。
CEF が素晴らしいのは、ブラウザ ビューのみに限定したプロジェクトを構築するために、すでにすべての要素をまとめるプロセスを完了した人がいるのを確認できるからです。どの部分が主に WebKit から派生しているかを簡単に確認でき、Google の実装とのクロスオーバーがどこで発生するかを確認でき、V8 がどのようにミックスに投入されるかを簡単に確認できます。
「簡単」というのは相対的な意味で言ったのですが、それはまだ全体として膨大な量のコードについて話しているからです。CEF は要件の中心にあなたを配置しますが、それでもツリーの残りの部分から大量のさまざまなものを引き込みます。12 GB の RAM と 8 つのコアを備えた非常に高性能なコンピューターでコンパイルするのに約 1 時間かかり、生成されるファイルは状況に応じて 6 ~ 10 GB 程度を占めます。
少なくとも、浅いところに飛び込んで、あちこちで断片的に何かを選ぶようなことはしないでしょう。ブラウザは必然的に非常に複雑なエンジニアリングの一部です。なぜなら、膨大な数の個別の機能を包含し、それらを共通のコンテキストに組み合わせる必要があるからです。探しているものが 1 つ見つかるかもしれませんが、それはおそらく数十または数百のファイルで構成されているクラス ライブラリの一部であり、各タスクを処理するためにさらに 100 以上のライブラリに依存していることが分かります。そのため、本当に何かを得るには、特定の情報よりも多くの情報を取り入れるために時間を費やす必要があります。
編集: ああ、またあなたの具体的な例として。
srcはルートです出典: Chrome
/クロムchrome://src.chromium.org/viewvc/chrome/trunk/src/chrome より
「chrome」ツリーには、主に直接的な実装が含まれています (ただし、多くのものはそこに含まれていません。ほとんどのものも含まれていますが、それが出発点です)。これは chromeos と重複しています (chromeos は、極端に進化した chromium ブラウザのようなものです)
/Chrome/ブラウザhttp://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/
目標に近づいています。タブなど、ブラウザにマッチするものへの具体的な参照が見えてきます (実際のブラウザ実装自体という巨大な象を無視すると、このすべてのことの大半を占めることになります)
/chrome/ブラウザ/uihttp://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/ui/
ブラウザの UI コードの大部分が配置されている場所に移動します。ルート src ディレクトリに「ui」があり、これに何らかの重複がある場合など、重複があったり移行があったりすると混乱が生じる可能性があります。
そして最後にhttp://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/ui/omnibox/
驚くほど少ないコードが含まれています。しかし、これはよく見られるものです。ここのコードは、他の場所で構築された多数のクラスの実装です。Webview 以外の GUI コンポーネントの場合、それらは主にルート「ui」とそこにあるネイティブ ウィジェットを指しています。私の記憶が正しければ、実際のイベント処理コードの大部分はそこにあります。