1

私はphp、ajax、javascript、mysqlを使用してWebアプリを構築しています。私はしばらくの間何かを心配してきましたが、それが本当に問題であるかどうかはわかりません。コードがどのように機能するかの基本的な概念は次のとおりです...今すぐ変更する必要があるのか​​、それともそのまま使用してもよいのかを知りたいのですが。パフォーマンスは私にとって重要です...5,000人以上のユーザーがパフォーマンスの問題をあまり起こさずにアプリを使用できるはずです。私の心配の一部は、独学の開発者であり、そこにあるすべてのベストプラクティスを知らないという妄想です。

基本的なWebアプリの機能は次のとおりです。

ユーザーは、ブラウザを介してonclickイベント->phpPG1.phpへのajax呼び出しを介して呼び出しを実行します。-> phpPG1.phpは、dbに対してクエリを実行し、結果を配列に格納します。次に、HTMLphp.phpという別のphpページを含め、クラスであるHTMLphp.phpページから新しいオブジェクトをインスタンス化します->クラスの関数を呼び出しますクエリの結果を含む配列を渡します->クラス関数はHTMLテーブルを作成し、文字列を返します-> phpPG1.phpページは、テーブルデータを含む文字列を文字列を表示するajax呼び出しに送り返します指定されたDIVタグでそれが属します。

HTMLphp.phpには、Webアプリ全体のHTMLテーブルを返すために使用されるすべての関数が含まれています。HTMLphp.phpは次のようになります。

Class HTML_stuff
{
   function html_TABLE1($results_array)
   {

      $string = 'THE HTML TABLE WITH ITS DATA IN IT'
      return $string
   }

   function html_TABLE2($results_array)
   {

      $string = 'THE HTML TABLE WITH ITS DATA IN IT'
      return $string
   }

}

だから、ここに私の質問があります。HTMLphp.phpページには現在5,606行のコードがあり、これはクラス内の100個程度の関数を表しています。基本的に、私のWebアプリケーションのすべてのページには、クラス関数を使用してhtmlテーブルを表示できるようにするために、このページが「含まれています」。私はwebappの作業を半分ほど終えているので、このファイルに追加するコードの行はもっとたくさんあります。特にクラスオブジェクトを使用する場合、コンピューターがコードを実行する方法については正確には理解できませんが、phpのような「解釈言語」の場合は基本を理解しています。

これが悪い考えであり、次のようなことを行う必要があるかどうか疑問に思っています。HTML_stuffクラス内の各関数について、各関数のコードを削除し、次のように含まれる独自の.phpページに配置するだけです。

Class HTML_stuff
{
   function html_TABLE1($results_array)
   {
      include_once 'TABLE1.php'; //the html table for this function.
      return $string;
   }

   function html_TABLE2($results_array)
   {
      include_once 'TABLE2.php';
      return $string;
   }
}

私の基本的な仮定は、特定の関数を呼び出すときに必要なHTMLのみを含めることです。したがって、これがサイト全体のパフォーマンスに役立つと仮定して、HTMLphp.phpページの全体的なサイズを縮小します。考え?私の一部は、これは最初のオプションと単純に同じであり、異なる方法で編成されており、全体的なパフォーマンスに影響を与えると考えています。ただし、パフォーマンスには「インクルード」が少ないほど良いということをどこかで読みました。

他の人は何をしますか、またはこの種のことを行う方法に関する他のベストプラクティスはありますか?たとえば5,000〜10,000人のユーザーのサイトでこれを心配することは無視できますか?

ありがとう。

4

3 に答える 3

2

あなたは本当にあなたのクラスに100以上の関数を持っていますか?
おそらく(私は110%確信していませんが)、特にHTMLテーブル作成専用の場合は、クラスが適切に設計されていません。

オブジェクト指向プログラミングは優れた手法ですが、正しく使用する必要があります。すべての手続き機能を1か所にまとめただけのように思えます。それはOOPではありません。そして、コードを維持するのは難しいです。

1つのクラスに100個のメソッドがあるのは、方法が多すぎます。コードをリファクタリングし、複数のクラスに入れて、本当に必要なものだけをインポートします。そして、あなたのアプリケーションについてもっと知らなくても、私はそれ(そしてあなた)がそれから利益を得るだろうと言うことができます。

私はあなたに良心を持ってそのようなクラスを使わせることはできません;)

あなたはあなたが何をすべきか尋ねますか?PHPのコンテキストでOOP
を 学び、デザインパターンについて何か読んでください。

編集:

アプリケーションにすべてのHTMLを作成する関数があるのを見たばかりですが、これは正しいですか?もしそうなら、あなたは本当にあなたのテーブルを動的に構築することを考えるべきです、それはより少ないコードをもたらしそしておそらく維持するのがより簡単になるでしょう。

于 2010-01-16T00:41:25.127 に答える
2

オープンインクルードではなく関数/メソッド内に特定のPHPファイルを含めると、必要なアイテムのみがインクルードされて解釈されるため、間違いなく役立ちます。しかし、PHPの解釈者は、その巨大なクラスの5000行のコードを処理する必要があります。これは、IMHOがそれを実行するための非常に悪い方法であり、大きなボトルネックになります。

実際には、5000〜10000人のユーザーはそれほど多くはありませんが、これも使用方法によって異なります。それらすべてが同時にログインし、サーバーでリクエストを送信し(1分あたり10kリクエストまたは約166 req / sのようなもの)、キャッシュがほとんどまたはまったく含まれない場合、それは深刻なボトルネックになる可能性がありますが、それもまた多くの要因に依存します。代わりに、 abJMeterのようなある種の負荷テストツールを使用して、実際にそれを見つけるのが良い方法です。

これらのテストを行った後、結果がそれほど良く見えない場合は、ボトルネックが何であるかを調べてください。APCまたはMemcacheを使用してキャッシュを実装したり、パフォーマンスを向上させる他のさまざまな方法を使用したりできます。しかし、暗闇の中でワイルドショットを撮ると、5kラインクラスは、パフォーマンス上の理由だけでなく、優れたデザインのためにも、分割を検討する必要があるものだと思います。そして、おそらく、これらのHTMLピースを構築するロジックがそれほど複雑でない場合は、データをJSON / XMLとして送信し、Javascriptにこのデータを使用してテーブルを構築させることで、それをクライアントにオフロードできます。

于 2010-01-16T01:01:35.833 に答える
0

問題が解決しました。呼び出し時に必要だった関数のみを読み込むようにコードを変更しました。今では5,000行ではなく数百行で読み取られます。

于 2010-01-16T16:26:26.910 に答える