ホームページ バックエンド開発 PHPチュートリアル PHPとJAVAの二重言語再構築プロジェクト

PHPとJAVAの二重言語再構築プロジェクト

Jun 13, 2016 pm 12:28 PM
fastcgi java php velocity web

PHP と JAVA の二重言語再構築プロジェクト

会社の Web サイトは最近改訂されており、他の関連製品もアップグレードおよび改訂する必要があります。 同社の戦略は「クライアントのために PHP を使用する」です。サーバーには Java を使用します。具体的には、「プロジェクトのコントローラー内の基本的な検証データは、PHP を使用してソートおよび出力されます (PHP で開発されたクエリ クラス インターフェイスも少数あります)。」、「Java 側はさまざまです。ビジネス ロジックと操作データベースのインターフェイスへのカプセル化。PHP 側の呼び出し」。私は PHP なので、主なパラメーターは PHP 側のエンコーディングです。インターフェイスのカプセル化にはインターフェイスのカプセル化の利点があります。これに関する私の最近の開発経験は次のとおりです。

第一: Web サイトのアップグレードや改訂時に多くのビジネス ロジックを変更する必要がなく、フロントエンドがどのように変更されても、データはあまり変更されず、古いインターフェイスを取得できます。

第二:カプセル化後のインターフェイスはよりモジュール化されており、インターフェイス層を担当するプログラマーがコーディングとテストを担当し、PHP 側がデータの取得を担当する、明確な責任。 3 番目: 同社のドキュメントは非常に強力です。ドキュメントとデータディクショナリには、インターフェイスのテーブル構造とパラメータの戻り値などが明確に記述されており、オフィスプロセスがより標準化されています。その4:便利、シンプル、明確です。

?

最近、私の元クラスメートの CTO と話をした後、多くの企業がこのモデルをアーキテクチャ プロジェクトの開発に使用していることがわかりました。この種のアーキテクチャ展開の利点は依然として大きいです。はい、他の人の記事を転載して、その利点と欠点について詳しく話しましょう。

次の内容は、

http:// から転載します。 www.zhihu.com/question/20314377/answer/14801579

