Drupal โทร“ is_dir” มากกว่า 4,000 ครั้ง?


17

หลังจากประสบปัญหาในการโหลดเว็บไซต์ที่สำคัญมากฉันได้ติดตั้ง XHPROF และตรวจสอบสถิติเพื่อดูว่าฉันสามารถปรับปรุงรหัสของฉันได้ที่ไหน

ฉันพบสิ่งที่น่าสนใจที่ฉันไม่เข้าใจ Drupal เรียก "is_dir" มากกว่า 4000 ครั้งในเกือบทุกคำขอและใช้เวลาประมาณ 800ms ในการดำเนินการ ทำไมเป็นอย่างนั้นและมีวิธีที่จะเพิ่มความเร็วได้อย่างไร

ภาพหน้าจอ

โดยเวลาในการโหลดสองถึงสี่วินาทีคือ 800ms เป็นส่วนใหญ่


คุณเปิดการสร้างรีจิสทรีอัตโนมัติใหม่หรือไม่
mpdonadio

@MPD ฉันได้ปิดใช้งานการสร้างรีจิสทรีใหม่โดยอัตโนมัติ

และนี่คือวิธีที่ Drupal รู้จักโมดูลธีมและไลบรารีใหม่ในไดเรกทอรีที่ต่างกัน!
Bhavin Joshi

คำตอบ:


19

เมื่อคุณถอนการติดตั้งโมดูลคุณต้องปิดการใช้งานก่อนในผู้ดูแลระบบโมดูล Drupal คุณควรถอนการติดตั้งผ่านแท็บ "ถอนการติดตั้ง" ที่นั่น

เช่นเดียวกันสำหรับธีมปิดใช้งานในผู้ดูแลระบบธีมก่อน

หากคุณลบโฟลเดอร์โมดูลในระบบไฟล์โดยไม่ปิดใช้งานโมดูล Drupal จะค้นหาโมดูลในระบบไฟล์ต่อไปซึ่งอาจส่งผลให้เกิดข้อผิดพลาดอื่น ๆ ในปัญหาที่คุณประสบ

ดูเพิ่มเติม: หลีกเลี่ยงการสแกนไดเรกทอรีโมดูลอีกครั้งเมื่อขาดโมดูลหลายโมดูล

ในการตอบความคิดเห็นของ MPD คุณจะต้องทำอะไรบางอย่างเช่น

SELECT name, filename FROM system WHERE status = 1;

และการอ้างอิงโยงที่มีโมดูลในระบบไฟล์ของคุณ ควรเปิดใช้งานโมดูลและธีมทั้งหมดด้วย

นอกจากนี้ยังมีฟังก์ชั่น (ดัดแปลงเล็กน้อย) Martin_Dresden โพสต์ที่นี่:

https://drupal.org/node/1080330#comment-6520842

function MYMODULE_init() {

    $startingtime = microtime(true); 
    $o = '<p>Checking for dead modules ...</p>';
    $result = db_select('system')
      ->fields('system', array('filename'))
      ->condition('status', '1', '=')
      ->execute();
      $n = 1;
      $m = 0;
    foreach ($result as $row) {
      $path = DRUPAL_ROOT.'/'.$row->filename;
      If (!file_exists($path)) { 
          $o .= "#$n $path<br>";
          $m++;
      }
      $n++;
    }
    $timedif =  round(microtime(true) - $startingtime,3);
    $o .= "Total of $n active modules registered in database. $m dead entries found.<br>";
    $o .= 'Query Time: '.$timedif.' seconds';

    drupal_set_message($o);

}

ที่อาจช่วยแก้ปัญหา


1
มีวิธีการตรวจสอบแถวที่{system}เป็นปัญหาหรือไม่
mpdonadio

ตอบ @MPD อัปเดตพร้อมทางออกที่เป็นไปได้แล้ว
David Thomas

หากฉันปิดการใช้งานโมดูล แต่ไม่ถอนการติดตั้งจะมีข้อเสียในกรณีนี้เมื่อเทียบกับการถอนการติดตั้งหรือไม่
Mario Awad

โมดูลจะมีแถวในตารางระบบ! การถอนการติดตั้งจะทำการล้างทุกอย่างที่เกี่ยวข้องกับโมดูลใน db และในระบบไฟล์ถ้ารูทีน 'un install' ถูกเขียนอย่างถูกต้อง!
Bhavin Joshi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.