web-dev-qa-db-ja.com

純粋なJava Webブラウザ、それは実用的ですか?

Java Webブラウザが可能ですが、それは実用的ですか? Loboプロジェクト を見て、感銘を受けたと認めなければなりませんが、 veが収集したのは、2009年に開発が停止したようです。純粋にJava(WebKit Javaバインディングのないタイプ))でコーディングされたブラウザは、それらと競合できますか? ChromeまたはFirefoxのランクの中で、またはそれは本質的に遅くなり、ユーザーを妨げますか?

29
Mysteriousness

ほとんどの場合、プログラミング言語は障害になることはありません。 JVMの必須メモリ管理は、一部のパフォーマンスが重要な部分(メモリハンガーなどですが、実際には、JavaのGCが実際にメモリリークの防止に優れている可能性があります)で不利になる可能性があり、さらにいくつかのセキュリティ上の懸念があります。それ以外には、明白なショーストッパーはありません。

しかしながら。

FirefoxまたはChromiumの規模のWebブラウザは大規模の取り組みであり、両方のプロジェクトの背後には膨大な経験があります-Mozillaは何十年ものブラウザ構築(およびいくつかの有名な失敗)とChromeに基づいて構築されています/ Chromiumには、GoogleとApple(WebKit開発の主要な力))があり、KDEおよびその他の大規模なオープンソースプロジェクトからの多くの知識と経験を吸収しています。レンダリングエンジンだけでなく、あらゆる種類の戦いで実証されたライブラリを利用してください。ベクターグラフィックス、フォントレンダリング、解析、XML DOMツリー操作、ネットワーキング、キャッシュ、暗号化など、リストはどんどん増えています。これらのホイールはすべて自分で作り直したくはありません。なぜなら、それらは実行するのが難しく、間違えやすいからです。

要するに、業界で強力なWebブラウザーを構築するのはかなり大変であり、この分野で成功事例がほんの一部しかないのはつまり理由です。 CとC++は技術的にも社会的にも有利ですが、プログラミング言語はそれとはほとんど関係がありません。

44
tdammers

理論的には、それは間違いなく実行できます。ただし、実用的な観点からは、少し疑問があります。 loboは、最初に試されたときほど近くはありません。実際、Javaの優位性の初期のショーケースの1つは、世界を変えることになるHotJavaブラウザであるはずでした 「モザイク生成」をレンダリングしますブラウザは廃止されました

もちろん、反対のことが真であることは誰もが知っていることです。 HotJavaは死んでいます であり、ブラウザ戦争で実際に深刻な競争相手になることはありませんでした(実際、「HotJavaブラウザ」を検索すると、上位のヒットは、SunのWebアプリであっても、それがまったく正しく機能しなかったというバグレポートです。

個人的には、それが可能であるのか、それとも実用的であるのかは、(大部分は)間違った方向を見て考えていることだと思います。問題はではないかどうかJavaは、このようなプロジェクトが非現実的であるためにそのような莫大なペナルティを運ぶ。問題はJavaには、そのようなプロジェクトを正当化するのに十分な利点があります。

単純な事実は、(例を使用するための)webkitは大きくて複雑なコードです。 Javaは、サイズと複雑さの半分で同じことを実行できるほどはるかにすばらしいと仮定しても、結果はstill非常に大きく複雑なコード(同様にV8など)

その量の作業を複製する前に、ほとんどの人は「私たちの製品はかなり競争力があると思われる」よりも少し多くの保証を求めていると思います。

ブラウザーのユーザーに表示される機能のセットから始めて、それらの機能を備えたブラウザーを作成する最も効率的な方法を決定しようとすると、「Java」はおそらく「」の一部として以外、その回答の一部にはなりません。 JavaScript」。歴史が異なって機能していた場合、おそらくそれが(少なくとも理論的には)答えの一部にならないことができない理由はありませんが、現在の状況を考えると、そうではありません。

さらに、その変化の可能性はほとんどありません。 Oracle(またはおそらくIBM)がJavaの競争力を維持することが(明白な例としては)Microsoft .NETを維持するのに有用であると判断した場合、それはほとんど起こりません。

それ以外では、想像できるすべての機能セット(それ自体が「純粋なJavaで書かれた」機能以外)は、ブラウザーを完全にJavaで作成するよりも、他の方法でほぼ確実にすばやく簡単に実現できます。

11
Jerry Coffin

正直、知識豊富な専門チームがJavaで高性能のWebブラウザーを作成できると信じています。本当の質問は、なぜですか?ブラウザを特定の言語で作成することは、実際には機能ではありません。人々はChrome高速であるため、または拡張可能であるためFirefoxを使用しますが、たまたまJavaで記述されているという理由だけでJBrowserを使用しません。解決しようとしていますか?

次の質問は、JBrowserを作成する理由があると想定して、「Javaを使用するとタスクが容易になるか困難になるか?」彼らは非常にプロJavaショップであるという事実です。Javaの利点が時間内に純利益をもたらすことはなかったと信じているようです。

5
Michael

Nashorn(Rhinoに代わるJVMのJavascript)がJava 8の一部としてJVMに導入されたため、これは非常に実行可能です。ただし、他の人が指摘しているように、最新のWebには非常に多くの機能があります。ブラウザで、Java app :-)内でブラウジング機能をホストする必要がある場合は、WebKitを埋め込む方が簡単なようです。