// テクノロジーは日々変化しています。答えを更新せずにしばらく放置すると、古くなってしまいます。
2 週間前に ThinkInLamp の PHP アーキテクト カンファレンスに参加した後、午前中ずっとニアオ兄弟の話を聞いて、とても感動しました。PHP 業界は方向性が不明確で、2 ~ 3 年を無駄にしましたが、ようやく再び立ち上がってきました。 。
実際、Java の再起動の問題を含め、現在では多くの解決策がありますが、何はともあれ、デュアルプロセスのロード バランスの切り替えは簡単に実行できます (ただし、コールド スタートの問題が発生する可能性があります)。
PHP [email protected] PHPNG の取り組みについては、JIT が間もなく登場し、ZVAL も最適化され、特にデータ分析で最も問題となる配列定数の参照と配列構造のサイズが解決されました。必然的に、未来にはより広い空間が存在します。 [email protected] Swoole のようなソリューションは、fastcgi.com が提案する標準 FastCGI ソリューションを真に実装しており、起動するたびにコンテキストを再構築してデータを初期化するコストを排除し、バックエンド/Web サーバー/TCP または UDP サーバーも使用できます。他の働き方。
しかし、これらによって異種言語環境が消滅したわけではなく、業界ではますます一般的になってきています。 最も重要な点は、オープンソース業界の台頭により、より多くのより良い選択肢が与えられ、アーキテクチャの開発がますます容易になり、非同期対話やその他の方法を通じて分離する必要性がますます高まっているということです。 非コア モジュールやミドルウェアに異種言語を使用するオープン ソース プロジェクトでは、パフォーマンスの限界を超えたり、開発や改善を伴う特別なビジネス要件が発生したりすることがよくあります。
モジュールを階層化して分割した後、独自のビジネス シナリオやニーズに応じて、さまざまなモジュールをさまざまな言語で実装することがますます一般的になりました。もちろん、その理由の 1 つは会社の構成です。技術チーム。 PHP と Java は Web 開発において最も高い市場シェアを持っているため、これらが組み合わせて使用​​されることが多いのも不思議ではありません。 現在、Python/NodeJS/Go などの多くのオープンソース プロジェクトが異種システムの軍隊に加わりました。
// 元の回答はおそらく 2012 年頃に書かれたと思われます。
まず第一に、なぜ他ではなく PHP と Java なのか。これは、両方のオープンソース コミュニティが非常に活発であり、両方とも Web 開発に適しており、運用と保守において統一的に管理できるという事実と大きく関係しています。
.Net の市場シェアは低くはありませんが、Windows や SQL Server のライセンス料金、オープンソース コミュニティの活動の低さなどのさまざまな問題により、相対的に考慮されていません。 Web 開発に適した TIOBE のトップ 10 言語には、Python、Perl、Ruby も含まれており、その中で、Perl は主にサーバー スクリプトの分野で多くのアプリケーションが存在する可能性があります。ウェブ上で再び昨日になります。 Python は最近増加傾向にありますが、ドキュメントが不足していて採用が比較的難しいため、当面は大規模 Web サイトの主流の選択肢にはならないでしょう。ルビーは言うまでもありません。
2 つの言語の違いをもう一度見てください。 PHP は柔軟性があり、すぐに開始でき、変更も簡単で、公開も簡単です。欠点としては、間違いが起こりやすいこと (スペルミス、SQL インジェクション、アップロードの実行など)、実行効率が低いことです。グローバルキャッシュが不足している。 Java の利点は、安定性と信頼性が高く、操作効率が高く (特に JIT の出現後、その差はさらに大きくなりました)、間違いを犯しにくい (強い型付け、プリコンパイル、例外をインターセプトする必要がある) ことです。など)、開発とリリースの効率が比較的低いことが欠点です。優秀なエンジニアは上記の問題をある程度変えることができますが、一般的に、犬と同じくらい多くの専門家を擁するドリームチームがどこにでも存在できるのでしょうか?
次に、MVC 階層の観点から見ると、一般的な Web サイト プロジェクトの開発サイクルにおいて、要件の変更と調整が最も頻繁に行われるのはビューであり、次にコントローラー、最後にモデルが続きます。これは非常に簡単に理解できます。何もすることがないのに、誰が毎日データ構造を変更するでしょうか。多かれ少なかれ、バージョンがアップグレードされるたびに制御構造を変更する必要があります。 Viewさんの場合、BU、PM、UEDが2日間変わらないのは、まとめて年休を取っているからではないでしょうか?

