web-dev-qa-db-ja.com

なぜJavaをインタプリタ言語よりもサーバー側言語として使用するのですか?

Webページは通常、ページを更新し、UIコンポーネントをクリックしてから、デバッグログに書き込むか、IDEにブレークポイントを追加することでテストされます...より大きなアプリケーションでは、ユニットテストはプログラムの出力を保証するために作成されます。

JavaはWebページのサーバーサイド言語としてはひどいものです。再コンパイルする必要があります毎回コード行を変更し、ビルド済みのEARまたはWARをアプリケーションサーバーに... PythonまたはPHP(または他の解釈された言語))のようなものが実行されます実行時に、テスト前にコンパイルする必要がなくなります。

私の質問:Javaをサーバー側言語として使用する理由は何ですか?インタプリタ言語よりも使用する方が良いのはなぜですか?

2
Kolob Canyon

有効なものである質問のタイトルがあり、次に、いくつかの不十分な仮定や誤ったステートメントを含む質問の内容があります。最初に本文を説明します。

コード行を変更するたびに再コンパイルして、ビルドされたEARまたはWARをアプリケーションサーバーに渡す必要があります...

違います。まず、 Javaにはテクノロジーが存在します を使用すると、コードを変更し、アプリケーションを再起動することなく、実行中のアプリケーションを変更できます。私はそれを支持するためではなく、証明として製品にリンクします。私はそれを使用し、それが機能することを確認できます。次に、pythonもコンパイルする必要があります。それは、そのコンパイルが発生したときだけです。Javaでは、前もってそれを実行します。= python実行時に発生します(詳細はPythonバリアントによって異なります)

なぜコンパイル済み言語を使用するのかということに関しては、ここにいくつかの理由があります。

  • バイトコードファイルはソースファイルよりも小さく、サーバー(人間ではない)はソースを必要としません。
  • 事前にコンパイルすると、構文エラーをキャッチできます。サーバーにファイルをロードするまで待って、コロンを忘れたことを確認してください。

どちらか一方を選択する理由の残りの理由は、コンパイルするときのことではありません。動的コードと静的コード、および2つのアプローチの長所と短所を中心に扱う傾向があります。私はよく書かれたJavaコードはよく書かれたPythonよりもコードが高速であることを期待しています。

8
JimmyJames

まず、あなたの誇張は少しずれています:

everyコード行を変更して、ビルドしたEARまたはWARをアプリケーションサーバーに渡す時間を再コンパイルする必要があります...

アプリケーションをビルドするためにJSPまたはその他のテンプレートライブラリを使用しているかどうかは、完全に異なります。 JSPとほとんどの代替テンプレートを使用すると、その場で編集してページを再ロードするだけです。これらの変更をリポジトリにコピーすることを忘れないでください。しかし、他にもあります。以下を参照してください。

なぜJavaなのか?

Javaが他のいくつかの言語よりも優れている最大の利点は、それを取り巻くエコシステムです。Springベースのアプリケーションを構築している場合でも、独自のことをしている場合でも、通常、準備ができているAPIがいくつかありますJavaエコシステムは主にサーバー側に特化しています。車輪を再発明する必要がないことを知ることは大きな恩恵です。

Javaそれには欠点がありますか?確かに、それは発明されたすべてのコンピュータ言語に適用されます。そうでないと思うなら、おそらくその言語で実質的なものを構築していないでしょう。

非難Javaは不公平です。より良いビルドツールでビルド時間を改善できるかどうかを確認してください。ビルドサーバーが貧弱な場合は、時間をかけてどのように改善するかを理解してくださいたとえば、ローカルマシンでビルドして、すべてのJava、C#、およびPython個からのデプロイメントパッケージをコンパイルして作成するために2.5分かかるプロジェクトがあります。同じプロセスビルドサーバーで14分かかりますが、その多くはディスク速度と古いサーバーであるため、ビルドを修正します。

なぜインタープリター言語ではないのですか?

それは本当にあなたが構築しているプラ​​ットフォームとあなたが持っているチームに依存します。 Ruby on RailsまたはPHPなど)を使用していて、もう1つは、アプリをサポートする有能な開発者を見つけるためのものです。正直に言うと、人事の問題は、プロジェクトでRuby on Rails=)から移行した1つの理由です。

とはいえ、インタープリター型言語を使用しない技術的な理由はほとんどありません。通常、特定のドメインに必要なすべてのサポートライブラリを見つけることができるかどうかによって異なります。

  • 人を見つけるなど、ニーズに最も適した言語を選択してください
  • 作業中のコードをバージョン管理にコミットできる方法で作業するように注意してください
  • プラットフォームを選択するときは客観的にしてください。アプリは、組み込まれているフレームワークや言語よりも大きいです。

それらは相互に排他的ではありません

WebサービスにJava=を使用し、JavaScriptでシングルページアプリを構築するチームは、両方の長所を備えています。ユーザーインターフェースは、多くのシングルページアプリプラットフォームの1つを使用して構築されています。一方、通常はそれほど変更されないWebサービス部分をそのまま使用できます。

このマイクロサービスの世界では、異種のテクノロジーセットを使用することがますます一般的になっています。たとえば、pythonベースのサービスを利用して、アプリの一部の自然言語サポートライブラリをJavaベースのインフラストラクチャの一部と組み合わせて利用することができます。

6
Berin Loritsch

既存の答えは本当の理由には触れていませんJavaがサーバー側言語として人気になった。

CPUパフォーマンスの改善が、クロック速度を上げるのではなく、追加のコアによってもたらされ始めたとき、アプリケーションは、それらのパフォーマンスの向上を実現するためにマルチスレッド化する必要がありました。 Javaは最初に使用された言語の1つで一般的に使用されていました高レベルのマルチスレッド構造 =これにより、高度な並行アプリケーションの作成が比較的簡単になりました。Javaの(もはや価値のない)評判は遅いという評価にもかかわらず、Java他のほとんどすべての言語ですそれで人々はそうしました.

3
Kevin Krumwiede

コード行を変更するたびに再コンパイルして、ビルドされたEARまたはWARをアプリケーションサーバーに渡す必要があります。

これはプロセスの問題であり、上記で答えが見つからなかった(膨大なコメントを含む)ものです。

はい。本番環境またはQAのデプロイでは、デプロイ可能なアーティファクトをビルドする必要があります。これは、善意の開発者がサーバーにログインしてコードを変更するのを妨げるだけの理由で、良いことです。

ただし、開発の場合は、IDE(EclipseやIntelliJなど)を使用してサーバーをローカルで実行する必要があります。 1行のコードを変更すると、IDEが段階的にコンパイルされ、クラスが実行中のサーバーにホットスワップされます。 WAR/EARを再デプロイする必要がある場合もありますが、そのために完全なビルドが必要になることはありません。

IDEが気に入らない場合は、「分解された」WAR/EARファイルを操作することで、ほとんど同じ効果を得ることができます。これは痛みを伴うのでお勧めしませんが、確実に機能します。Javaを使用すると、単一のクラスを再コンパイルできます(これは、Javaで楽しかったことの1つでした。 90年代後半のC++)、およびTomcatとJettyの両方がJSPへの変更を自動的に検出します。

1
kdgregory