Hızlı bir PHP kütüphanesi oluşturmak nasıl?

7 Cevap php

Online oyun için, dosya ve daha sonra klasörlerde temaya göre gruplandırılmış PHP sınıfları ve fonksiyonları ton yazdım. Sonunda, biz şimdi libs çağrı dosyaları bir dizi bizim tüm backend kod (mantık ve DB erişim katmanlar) var ve biz kullanarak bizim GUI (web sayfaları, sunum katmanı) bizim kütüphanelerini dahil * include_once ('pathtolib / file.inc') *.

Sorun kapanım ile tembel olan ve çoğu ifadeleri her web sayfasından, biz herhangi bir libs içerme dosyası her zaman, biz aslında dosyası ile tüm kütüphanelerini, dosya yüklemek ki sonuçta bizim libs dosyası içinde yapılır dahil olmasıdır.

Bu performansı üzerinde önemli bir etkisi vardır. Bu nedenle ne iyi çözüm olurdu?

  • Tüm libs dosyadan ifadeleri ve sadece web sayfalarından gerekli birini çağırmak dahil Kaldır?
  • Başka bir şey mi?

Server klasik LAMP yığınını (PHP5) kullanır.

EDIT: Biz basit fonksiyonları (eski akıl ve kod çoğunluğu) ve sınıfları bir karışımı var. Yani özdevinimli_yükle yeterli olmayacaktır.

7 Cevap

Eğer, gerçekten sert çekirdekli olsun bazı statik analiz yapmak, zaman ve kütüphanelere ihtiyaç tam olarak anlamaya, ve sadece bu eklemek istiyorsanız.

Eğer "include_once" "include" ve kullanırsanız, o da orada bir hız tasarruf biraz var.

Tüm bu Zend Optimizer hakkında Matt cevap doğru para olduğunu söyledi. Eğer isterseniz, Gelişmiş PHP bir opcode önbellek Cache (APC), ve ücretsiz deneyin. Bu PECL depo olmalıdır.

Eğer bir nesne yönelimli bir şekilde programlama yaptıysanız, size onları aramak gibi on-demand kendi kaynak dosyalarından sınıfları yükleyecektir autoload fonksiyonu yararlanabilirler.

Edit: Birinin autoloading adlandırılan iki cevaplar downvoted fark ettim. Biz yanlış mı? __ Özdevinimli_yükle fonksiyonunun havai performans amaçlar için kullanmak için çok yüksek mi? Ben bu teknik hakkında farkında değilim bir şey varsa, ben ne olduğunu bilmek gerçekten ilgi duyarım.

Eğer sınıflar için gereken dosyaları da dahil olmak üzere ihtiyaç rules ne olursa olsun oluşturmak için spl_autoload_register () veya __ autoload () kullanabilirsiniz, ancak autoload kendi performans giderleri tanıttı. Bir php.ini ayarı veya bir apache config kullanılarak tüm gui sayfalara önüne ne olursa olsun kullanmak emin olmak gerekir.

Genel işlevleri ile dosyaları için, I) (bir yarar sınıfta onları sarın ve basit buluyor musunuz ve tüm işlevini yerini değiştirmek öneririm sonra autoload için bu işlevleri size sağlayacak olan) (util :: fonksiyonu ile çağrıları (tekrar, oldukça genel bir işlevi daha yöntemini çağırarak tanıttı bir yük vardır).

Esasen yapılacak en iyi şey, geri kod geçmesi ve sorunları içeren sabitleme ile tasarım borcunu ödemek olduğunu. Bu size en performans fayda verecek, ve bu eAccelerator, Zend Platformu ve APC gibi optimisers en iyi şekilde sağlayacak

Burada yükleme şeyler için örnek bir yöntem dinamik olarak

public static function loadClass($class)
{
	if (class_exists($class, false) ||
		interface_exists($class, false))
	{
		return;
	}

	$file = YOUR_LIB_ROOT.str_replace('_', DIRECTORY_SEPARATOR, $class).'.php';

	if (file_exists($file))
	{
		include_once $file;
		if (!class_exists($class, false) &&
			!interface_exists($class, false))
		{
			throw new Exception('File '.$file.' was loaded but class '.$class.' was not found');
		}
	}
}

Sizin için ne arıyor Automap PECL extension.

Bu temelde bir ön bilgisayarlı harita dosyası yükleme sadece küçük bir yükü ile otomatik yükleme için izin verir. Eğer belirli bir dizin sadece belirli PHP dosyaları çekin biliyorum varsa da alt harita dosyayı bölebilirsiniz.

Bu konuda daha fazla okuyabilirsiniz here.

Ben php kullanılan bu yana bir süre oldu, ama oluyor olmamalıdır Zend Optimizer ya da bu durumda Cache yardım? Php hala yük ve mu her istek için yine her dahil dosyasını derlemek?

Autoloading cevabı ise emin değilim. Bu dosyalar dahil, bunlar muhtemelen dahil sınıfında ihtiyaç vardır, bu yüzden hala yine özdevinimli edilecektir.

PHP her sayfa yük kütüphaneleri ayrıştırmak gerek kalmaması bayt kod önbelleği (ideal APC) kullanın. Autoload kullanarak bir bayt kod önbelleği (Bu konuda daha fazla okuyabilirsiniz here) kullanmanın yararlarını inkâr farkında olun.

Bir profiler kullanın. Eğer önlemler kalmadan optimize çalışırsanız, kör çalışıyoruz.