PHP dosyası da dahil olmak?

7 Cevap php

Ben aşağıdaki gibi, birden fazla dosya eklemek zorunda bir şartı var bir uygulama geliştiriyorum:

File1.php will include File2.php

File2.php will include File3.php

File3.php will include File4.php

Şimdi, ne bu yapmanın en iyi ve optimize yol olacaktır. I include () ile denedim ama benim sunucu yük grafikleri normal sunucu yükü 3-5 kat daha yüksektir yaklaşık gider gibi onun benim sunucu yavaşlatan düşünüyorum.

Bunlar tüm dosyalar kabarması 50 KB her dosya için etrafında vesiledir. Yani herkes bu sitenin hızını etkilemez ki bana ne bu dosyaları dahil etmek için en iyi seçenek olacaktır önermek lütfen olabilir,

Hangi iyi olacak?

require()

require_once()

include()

include_once()

Herkes başka bir seçeneği varsa VEYA sonra bana söyle,

Teşekkürler

7 Cevap

Dosyalarınızı yeniden gerekir. Tüm gerekli dosyaları içeren bir "common.php" dosyası var. Böyle bir zincir olmamalıdır.

Umarım içeren bir çift sunucu yavaşlatan şüpheliyim. Çoğu web uygulamaları, belki onlarca, PHP dosyaları hatta yüzlerce var. 3 ekstra dosya o kadar başvurunuzu yavaşlatacak hiçbir yolu yoktur.

Eğer emin aynı dosyayı birden çok kez dahil etmeyin yapmak için, include_once / require_once yerine kendi meslektaşlarının kullanmanız gerektiği halde Ayrıca, belirtilen fonksiyonları arasındaki hız farkı, önemsiz .

Arasındaki fark, include () ve (), bir uyarı veya bir ölümcül hata (sırasıyla) olsun ister olduğunu gerektirir. PHP dokümanlar herhangi bir performans farkı söz yok.

Eğer dahil dosyaların içeriğini çoğaltma önlemek istiyorsanız () varyantları _once kullanılması yararlıdır. PHP docs include_once için Gönderen:

bu durumda vb fonksiyon yinelenmesi, değişken değer atanması gibi sorunları önlemek yardımcı olabilir böylece include_once () aynı dosya dahil ve bir komut dosyası belirli bir yürütme sırasında bir kez daha değerlendirilmiş olabilir durumlarda kullanılabilir

Bilmek bir not Jusn. Benim projelerinden biri I (yaklaşık 50) sınıflar sürü için fabrika bir tür uygulamak zorunda kaldı. Ben her sınıf için bir dosya oluşturduk ve bunları kapsayan önemli ölçüde yavaş oldu. Ben bunları bir dosya içine katılmaya karar verdi. Bu çok kayda değer performans incereased.

Ben ... bu kadar neden emin, ama aslında değil birçok girişler olduğunda bu sistem yavaşlaması dosya ile ilgili olduğunu düşünüyorum - çok daha hızlı 50 küçük sonra 1 büyük dosya bulunmaktadır.

require vs require_once issue hakkında Tech Sizin Universe görüşmeler hakkında bir makale. Tanedir olarak, yaparken absolute paths require() Kesinlikle require_once() daha hızlıdır ve include() kesinlikle daha hızlı include_once() daha hızlıdır. Onlar bir kez değiştirilmelidir onların kesin iddiası sans-bir zamanlar aramaları ile aramalar:

First, strace revealed that there were 2848 syscalls to serve a page, down from 4782, (-40%). Next I went to ab for more testing, and found that the average page request time went down to 36.5, from 46.5ms (-22%), and the server was able to serve 27.1 requests per second, up from 21.4 (+%22) .

comment 90017 by Konstantin Rozinov on the require_once page on php.net göre, require() ve require_once() küçük ve arasındaki fark sadece büyük web uygulamaları üzerinde bir fark yaratıyor. Ben şahsen büyük bir tanımını istiyorum, ama biz fikir edinmek düşünüyorum. Yorumcu da "APC opcode önbelleğe alma kullanırken, ikisi arasındaki hız farkı tamamen alakasız olduğunu" iddia etmektedir. Önbelleğe alma "ya da önceki stat sonuçlarını bilir () çağırır, bu yüzden onları tekrarlayarak rahatsız etmez" Bu OS (benim durumumda Ubuntu Linux) ya da Apache da olduğunu gösterir: "gerektiren ve Require_oncenin gerçek uygulanmasına ilişkin . " Bu değer ne için olduğunu atın.

Benim kişisel toplama:

  • If you are going to use require_once, try to use absolute paths.
  • Çeşit opcode önbelleğe kullandığınızdan emin olun.

Beni geliştirmek için çok uygundur gibi birçok dosya içine yarma şeyi tercih ederim, ama sonra sunucuya yüklemeden önce bir dosya içine tüm düzleştirmek.

PHP string ve regex işlevleri kolay süper herhangi bir 'somefile.php' include yerini alacak bir senaryo yazmak için yapmak; o dosyanın (sıyırma gerekirse) gerçek içeriği ile.

Kesinlikle include() veya require() '*_once()' varyantları üzerinde seçin. Muhtemelen opcode cache performansını artırmak için çeşit gerekir.

Cevabınız çoğunlukla, ihtiyaca bağlıdır. Akılda tutulması gereken noktalar şunlardır:

  1. dahil gerektiren daha hızlıdır.
  2. Bir dosya "dahil" ama bulunmazsa eğer, bu bir ölümcül hata yol açmaz. Çalıştırmaya devam edecektir.
  3. Bir dosya "Requried" olduğunu, ancak bulunamadı değilse, betik çalıştırma anında durur.

However, a side note: if your application is including file4 in file3, file3 in file2 and file2 in file1, then I'd say you should reconsider your file organisation. I'm sure you can come up with a better way of organising your code into files.

EK: include ve require arasındaki hız farkı oldukça marjinal olduğunu. Ancak, require_once () () gerektiren anlamlı ağırdır. Aynı şekilde include_once () için ve bunlar arasında ().

, şerefe

JRH