4000 से अधिक बार Drupal को “is_dir” कहा जाता है?


17

एक बहुत ही महत्वपूर्ण साइट के लोडिंग समय पर परेशानी होने के बाद मैंने XHPROF स्थापित किया और यह देखने के लिए आंकड़ों को देखा कि मैं अपना कोड कहां सुधार सकता हूं।

मुझे कुछ रोचक लगा जो मुझे समझ में नहीं आया। लगभग हर अनुरोध पर 4000 से अधिक बार Drupal कॉल "is_dir" होती है और इसे निष्पादित करने में लगभग 800ms लगते हैं। ऐसा क्यों है और क्या इसमें तेजी लाने का कोई तरीका है?

स्क्रीनशॉट

दो से चार सेकंड के लोडिंग समय तक 800ms एक बड़ा हिस्सा लेते हैं।


क्या आपके पास स्वचालित रजिस्ट्री पुनर्निर्माण चालू है?
mpdonadio

@MPD मैंने स्वत: रजिस्ट्री पुनर्निर्माण को अक्षम कर दिया है।

और यह है कि कैसे Drupal अलग-अलग निर्देशिकाओं में नए मॉड्यूल, विषयों और पुस्तकालयों को पहचानता है!
भाविन जोशी

जवाबों:


19

जब आप किसी मॉड्यूल की स्थापना रद्द करते हैं, तो आपको इसे पहले Drupal मॉड्यूल व्यवस्थापक में अक्षम करना होगा। फिर आपको "अनइंस्टॉल" टैब के माध्यम से इसे अनइंस्टॉल करना चाहिए।

वही थीम के लिए जाता है, पहले थीम व्यवस्थापक में अक्षम करें।

यदि आप उदाहरण के लिए, मॉड्यूल को अक्षम किए बिना फ़ाइल सिस्टम पर मॉड्यूल फ़ोल्डर को हटाते हैं, तो Drupal फ़ाइल सिस्टम में मॉड्यूल की खोज करना जारी रखेगा, जिसके परिणामस्वरूप, अन्य त्रुटियों के बीच, जिस समस्या का आप अनुभव कर रहे हैं।

यह भी देखें: कई मॉड्यूल गायब होने पर मॉड्यूल निर्देशिका को फिर से स्कैन करने से बचें

एमपीडी की टिप्पणी के जवाब में, आपको कुछ ऐसा करने की आवश्यकता होगी

SELECT name, filename FROM system WHERE status = 1;

और आपके फ़ाइल सिस्टम पर मॉड्यूल के साथ क्रॉस संदर्भ। सभी सक्षम मॉड्यूल और थीम भी मौजूद होनी चाहिए।

यहां एक समारोह (थोड़ा अनुकूलित) मार्टिन_ड्रेसडेन भी पोस्ट किया गया है:

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 उत्तर संभव समाधान के साथ वहाँ अद्यतन।
डेविड थॉमस

यदि मैं किसी मॉड्यूल को अक्षम करता हूं, लेकिन इसे अनइंस्टॉल नहीं करता है, तो क्या इस मामले में इसकी स्थापना रद्द करने की तुलना में कोई नुकसान है?
मारियो अवध

मॉड्यूल में सिस्टम टेबल में एक पंक्ति होगी! Un इंस्टॉलेशन db और फाइल सिस्टम में मॉड्यूल से जुड़ी हर चीज को मिटा देता है अगर 'un install' रूटीन ठीक से लिखा हो!
भाविन जोशी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.