2009-05-14 3 views
0

저는 중계 프로젝트에 사용할 새 CMS를 만들고 있습니다. 기본적으로이 코드는 서버에 연결하여 테이블의 모든 이름을 가져 와서 간단한 탐색을 생성하는 데 사용합니다. 그것은 내가 필요로하는 것에 대해 꽤 훌륭하게 작동하지만,이 코드 스 니펫을 더 최적화 할 수 있는지 그리고 더 단순하게 만들 수 있는지 궁금합니다. 아마 formating을 사용자 정의 할 수있는 클래스를 만들고 있습니까? 등. 나는 이것을 가능한 한 "뼈"로 만들려고 노력했다.MySQL 데이터베이스에서 Dynamic Nav를 생성 할 때이 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

실제로 echo는 여러 매개 변수를 사용하므로 echo의 모든.을 쉼표로 변경해야합니다 . 출력 버퍼에 보내기 전에 문자열을 연결해야 할 이유가 없습니다. – jmucchiello

0

가 어떻게 코드가 느린 알 수 있습니까? 귀하의 프로파일 러는 코드에 대해 무엇을 말합니까? 어떤 진술이 그것을 늦추고 있습니까? 어떤 플랫폼을 사용하고 계십니까? 어떤 버전의 mysql? 이 카탈로그에 몇 개의 테이블이 있습니까? 조숙 한 최적화로 어려움을 겪고 있습니까?

+0

나는 잠시 동안이 코드를 사용했으며 데이터의 10-14 테이블 (일반적으로 페이지의 섹션으로 사용됨)이있는 소규모 데이터베이스에서는 잘 작동하지만 방금 80 개 정도의 테이블이있는 사이트를 만들었으며 지연되기 시작했습니다 페이지 아래쪽 절반에 대해 조금. 더 나은 해결책이 있습니까? 모든 테이블 이름을 다른 별도의 테이블에로드 한 스크립트가 더 빠를까요? 적은 수의 테이블 사이트와 위의 코드를 비교해 볼까요? 빠른 답변 감사합니다! – stogdilla

+0

나는이 부분이 충분히 빠르다고 확신한다. 브라우저가 문제를 일으키는 것처럼 들립니다. "(...) 페이지 아래쪽 절반 정도 조금 뒤떨어지기 시작했습니다." – stefs

0

방문하는 코드는 나쁘지 않다 제안한다. 가독성 향상을위한 한 가지 개선 사항은 'while'구문 내에서 mysql_fetch_row를 사용하는 대신 데이터베이스에서 배열을 작성하는 것입니다. 또한 루프에 들어가기 전에 원하지 않는 이름을 필터링 할 수 있습니다. 배열에서 ucwords 메서드를 매핑하여 while 루프 구문에서이 메서드를 가져올 수도 있습니다. 큰 따옴표에 대한 요점은 유효한 것이지만 여기서는 상당한 차이를 만들지 않기 때문에 읽기 쉽도록 별도의 echo 문을 유지합니다.

희망이 있습니다.

관련 문제