2

私はゼロからPHP CMSを構築しています。私のシステムには 1 つのスーパーコア ファイルがあり、現在、システムのコアを構成する他のすべてのパッケージとクラスを自動的にインポートしています。通常のページでは、これらのクラスとメソッドの一部のみが使用されます。

require_once()これらのファイルをすべて含めるためにサーバーにかかる負荷と、ページが読み込まれるまでユーザーが待たなければならない時間を考慮すると、どのパスを使用する必要があるのか​​ 疑問に思っています。

  1. スーパー コアをそのまま保持し、このコア ファイルを含む各ページのすべてのシステム コアを自動的に含めます。
  2. スーパーコアを使用して、データベース管理などの必須パッケージのみを含め、必要に応じて追加のパッケージ/クラスをインポートします。

2 つのオプションのどちらが最適か、またその長所と短所の概要を教えてください。

ありがとうございました!!!

4

3 に答える 3

6

あなたは、どの負荷戦略が最適かについて質問しています。これは、オートローダーに関連してよく議論されます。

どの戦略にも言えることですが、長所と短所があります。すべてのファイルを含めることで、ファイルを 1 つ忘れる手間を省くことができます。もう一方のオートローダーもファイルを忘れません。

ただし、常にいずれかの戦略を使用する必要はありませんが、複数を実装する場合は、必要に応じて選択できます。たとえば、CMS を開発すると、状況が頻繁に変わる可能性があります。ただし、CMS がサーバーにインストールされている場合、そのバージョンは頻繁には変更されません。

そのため、本番環境では、すべてのコア ライブラリを 1 つのファイルに結合し、起動時にそれらを要求する戦略は、サーバーの負荷によってはメリットがあります。

独自のシステムを構築する簡単な方法として、オートローダーを提案できます。ファイルごとにクラスを並べると、クラスを使用した瞬間に自動的にロードされます。

開発の特定のステップを達成すると、コアファイルが何であるかが実際にわかります。その後、デフォルトでこれらをロードして、オートローダーがトリガーされないようにすることができます。

于 2011-06-15T14:28:02.640 に答える
3

今年の初め、PHPでフレームワークを開発しているときに、この正確な問題に遭遇しました。

私は賛否両論を検討しました、そしてここに私の評価があります:

オプション1-フロントコントローラーパターンスクリプトには、他のすべてのスクリプトが含まれます

利点

  • パッケージの組み込みは1つのスクリプト内で行われます。含まれているファイルと含まれていないファイルを一目で確認できます。
  • 特定のパッケージを含めることは常に1回呼び出され、オーバーヘッドはありません。

短所

  • そのような場合を考えてみましょう:

2つのクラスRectangleとがありShapeます。Rectangle子クラス、つまりの拡張子ですShape。ただし、コアスクリプトにはアルファベット順にクラスが含まれています。したがって、Rectangleが含まれている場合、Shapeが見つからず、PHPはエラーをスローします。

Rectangleクラス:

class Rectangle extends Shape{

}

Shapeクラス:

class Shape{

}
  • 不要なものもすべてメモリにロードされると、オーバーヘッドが増加します。

オプション2-メインパッケージをロードしてから、必要に応じて他のパッケージをロードします

利点

  • ファイルは必要な場合にのみ含まれます。別の方法でオーバーヘッドを削減します
  • オプション1で述べた問題を解決します。
  • 各パッケージが他のパッケージから必要とするものに集中して、単にそれらをロードすることができます

短所

  • 特定のパッケージに対する複数の要求が発生する可能性があるため、オーバーヘッドが発生する可能性があります。
  • パッケージのインクルードは、すべてのファイルで行われます。

プログラミングコードは人間用です。したがって、物事をより論理的にし、問題を分解するために、私はオプション2を選択してフレームワークを選択しました。

于 2011-06-15T14:34:07.400 に答える
2

使用しないものはロードしないでください。オートローダーを実装するか、require_once を深めます。

パフォーマンスが無視できるものであっても、含まれるファイルが少ないほど、バグをすばやく見つけ出し、アプリケーションのフローを決定する能力が向上します。

于 2011-06-15T14:27:00.323 に答える