Düşük diske i / o için optimize PHP Require_once ait?

4 Cevap php

Q1) I'm designing a CMS (-who isn't!) but priority is being given to caching. Literally everything is cached. DB rows, DB id queries, Configuration data, processed data, compiled templates. Currently it has two layers of caching.

Tür ilk apc, eAccelerator, xcache veya memcached gibi bir opcode önbellek veya hafıza önbellek olduğunu. Orada bir giriş bulunamadı değilse o zaman ikincil yavaş önbellek aranır, yani php içerir.

Kodu önbelleklerini içinde veri var_export'd dizi ile bir php dosyasına bir require_oncenin yapıyor aslında daha hızlıdır? Benim geliştirme kutusu (XAMPP 5.3) yukarıda belirtilen programlardan birini kurduktan hatalar atma tutar gibi benim testleri sonuçsuz vardır.

Q2) The CMS has numerous helper classes that are autoloaded on demand instead of loading all files. Mostly each has a require before it so no autoloading needs to take place, however this is not the question. Because a page script can have up to 50/60 helper files included I have a feeling that if the site was under pressure it would buckle because of all the i/o that this incurs. Ignore for the moment that there is output cache in place that would remove the need for what I am about to suggest, and also that opcode caches would render this moot. What I have tried to do is join all the helper files required for the scripts execution in one single file. This is achievable and works well, however it has a side effect of greatly increasing the memory usage dramatically even though technically the same code is being used.

Bu konudaki düşünceleriniz ve görüşleriniz nelerdir?

4 Cevap

APC gibi bir derleyici önbelleği kullanmak sizin yardımcı dosyaları alıp onlar opcode dönüştürüldükten sonra bunları önbelleğe gibi yardımcı olmalıdır. Yani ayrıştırılır ve onlar gerekli her zaman derlenmiş olması gerekmez dosyaları ama şimdiden opcode önbelleğe olmaz anlamına gelecektir.

Eğer sadece önbelleğe (ve neden) istediğiniz hiçbir fikrim yok gibi görünüyor.

Sadece "opcode önbellek" ve "require_oncenin" karşılaştırmak olamaz. Opcode önbellek gerekli kodu yanı sıra diğer kod önbelleğe alır.

Birincisi, sık sık yeterince erişilen ediliyor eğer işletim sistemi bellekteki dosyaları önbelleğe aklınızda tutun.

Ayrıca, kullanmayın require_once. Bu require anlamlı derecede daha yavaştır. Bir autoloader kullanarak değilseniz, size olmalıdır. Elle modern bir php uygulama (çok az istisnalar) dosyaları dahil olmak için hiçbir neden yoktur.

50-60 yardımcı dosyalar deli. Bu birleştirmek için bazı yolu var değil mi? Eğer OutputHelper veya CacheHelper gibi, ilgili yardımcı sınıf hepsini koymak değil mi? Bu şekilde sadece, yine, sizin autoloader dikkat alınmalıdır sınıfı, içermek zorunda. Bu dosya başına bir fonksiyon koyarak gibi bir şey yapıyoruz bana geliyor.

Opcode önbelleğe alma büyük ölçüde bellek kullanımını ve yürütme hızını azaltır, ama require tablolar üzerinde ne etkisi emin değilim.

Ben ryeguy katılıyorum. require_once gerektiren veya her oturum çünkü dahil daha yavaştır içerir ve buna karşı kontrol edin. Senin sadece yapıyor, bir ihtiyaç / sonra require_oncenin ya include_onceyi gerekmez (eğer sınıflar için olmalı) içerir.

Autoloading optimizasyonu için harika. Gerektiğinde sadece sınıflarda yükleyecektir. Yani app 500 sınıfları vardır, ancak belirli bir sayfa / script çalıştırmak için 15 gerekiyorsa. Daha sonra sadece bu 15 yüklü olsun. Hangi güzel.

Eğer herhangi bir büyük çerçeve zirveye alırsanız. Onların autoloaders kullanarak göç olduğunu göreceksiniz. Onlar Zend Framework Version 1 Bu örnekte olduğu gibi son anda require_oncenin kullanmanız.

require_once 'Zend/Db/Exception.php';
throw new Zend_Db_Exception('Adapter name must be specified in a string');

Zend Framework Sürüm 2 yerine otomatik yükleyici kullanıyor olacak. Ben bu hızlı olduğuna inanıyoruz ve ayrıca kod kolay bulunuyor.