Drupal kullanılmayan kancaları ayrıştırmak mı?

5 Cevap php

Geçerli kullanıcı tarafından yüklenen içerik alakasız Drupal ayrıştırma (ve / veya çalışma) kancaları mu?

Örneğin, ben bir modül foo yüklü ve aşağıdaki kanca ile aktif vardı ki:

<?php 
// .. stuff ...    
function foo_menu() {
      $items = array();
      $items['foo/show'] = array(
        'title' => t('Foo!'),
        'page callback' => 'foo_display_all',
        'description' => 'All our foo are belong to you',
        'type' => MENU_NORMAL_ITEM,
      );
      return $items;
    }

    function foo_display_all() {
    // About 100 lines of code
    }
// ... stuff ...

Drupal ayrıştırmak (ve böylece yükleme süresini etkilemez) foo_menu listelenen sayfalar için misiniz? Başka bir deyişle, uzunluğu ve karmaşıklığı foo_display_all nasıl www.example.com / bar yükler etkisi olur?

Burada iki farklı sorular sahip riski, ben nasıl ve neden Drupal yapar ya da daha doğrusu bir evet / hayır cevabı daha ayrıştırmaz ait (bir açıklama ya da bağlantı) bir açıklama için minnettar olacağını söylerim.

5 Cevap

hook_menu özel URL'ler ne yapacağını hakkında Drupal anlatmak için kullanılır, böylece sonucu önbelleğe alınır.

Drupal will only execute the content of the hooks themselves not the entire content of the file they are located in. So when hook menu is invoked in the above example, on the foo_menu() function will be run. You can take a look at the intro text at the Hooks API

Edit: In order for PHP to execute the function, it needs to include the file where it is located. So when Drupal wants to execute a hook, PHP would need to parse the code in that file. That is just how PHP is designed, so haven't got much to do with Drupal.

Bu aynı zamanda modül bir çok kancalar ateş zaman ayrıştırılması için gereken kod miktarını sınırlamak için, inc dosyaları bir sürü yapmak neden nedenidir.

Evet. Diğerleri de belirtildiği gibi, dışarı bölme işler şartlı aşağı kesmek için tek yoldur yüklenen dosyaları içerir. Drupal 6 başlayarak, o ayrı dosyaları dahil içine, () işlevlerinin yanı sıra hook_menu () sayfa geri çağrıları theme_whatever taşımak mümkün oldu. Onlar herhangi bir açık require_once () hokkabazlık yapmadan ihtiyaç olduğunuzda Drupal otomatik olarak yükleyecektir.

hook_menu() ve detaylar için hook_theme() belgelerine bakın.

Bu koşullu içeren bir demet haline APC, bölme şeyler gibi bir opcode önbellek çalıştırıyorsanız eğer aslında o worse dikkat etmek de önemlidir - APC içinde PHP kaynak ayrıştırma ve derleme tüm yapabilirim bir gidip istekleri arasına devam etmektedir. Yarma şeyler üzerinden şartlı sadece yapılıyor ne bağlı olarak derlemek için bunu birden fazla ayrık 'codebases' verir.

Şu anda-under-geliştirme Drupal 7, genel Code registry herhangi bir kanca uygulama ayrı içine bölünmüş sağlar sözlerine ekledi edilmiştir dosyası içerir. Ancak, fonksiyonların iç önbellek ve. Inc yerleri ve anında onları yükleme o yönetmek tepegöz, küçük-ayrıştırma kod temeli performans artışı yiyor. Tek gerçek hesaplaşma sıkı 12-16 meg bellek sınırları ile paylaşılan ana olanlar için bellek kullanımını azalır; Bu değişim makasına verilen Drupal 7 final sürümü kadar hayatta olup olmadığını belirsiz.

The upshot: Drupal 6 ayrı. Inc dosyasına özel sayfalar oluşturmak menü geri çağrıları dışarı bölmek ve bu sayfaların inşa edildiğinde sadece yüklenecektir. Herhangi bir tema fonksiyonları ile aynı yapın. . Ve if you're using an opcode cache APC gibi, ayrı inc dosyaları örgütsel amaçlar için sadece iyi olduğunu unutmayın - onlar size herhangi bir performans artışı vermez.

Drupal her istek için her modül için MODULE.module dosyaları (ve bunlar arasında bir şey) tümünü içerir.

Modülü aramak gerekiyor herhangi bir kanca varsa bilmek Drupal çekirdek için tek yolu dosyayı yüklemek için. Bu zaman ve bellek alacak.

Tüm Firs, ben ikinci, güzel bir uygulama değildir ve üçüncü, ben denemedim, deneyimli bir Drupal geliştiricisi değilim, ama çalışması gerekir

function foo_display_all() {
    include("foo_display_all_body.php");
}

Bu şekilde kanca işlevi gövdesi bir ek php dosyası +, her zaman çözümlenir.

Dördüncüsü, mikro optimizasyon bulunuyor. Ek karmaşıklık (ve 1 dosya okuma) bu ayrıştırma kaydeder daha uzun vadede sizin için daha fazla mal olabilir gibi, kesinlikle gerekli değilse bunu önlemek için daha iyi olabilir.

If you want to make the php code parsing faster, you should use an opcode cache

APC artık önbelleğe görünüyor. Harika bir performans artışı veriyor inc dosyalarının yanı sıra, php,.