2
Martijn Verburg

現在のトップの答えは素晴らしいです。ただし、Javaに何かを完全に再コーディングする必要はありません。ネイティブソースをJavaバイトコードを相互運用性の度合いが異なるバイトコードに変換します。これらのツールは、ソートのインタープリターを作成したり、MIPSなどのJVMのような表現を足がかりとして使用したりします。 a Java主要なネイティブライブラリをJavaバイトコードに変換することにより、ブラウザ開発を多くのステップに分け、それらを純粋なJavaブラウザソースと統合する、そして徐々にJavaソースとしてより多くのライブラリコードを実装します。

これにより、安全なJVM内にすべてを含めることができます。ただし、効率を確保するためのお尻の痛みになります。大規模でアジャイル化前/ OOPのレガシーアプリケーションを徐々にリファクタリングする前例がいくつかあります。さらに、一部のコンポーネントにはすでに適切なJava=実装があり、それらを使用して労力を削減することもできます。

1
Nick P

これは、Windows 9x時代のソフトウェアOpenGLとハードウェアアクセラレーションOpenGLの比較に相当します。 JavaをWebブラウザのようなものに使用する場合の問題は、多くの少ないクロックサイクルを使用して、より少ない言語でよりネイティブな言語で可能なことを実行する可能性があることです。 OpenGLのコンセプトでもありました。タスクを完了することはできましたが、それを行うにははるかに多くの処理が必要でした。

それで、それは可能ですか?潜在的に。それは競争力がありますか?ありそうもない-高度に最適化された、プラットフォームに依存するコードの何かは、速度を大幅に向上させる可能性があります。

ただし、これは単なる推測です。

0
David Betournay

私はここで少し偏見があると言わなければなりませんが、ここに行きます。私はC/C++の説教者が好きではありません。すばらしい優れた設計のアプリケーションが世の中にあることは知っていますが、それはただのAツールであり、多くの人がC/C++に言及するだけで解決策が見つからないという印象を受けました。 http://www.paulgraham.com/avg.html電球のパラドックスを参照してください)。私は事実を見てみます:JavaはC/C++と同じくらい高速ですが、より多くのメモリが必要です。または、Java C/C++と同じくらい高速ですが、そのプログラムはより多くのメモリを消費します。

生産性を見ると、C++ソリューションと比較して、比較的簡単に特定の問題(エンタープライズJavaなど)のJavaソリューション)を作成できます。Webブラウザーはまったく異なるものです。要件:

  • 巨大な仕様、HTML、JavaScriptなどに準拠する必要があります。これには、2D描画APIなどの問題が含まれます。または、OSシステムコール(描画プリミティブとして)からテキストまたはフォント表現(「レンダリング」)を取得する方法を教えてください。 cairo(C)などのライブラリとgezira(www.youtube.com/watch?v=P97O8osukZ0、 https://github.com/damelang/gezira )のような他の試みを見てください。
  • 流暢に「感じる」必要があります。つまり、特定の操作はmsしか実行されません。
  • 非常に困難な今日の「ブラウザ戦争」に対抗するには、独自のエクスペリエンスを形成するUIコンセプトを形成する必要があります。

つまり、可能であれば、ほとんどすべてのプログラミング言語でブラウザを作成し、現在のC++蒸気船とほぼ同じ結果を得ることができます。しかし、これを行うには、かなり並外れた量の努力が必要になります。何(何百万)かはわかりませんが、推測したくありません。多分私達はこの最終結果を得ることができます:人々は高水準言語で最適化するのが好きではありません、または多分(Cで最適化できる他の言語の専門家と比較して)C/C++で最適化したい人々を得るのは安上がりです同様のレベル)。

0