2009-05-14 7 views
0

私はリピートプロジェクトで使用する新しいCMSを開発中です。基本的に、このコードはサーバーに接続し、テーブルのすべての名前を取得し、それらを使用して簡単なナビゲーションを生成します。しかし、私が必要としているものにはかなり効果的ですが、私はこのコードスニペットをさらに最適化してより簡単にすることができるかどうか疑問に思っています。フォーメーションをカスタマイズできるクラスを作っているのでしょうか?これを可能な限り「裸の骨」にしようとしました。MySQLデータベースから動的ナビゲーションを生成するためにこのPHPスクリプトをさらに最適化することはできますか?

私が説明したいのは、テーブル名が「インクルード」でないかどうかをチェックすることです。これは、CMSがフロントエンドに表示するデータを知るために使用するデフォルトのテーブルです。データまで。

<?php 

       echo '<div class="dynamic_nav_head">Navigation</div>'; 
       echo '<div class="dynamic_nav">'; 
       include('data.php'); 
       $tables = mysql_list_tables($database); 
        while (list($table) = mysql_fetch_row($tables)) { 
          if($table!='includes'){ 
         echo "<div class='cat'>".ucwords($table)."</div>"; 
           echo "<div class='cat_item'>"; 
           echo "<a href='?page=read&section=".$table."'>View " . ucwords($table) . "</a>"; 
           echo "</div>"; 
         echo "<div class='cat_item'>"; 
           echo "<a href='?page=add&section=".$table."'>Add New ". ucwords($table) ."</a>"; 
           echo "</div>"; 
          } // End If not in Includes. 
        } // End While 
       echo '</div>'; 
?> 

このコードをどのようにしてよりリーンでクリーンかつ迅速にすることができるかに関する提案はありますか?前もって感謝します!

編集: MySQLのバージョン:4.1.22

答えて

0

私はあなたがhttp://refactormycode.com/

 echo '<div class="dynamic_nav_head">Navigation</div><div class="dynamic_nav">'; // on less echo 
     include('data.php'); 
     $tables = mysql_list_tables($database); 
      while (list($table) = mysql_fetch_row($tables)) {  
        if($table!='includes'){ 
          $ucTable= ucwords($table); // just one function call 
          // just one echo; 
          // you where also using quotes and double quotes backwards 

          echo '<div class="cat">'.$ucTable.'</div><div class="cat_item"><a href="?page=read&section='.$table.'">View ' .$ucTable.'</a></div><div class="cat_item"><a href="?page=add&section='.$table.'">Add New '. $ucTable .'</a></div>'; 
        } // End If not in Includes. 
      } // End While 
     echo '</div>'; 
+0

実際には複数のパラメータが必要です。エコー内の。のすべてをカンマ。文字列を連結して出力​​バッファに送る理由はありません。 – jmucchiello

0

どのようにコードが遅いです知っているのですか?あなたのプロファイラはコードについて何を言っていますか?どの声明がそれを減速させていますか?あなたはどんなプラットフォームですか?どのバージョンのmysql?このカタログにはいくつのテーブルがありますか?早すぎる最適化に苦しんでいますか?

+0

私はしばらくの間このコードを使用しましたが、データの10〜14テーブル(通常はページのセクションとして使用されます)を持つ小規模なデータベースではうまく動作しますが、80ページ程度のサイトで、ページの半分くらいのところで少し。より良い解決策はありますか?すべてのテーブル名を別の別のテーブルにロードしたばかりのスクリプトを使用する方が速いでしょうか?上記のコードと比較してテーブルのサイト数が少ないのでしょうか?早速のご返事ありがとうございます! – stogdilla

+0

私はこの部分が十分に速いと確信しています。ブラウザのように聞こえるように聞こえるようになります。「(...)ページの半分ほど遅れて開始しました。 – stefs

0

コードが悪いわけではないが訪問することをお勧めします。読みやすさの改善点の1つは、while構文でmysql_fetch_rowを使用するのではなく、データベースから配列を作成することです。これにより、ループに入る前に不要な名前を除外することもできます。 ucwordsメソッドを配列にマップして、whileループ構造からこれを取り出すこともできます。二重引用符についてのポイントは有効なものですが、ここでは大きな違いはありませんので、読みやすさのために別のエコー文を残しておきます。

希望に役立ちます。

関連する問題