Require_oncenin vs PHP Opcode Caching / Zend Hızlanma ve include_once

2 Cevap php

Ben bizim PHP tabanlı bir uygulama için (ben her zaman bu aynı şey kabul ettik) opcode önbelleğe / Zend Acceleration içine bakıyor bir meslektaşım var. Onun Deneyler biz Require_oncenin ile bizim (büyük) sınıf kitaplıkları dahil eğer bir performans yararı görme değil olduğunuzu göstermek için görünür, ancak include_onceyi kullanırken biz performans yararı görmek DO.

Bu bize hem balık kokuyor, ama ben bizim kriter metodoloji içine kendimi ve benim meslektaşım benden balık kokusu için daha fazla hoşgörü var kontrol etmek için vaktim yok. :)

Hiç kimse böyle bir şey çalıştırmak vardır? Değilse, include_once gelen Require_once geçerek bir performans artışı görünümünü neden olabilecek başka şeyler üzerinde herhangi bir düşünce?

2 Cevap

Bir dosya daha önce dahil edilmemiş ise başlayanlar için, hem de aramalar (Require_once ve include_once) çift kontrol edin.

Yani ikisi de bunu başarmak yolu tüm mevcut yolları dosyayı arayarak ve vb önce karışımı olmamıştır eğer aslında kontrol etmektir.

Arka planda ne olur onlar benzersiz bir tanımlayıcı oluşturmak için Bu Kısaltılmış formdan realpath oluşturarak sonra tüm farklı seçenekler (örneğin çok include_pathdaki ait, vb) değerlendirmek ve olmasıdır. Değil iki - tek ve aynı yolu yoktur.

Bu zaten gezegendeki en hızlı bir süreç değildir ve genellikle PHP ile her isteği olur. Ardından dosya var olmadığını kontrol etmek (o realpath() gelmez ne tür çünkü, realpath) ben realpath dediği oluşturduğunda stat başka bir pahalı bir işlem ekleyin.

Ben yanlışım varsa beni düzeltin, ama APC özellikle bu durum için optimizasyonlar vardır.

Neyse - Şimdi on to the difference Require_oncenin ve bunu içeren zaman Require_once (low-level hataları, vb ayrıştırmak için) dosyasını değerlendirir olduğunu include_once arasında. Bu bir ayrıştırma hatası dahil gizlice asla o yerde yeterince QA varsa kurtulmak ek bir kontroldür.

Aksi bulmak için sadece zor bulunuyor. :-)

(Bir şey düşünün: Siz Require_oncenin ile geliştirmek ve dağıtmak zaman include_once ile tüm aramaları yerini alabilir.)

Bir opcode önbellek - gelince ben tavsiye ederim APC. Daha önce üzerinde stackoverflow konuşuldu. Şahsen, ben / biz, bir süredir kullanıyor am (biz 3 Frontenflerin ve 1 uç ile kabaca 100k ziyaretçi / gün idare) ve biz çok mutluyuz. APC ayrıca Require_once / include_once delilik için optimize edilmiştir.

Persiste çeşit, vb - Oldukça serin bir yan etkisi APC ayrıca bellekte PHP değişkenleri depolamak için izin olmasıdır.

Birkaç ek noktalar:

  1. Bir sürü insan __autoload ile herhangi bir uygulamayı hızlandırmak iddia.
  2. Bir opcode önbellek ile, (döngüler veya kontrol akışında örneğin) koşullu Require_once / include_onceyi kaçının.
  3. Bazı insanlar include_ veya Require_oncenin mutlak / yol / / file.php include_path dayanarak daha hızlı / söylüyorlar.
  4. Sizin include_path yollarının düzeni de önemli.

Umut olur.

I içine yeterince derin bakmadım, ama evet, ben ikisi arasında bir hız farkı gördüğümüz gibi hiçbir şey guarantuee olamaz. Onlar olsa yerine Require_oncenin include_onceyi taşımak için bana yeterince anlamlı asla.

Ben her zaman require_once fazla çalışma sualtı yapmak zorunda çünkü fark olduğu varsayılır. En az bir daha fazla potansiyel hata için hazırlamak ve işlemek ve gerekli dosya yok ne zaman yapmak için çok daha fazla.