現時点では、RPC テクノロジーは十分に成熟しているため、開発者は何も考えずに機能開発に集中できます。アーキテクチャ上のプラットフォームや通信の詳細の違いについてはあまりにも重要です。これは、大企業で 2 つの言語を同時に使用するソリューションでも、それほど複雑さや作業負荷がかからないことを意味します。もちろん、このためドキュメントの量の下限は大幅に引き上げられましたが、実際、ほとんどのチームはこのことを喜んで聞いています。「ドキュメントは重要だが、毎日時間がない」などとは言わないでください。他の同僚はどうすればよいでしょうか。書かなかったら協力しますか?
一般に、PHP を使用すると、ユーザーのフロントエンドに近いため、フロントエンドへの頻繁かつ些細な更新をより速く完了でき、さまざまなニーズの変化に自由に対応できます。ページ構造の調整、ユーザー入力コンテンツの基本的な検証、ユーザー操作のみに関連する単純なロジックなどはすべて、PHP を使用した開発に適しています。ページの変更は、Smarty などのテンプレート テクノロジーを通じてフロントエンド チームに移行することもできます。基本的なビジネス ロジックとデータ更新は Java を使用して開発されており、再利用性、パフォーマンス、スループットを効果的に向上させ、セキュリティの問題を回避できます。開発効率の多少の低下は保守性の向上につながり、基本的なビジネスロジックの調整は全体的に修正することが多く、レイヤーごとのテストと確認を経てリリースできるため、リリース速度が遅いことは問題になりません。 。
したがって、大規模な Web サイトでは、フロントエンドに PHP、バックエンドに Java が使用されます。Java は、採用と保守が容易で、システムが安定し、パフォーマンスが高く、セキュリティが大幅に向上します。コードの再利用とドキュメントの完全性も向上しました。上記の利点をすぐに利用できる場合、建築家としてより幅広い知識を必要とすることはまったく問題ありません。
さて、後ろの学生が良い質問を追加しました。なぜ PHP だけを使用しないのか、それとも Java だけを使用しないのですか?最初にこれについて少し触れましたが、なぜ PHP Java なのかという疑問があったため、投稿する前に削除しました。実際、多くの企業、特に中小企業は、チーム組織が過度に複雑にならないようにするために、単一の言語を使用することを好みます。
実際には、単一のソリューションで適切な分離を実現でき、PHP はサービスも提供できます。実際、パフォーマンスの問題は、言語の違いではなく、アルゴリズムとアーキテクチャによって引き起こされることがよくあります。 Velocity や JSTL なども優れた分離ソリューションです。
しかし、現実は多くの場合、理想よりもはるかに貧弱であることは誰もが知っています。これらの解決策は、高圧下では多くの問題を明らかにし、バイリンガリズムの利点を反映しています。これらは実際に上で述べたものであり、変えるのが難しいことの一部を詳述しています。ポイント:
1. PHP の動的スクリプト言語の特性により、解析速度を確保するために、動作環境を確立する前にクラス、関数、および定数を繰り返し実行する必要があります。 ; アプリケーション FastCGI が使用されますが、他の言語とは異なり、プロセスを再利用してリクエストを処理するだけです。初期化後は、FastCGI インターフェイスを通じてデータが取得され、対応するインターフェイスでデータが返されます。性能面で本来の性能を取り戻すことは基本的に不可能である。さらにひどいのは、現在JITブランドのスポーツカーに乗っているJavaである。 さらに、システムレベルの共有データはサポートされていないため、コアデータは一度初期化して、拡張機能やミドルウェアを使用して再利用する必要があります。
2. PHP では間違いが非常に起こりやすく、見つけるのが難しいという事実は、公式の Zend Studio を使用したとしても変わりません。プログラムの品質が高く、重大なエラーがないことを確認する必要があります。十分な経験、十分な厳格さ、責任ある QA が必要です。 Taobao の Huang Shang 氏はかつて IDE について冗談を言いました。 「ミドルウェアの不足」というジョークの背後にある理由は、主に多くのミドルウェアのサポートがより広範囲になり、PHP に恩恵をもたらしたため、近年大幅に改善されましたが、その開発の根幹は依然として C および Java コミュニティにあります。 。パフォーマンスとエラーの発生しやすさは言語の特性に起因する技術的な問題であり、柔軟性と速度の代償として根本的な改善を期待することは困難です。
3. Java の世界には JSTL、Velocity、Freemaker もありますが、PHP の柔軟で強力な動的機能、豊富な関数とクラス ライブラリ、簡単な学習コスト、とんでもないドキュメントに比べれば、それは単なるクズです、それはクズです! JSTLを変更した後、コンテキストを再起動する必要がありますか?キャッシュが無効になっている場合でも、Velocity を再起動する必要がありますか?キャッシュがオンになっていると Velocity のパフォーマンスが低下する可能性はありますか?これらを無視したとしても、特定のデータ検証ルールを調整する場合、アクションを再起動する必要がありますか?
実際の作業におけるパフォーマンスの問題は、優れたアーキテクチャによって解決できます。間違いやすい問題は、フレームワークと仕様、および包括的なテストによって解決できます。ミドルウェアのオプションは少なくなりますが、実際には、あるべきものはすべて揃っています。 Java の柔軟性はそのままです。OSGi などはもちろん、非常にイライラした場合でも、ノードを削除して再起動し、完了後にノードを再インストールするという戦略が考えられます。まだ動作します。
したがって、多くの単一言語の技術チームが存在することがわかります。この問題の実際の考慮事項は、チーム自体の特性や蓄積などです。バイリンガリズムを使用する人は、バイリンガリズムを使用する理由も知っており、バイリンガリズムを使用しない人も、自分の道を歩む方法を知っています。最後に一言: 二重言語ソリューションを使用する理由がわからない場合は、基本的に検討する必要はありません。

?

?

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 Apr 06, 2025 am 12:03 AM

PHP8では、一致式は、式の値に基づいて異なる結果を返す新しい制御構造です。 1)Switchステートメントに似ていますが、実行ステートメントブロックの代わりに値を返します。 2)一致式の式は厳密に比較され、セキュリティが向上します。 3)スイッチステートメントの脱落の可能性を回避し、コードのシンプルさと読みやすさを向上させます。

カプセルの量を見つけるためのJavaプログラム カプセルの量を見つけるためのJavaプログラム Feb 07, 2025 am 11:37 AM

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

See all articles