Menü
Bedava
kayıt
ev  /  Tavsiye/ Ücretsiz PHP derleyicileri. Bir dizi çevrimiçi derleyici: Kodu doğrudan tarayıcıda çalıştırır ve test ederiz. Yorumlayıcı nasıl çalışır

Ücretsiz PHP derleyicileri. Bir dizi çevrimiçi derleyici: Kodu doğrudan tarayıcıda çalıştırır ve test ederiz. Yorumlayıcı nasıl çalışır

PHP'yi kaynaktan derlemek daha çok Unix benzeri sistemlerde yapılır. Windows işletim sistemi kullananlar büyük ihtimalle PHP'yi ikili paketlerden indirecek ve kuracaktır. Kullanımının daha kolay olduğuna katılmasam da, önceden derlenmiş çözüm açık Unix sistemleri kaynaktan ikili derleme ile gelebilecek bazı faydalar vardır. Her şeyi hesaba katarak:

  • bir şansın var ince ayar derlendiğinde nihai ürün. belki istersin kesin uzantı bu, harici bir kitaplık olarak yüklemek yerine doğrudan ikili olarak derlenir. Veya varsayılan olarak genellikle mevcut olanı kapatmak isteyebilirsiniz.
  • Gerekirse derleme zamanında, belirli bir ortam için performansı artırabilecek bir numara yapabilirsiniz (elbette bu, bu durumda ne yaptığınızı zaten bildiğinizi varsayar. bu yazıyı okumazsın !).
  • Derlenmiş ikili dosyalar yazılım ve kitaplık desteğine sahip eski sürümler üzerine kurulmuşsa ve şimdi yeni bir sistemdeyseniz, derleme, işleri yürütmenin tek yolu olabilir.

Bir uyarı: derleme, özellikle Windows'ta sinir bozucu olabilir! Derleme ortamının doğru şekilde kurulduğundan emin olmalı, derleyiciyi ve diğer derleme araçlarını beklendiği gibi nasıl kullanacağınızı öğrenmeli ve tüm bağımlılık kitaplıklarını karşılamalısınız. Umarız bu makale, bu engellerin birçoğunun üstesinden gelmek için attığınız ilk adımdır.

Yapı ortamını ayarlama

PHP C ile yazılmıştır ve bu nedenle kaynaktan PHP oluşturacaksanız bir C derleyicisi gereklidir. C ++, C'nin süper bir paketidir, bu nedenle iyi bir C ++ derleyicisi C kodunu derleyebilmelidir ve bu her zaman böyle olmasa da. Windows için Visual Microsoft, C++ Express (daha sonra VC + + olarak adlandırılacaktır) Microsoft web sitesinde ücretsiz olarak mevcuttur. 2010 baskısı kullanıldı.

Bir derleyici sürümü seçerken PHP'yi nasıl çalıştıracağınızı aklınızda bulundurmalısınız. Resmi olarak derlenmiş Apache ikili dosyalarından mod_php ile çalışmanız gerekiyorsa ve PHP'yi Visual Studio 6 kullanarak derlemek istiyorsanız, çünkü bu Apache derleme sürümüdür. Modül, bu durumda msvcrt.dll olan Apache ile aynı çalışma zamanı kitaplığını hedeflemelidir. Apache'yi de kaynaktan oluşturuyorsanız veya PHP'yi FastCGI veya CLI olarak çalıştırmayı düşünüyorsanız, bu bir sorun değildir ve 2010 iyi çalışacaktır.

Ayrıca yüklemeniz gerekir yazılım Windows Geliştirme Seti (sonra SDK). SDK bize aşağıdakiler için önemli başlık dosyaları verir: Windows platformları başarılı bir şekilde derlememiz gereken. Bu da sürüm 7.1 kullanıldı.

Derleyiciyi ve ardından SDK'yı yükleyin. Her ikisinde de tüm süreç boyunca size rehberlik eden bir grafik kurulum sihirbazı olduğu için kurulumdan bahsetmeyeceğim.

Derlemek için çalışan bir derleyiciniz olduğunda, Windows.php.net adresinden Binary Tools ve Bilinen Paketleri indirin. İkili araçlar paketi (20110915 arşivini kullanıyorum) re2c, bizon gibi geliştirme araçlarını ve PHP'yi oluşturmak için ihtiyaç duyacağınız bazı ek komutları içerir. İyi bilinen bir paket (derleyeceğim PHP sürümüyle aynı olduğu için 5.4 arşivini kullanıyorum) gereken minimum başlıkları ve kitaplık bağımlılıklarını içerir, örneğin zlib.h.

Muhtemelen PHP kaynağını windows.php.net'ten de indirmek istediğinizi söylemeye gerek yok. Bu yazının yazıldığı sırada mevcut sürüm PHP 5.4.6'dır, bu nedenle örneklerde bu sürüm numarasını göreceksiniz.

oluşturmak iyi bir fikirdir. çalışma alanı, kaynak kodunu paketinden çıkarabilir ve sisteminizin geri kalanını etkilemeyecek şekilde derleyebilirsiniz. Çalışma dizininiz olarak hizmet edecek bir C: \ PHP-Dev klasörü oluşturun ve ardından ikili arşivi ve araçları bu klasöre açın.

Ardından, C: \ PHP-Dev'deki PHP kaynağı olan arşiv içeriğini paketinden çıkarın ve artık kaynak klasörünüzde php5.4 var ve ardından deps arşivini deps kardeş klasörüne çıkartın. Dizin yapısı şöyle görünmelidir:

SDK ile birlikte yüklenen Windows SDK Komut İstemini açın (Başlat => Microsoft Windows SDK => Windows SDK Komut İstemi) ve aşağıdaki komutları yürütün:

Setenv / yayın / xp / x86 cd C: \ PHP-Dev bin \ phpsdk_setvars.bat

Çok fazla ayar yaptığı için tercihen normal cmd.exe konsolundan önce komut satırı SDK konsolunu kullanmak Ortam Değişkenleri derlemeye özgü kaynak kodu... Daha sonra komut derlemeleri de bu konsolda yapılmalıdır.

setenv, ortam için bazı yapı özelliklerini ayarlar, bu durumda hedef Windows XP 32-bit yapı ortamı ayarlanır. Macera arıyorsanız / x64 ile deneyebilir ve inşa edebilirsiniz. çeşitli tanımı Windows sürümleri/ Vista gibi, büyük olasılıkla betiklerdeki bazı garip tanımlar nedeniyle çıkış sorunları (PHP hala XP uyumlu olmak istiyor). Ne yaptığınızı gerçekten bilmiyorsanız, yukarıda kullandığım önerilen değerlere bağlı kalmak muhtemelen en güvenlisidir.

phpsdk_setvars.bat betiği bazı eklere gidiyor Ortam Değişkenleri, derleme işlemi ikili araçları bulabildi.

Tüm bu ayar değişkenlerinin yalnızca geçici konsol oturumları olduğunu unutmayın. Daha sonra derlemeye geri dönmek için her şeyi hızlı bir şekilde kapatırsanız, komutu tekrar çalıştırmanız gerekecek ve aksi takdirde aşağıdaki gibi hatalar alacaksınız, daha sonra yapılandırmayı çalıştırdığınızda devam edemezsiniz:

bison.exe denetleniyor... HATA: bizon gerekli

Doğru yapı ortamına, gerekli kaynaklara sahip olduğunuzdan ve hiçbir bağımlılığa sahip olmadığınızdan emin olmak, sürecin en zor kısmıdır. Şimdi ortamınız kaynaktan kuruldu ve bağımlılıklar yerinde, derleme zamanı!

PHP'yi Derlemek

SDK komut satırından PHP kaynak klasörüne gidin ve buildconf'u çalıştırın. Komut, derleme sürecini kontrol etmek için Makefile tarafından oluşturulacak yapılandırma dosyalarının oluşturulmasından sorumludur.

buildconf tamamlandıktan sonra (yalnızca bir saniye sürer), configure --help - komutunu çalıştırın ve etkinleştirmek / devre dışı bırakmak istediğiniz özelliklerin yardımına bakın ve ardından istediğiniz seçenekle yeniden yapılandırmayı çalıştırın. Geçiş yapmadan önce hafta sonunu kontrol etmek iyi bir fikirdir, çünkü gerekli bağımlılıklardan herhangi biri mevcut değilse sizi uyaracaktır. Bu olursa, bağımlılıkları yükleyebilir ve kurulumu yeniden çalıştırabilir veya çağrıyı, bunlara ihtiyaç duyan uzantıları devre dışı bırakacak şekilde ayarlayabilirsiniz.

Son olarak, derlemeye başlamak için NMAKE'i çalıştırın.

Cd C: \ PHP-Dev \ php5.4 buildconf yapılandırmak nmake nmake testi

Herhangi bir yapılandırma veya NMAKE başarısız olursa, sorun iki şeyden biridir: Birincisi, ortam doğru şekilde yapılandırılmamış, ikincisi, harici kitaplıklara bağlı bir özelliği etkinleştirmişsiniz ve kitaplıklar sisteminizde yüklü değil. Ortamı yukarıdaki talimatlara göre oluşturduğunuzu ve çerçevede gerekli olabilecek ek kitaplıkların yapılandırıldığını iki kez kontrol edin.

İlk NMAKE derleme işlemi tamamlandığında yenilerini bulacaksınız. PHP dosyaları Release_TS klasöründe. NMAKE testi, her şeyin olması gerektiği gibi çalıştığından emin olmak için yeni çift kovalı hataları çalıştırır. NMAKE testlerinin sonuçları, PHP'yi geliştirmelerine bağlı olan QA ekibine gönderilir, bu nedenle başlaması birkaç dakika sürebilir, bu çok önemli.

Bu noktada, ek NMAKE ek bileşeni adımından da yararlanabilirsiniz. ZIP arşivleri ve kopyalanacak ikili dosyalar.

Uzantıları derleme

PHP uzantılarını derlemenin iki yolu vardır: statik ve dinamik olarak. Statik olarak derlenmiş bir uzantı bir PHP ikili dosyasına derlenirken, dinamik olarak derlenmiş bir uzantı daha sonra bir php.ini dosyası aracılığıyla yüklenebilen ayrı bir DLL dosyasıdır. Uzantılar genellikle DLL'nin durumuna göre derlenir, ancak statik derlemenin de bazı avantajları olsa da, sonuçta ihtiyaçlarınıza bağlıdır.

PHP uzantılarını Windows'ta derlemek için uzantı kaynak klasörünü PHP kaynak dizininiz olan ext klasörüne çıkarın. Ardından, buildconf - force komutunu çalıştırarak ve uzantıyı etkinleştirmek için uygun adımları kullanarak PHP'yi yeniden derleyerek komut dosyasını yeniden yapılandırın.

Örnek olarak AOP eklentisini statik olarak derleyelim. Kaynak kodunu PECL'den indirin ve ext içindeki bir klasöre açın. Ardından şu adımları izleyin:

Cd C: \ PHP-Dev \ php5.4 buildconf --force configuration --enable-aop nmake

--force seçeneğiyle, buildconf onu yapılandırma komut dosyasını geri yüklemeye zorlar. Ardından, configure --help komutunu çalıştırın ve çıktıda yeni uzantıyı etkinleştirmek için bir seçenek görmelisiniz. Bu durumda, --enable-AOP olur.

nmake bittiğinde, AOP ile PHP ile yeni oluşturulmuş bir PHP ikili dosyasına ihtiyacınız olacak.

Uzantılar PHP'de hazırlanmamış bir DLL olarak mevcut olacak, yukarıdakiyle aynı adımları takip edebilirsiniz, ancak "paylaşılan" değeri özelleştirilecek değer olarak tanımlayın, seçenek izin verir.

Buildconf --force configuration --enable-aop = paylaşılan

Sonuç olarak DLL, PHP ikili dosyasıyla birlikte Release_TS klasöründe olacak, derleme sona erecek, bu durumda adı php_aop.dll olacaktır.

not

Windows'ta derleme yapmak, özellikle de uzantılar söz konusu olduğunda, hala biraz zor. Özellikle daha sonra PHP'yi değiştirmek istiyorsanız, kaynaktan derleme yapabilmek iyi bir beceridir.

Makale sizler için hazırlandı, site ekibi
Orijinal makale:
Çeviren: Victor Klim

Alexey Romanenko: Benim adım Alexey Romanenko, RBC için çalışıyorum. Bu konuşmanın konusu biraz tartışmalı. Görünüşe göre, her şey böyle çalışıyor gibi göründüğünde neden PHP betiklerini derleyelim?

Muhtemelen asıl soru şudur: "Neden?" Genel olarak bu sunumun amacı, böyle bir derlemenin gerekli olup olmadığını, gerekiyorsa neden, hangi biçimde ve kime yapıldığını anlamaya çalışmaktır.

PHP derleyici nedir?

İlk olarak, bir PHP derleyicisinin ne olduğuna dair küçük bir genel bakış. Size nasıl çalıştığını, ne olduğunu ve nasıl hızlandırabileceğinizi anlatacağım.

İlk işlevsel modül, çeşitli istemcilerden (Apache, bir tür CGI sunucusu (Ortak Ağ Geçidi Arayüzü) ve diğerleri) PHP'ye erişmek için bir arayüz sağlayan SAPI (Sunucu API'si) olarak adlandırılır. PHP'yi herhangi bir uygulamaya yerleştirmenize izin veren gömülü SAPI de vardır.

İkinci ana kısım, istekleri işleyen, tüm ağları uygulayan PHP Core'dur. dosya sistemi ve komut dosyalarının kendilerini ayrıştırarak.

Üçüncü küresel kısım, betiklerimizi bir bayt kodunda derleyen, onu sanal makinesinde yürüten ve bellek yönetimiyle ilgilenen (kapsamlı ayırıcıları uygular) Zend Engine'dir.

En önemli ve büyük parçalardan biri PHP'de kullandığımızın %99'unu uygulayan Uzantılar modülüdür. Bunlar, bazı kitaplıklar için "sarmalayıcılar" veya işlevsellik veya sınıflar, yerleşik kitaplıklar vb. Kendi uzantılarımızı da yazabiliriz.

Komut dosyasının kendisi nasıl yürütülür?

Öncelikle. Sözcük analizi yapılır - dosya yüklenir, ayrıştırılır, bu dosyanın kümesindeki tüm semboller, daha sonra birlikte çalıştığımız belirli bir simge kümesine çevrilir.

Ayrıştırma aşaması bu belirteçleri ayrıştırır. Bu analize dayanarak, bayt kodunun daha sonra oluşturulacağı belirli bir gramer yapısı derlenir.

Sonunda, Zend Engine onu yürütür. Sonuç müşteriye geri gönderilir.

Yüksek yüklerden bahsediyoruz. Bu eylem planını her seferinde onlarla yeniden üretirseniz, her şey çok yavaş çalışacaktır. Tercümanımıza aynı anda birkaç yüz veya binlerce istek geldiğinde, hız orada değildir.

Ama çözümler var. Uzun zamandır biliniyorlar.

Hızlanma nasıl sağlanır?

En basit, en ucuz ve en çok denenmiş çözüm, bayt kodu önbelleğe almadır. Ayrıştırma ve ayrıştırma aşamalarından geçmek yerine, sadece bayt kodumuzu önbelleğe alıyoruz. Bunun için özel uzantılar vardır - bunlar PHP ile çalışan herkes tarafından iyi bilinir - bunlar APC, eAccelerator, Xcache ve benzerleridir. Zend Engine sadece bayt kodunu çalıştırır.

İkinci seçenek, darboğazları belirleyen kod profillemedir. Bir şeyi PHP uzantıları olarak yeniden yazabiliriz (bir C/C++ uzantısı olacak) onu derleyip modüller olarak kullanabiliriz.

Üçüncü seçenek daha geneldir - PHP'yi unutun ve her şeyi yeniden yazın. Genel olarak, varyantın yaşam hakkı vardır, ancak yalnızca yeterli php kodunun olmadığı durumlarda. Büyük, büyük projelerde (veya oldukça uzun süredir var olanlarda), genellikle çok fazla birikir ve her şeyi yeniden yazmak uzun zaman alır. İş gereksinimleri bunu yapmanıza izin vermez. Genel olarak, örneğin bir ön uç sunucu için PHP'de bir şeyler yazmak çok uzun değildir, çünkü basit bir dildir. Düşük seviyeli dillerde daha uzun süren şeyleri hızlı bir şekilde yapmanızı sağlar.

Orada Alternatif seçenek son zamanlarda yaygınlaşan PHP'yi bir yerde, daha hızlı bir şeye derlemek.

Bir şeyler derleyelim mi?

"Derleme" kelimesiyle, PHP betik kodunun başka bir şeye, başka bir koda çevrilmesini kastediyorum.

Bu durumda, iki tip olabilir.

Yerel kod, fiziksel bir makinede yürütülebilen bir tür ikili dosyadır.

Yerel olmayan kod. Başka bir sanal makinede, örneğin JVM'de yürütülebilecek bazı bayt kodlarını derlemek mümkündür.

PHP'den yerel kodu derlemek için ne kullanılabilir?

Roadsend derleyicisi. Onun devamı Raven'dır. Ayrıca PHC var (bu PHP Açık Kaynak derleyicisidir). Son zamanlarda HipHop (Facebook) da ortaya çıktı.

Yerel olmayan kod için neler yapabileceğinize dair hızlı bir genel bakış burada. Bildiğim kadarıyla 3 çalışma seçeneği var. Bu, Java için bayt kodu oluşturma ve .Net için bayt kodu oluşturma: Quercus, Project Zero, Phalanger. Yerel olmayan koda derlemeyi dikkate almayacağım, çünkü onu kullanmıyoruz. Yerel kodu derlemeye geri dönelim.

Bence en eski derleyici Roadsend. 2002 yılında oldukça uzun zaman önce geliştirilmeye başlandı. Bu başlangıçta ticari bir uygulamaydı. Kapatıldı, sadece 2007'de Açık Kaynak olarak yayınlandı. çok var karmaşık şema derleme: Scheme dili için bir Bigloo derleyicisi kullanılır, ardından yerel kod oluşturulur. Bu derleyici Zend Engine kullanmaz.

Ayrı bir yürütülebilir ikili dosya oluşturabilir veya Apache için bir modül oluşturabiliriz. Bir web sunucusu görevi görecek bir ikili dosya oluşturmak da mümkündür. Ama çalışmıyor. Neden bilmiyorum ama bende hiç işe yaramıyor.

Bildiğim kadarıyla Roadsend şu anda üzerinde çalışılmıyor. Tamamen C++ ile yeniden yazılan Raven projesi olarak yeniden doğdu. Derleme olarak, kod oluşturmak için LLVM'yi kullanır.

Açık şu an her şey çok umut verici görünüyor.

Ama henüz yaratılış aşamasında. Belgelerde bile ikili dosyalar oluşturmayacağımıza dair ipuçları var. Beklemek.

PHC'miz olmasaydı her şey üzücü olurdu. Bir OpenSource derleyicisidir. 2005 yılından beri geliştirilmektedir. Dezavantajlarından biri: gömülü bir SAPI kullanıyor. Java makinesi olan Zend Engine'i terk etmiyoruz. Temel olarak, PHP kodunu PHP uzantı modülü koduna çevirir. Daha sonra derlenir, ancak yürütme işlemi yine Zend Motorunu kullanır.

PHC kullanma örneği

Örneğin, geleneksel derleyiciler gcc ile nasıl çalıştığımıza çok benzer. İlki bir tane ikili dosya olduğunu gösteriyor, ayrıca sadece "C" kodunu da üretebiliriz. Bu kodu oluşturduktan sonra aynı gcc dahili olarak kullanıldığından, optimizasyon ve diğer şeyler için amaçlanan bayrakları kullanabiliriz.

Komut satırında çalışan bir uygulama hakkındaydı.

Bir web uygulamasını başlatmak için birkaç adım gerçekleştirmeniz gerekir, bu oldukça zordur. İlk önce bir uzantı (Uzantı) oluşturmanız, ardından kodu derlemeniz ve ardından bir şekilde (dinamik veya statik olarak) bağlamanız gerekir.

PHC'nin temel faydaları

Aslında aynı PHP'yi kullanıyoruz, tam uyumluluğumuz var. Diğer tüm uzantılar desteklenir. Derlediğimiz her şeyi kullanıyoruz. Oldukça iyi belgeler.

Bu arada, PHC'nin ek bonuslarından biri, XML'in nasıl oluşturulduğuna bağlı olarak betiğimizin XML çalışmasını oluşturabilmenizdir, bazen bu yararlı olabilir.

eksiler

Bence bu eksik bir ikili dosya çünkü hala Zend Engine'e bağımlı. Web projelerini bağlamak açısından da bazı zorluklar var.

Ana fikir

Muhtemelen, Facebook'tan bir çözüm olan HipHop ortaya çıkmasaydı bu konuşma olmayacaktı. Yaratıcıları ayrıca büyük miktarda PHP kodu biriktirdi ve uzun süre onunla ne yapacağını düşündü.

Anladığım kadarıyla, her şeyi yeniden yazma seçenekleri reddedildikten sonra, bir çevirmen yazılmasına karar verildi (bu durumda, C++ koduna). Proje nispeten genç; resmen bu yılın Şubat ayında yayınlandı. PHP kodu, C++ koduna çevrilir ve ardından işletim sisteminizin standart araçları kullanılarak oluşturulur. Doğru, şimdiye kadar yalnızca Linux işletim sistemi destekleniyor.

Daha dün, bir Facebook temsilcisine bu kararı sordum. Şu anda PHP kodunun %100'ünün HipHop aracılığıyla derlendiğini söyledi. V saf formu kod PHP yorumlayıcısı aracılığıyla çalışmıyor. Yine, yaratıcılar işlemci yükünde önemli bir azalma olduğunu açıkladılar.

HipHop'un ana işlevi

Doğrudan komut satırında çalıştırılabilen ikili dosyayı oluşturur. Akış web sunucusu olarak başlatmak için böyle bir seçenek var. Ayrı bir yerleşik hata ayıklayıcı da vardır. Komut dosyalarında hem yerel hem de uzaktan hata ayıklayabilirler (bir sunucu olarak çalışır).

Oluşturma süreci oldukça önemsizdir. Bir açıklama var, ancak her yerde toplanmadı. Şu anda, dediğim gibi, her şey Linux altında toplanıyor, ayrıca her şey başlangıçta 64 bit için "keskinleştirildi". Şimdi deneysel olarak 32 bit destekleniyor olsa da. Ama biraz toplamayı ve düzeltmeyi başardım - genel olarak, tüm bunları yaptı, çünkü varsayılan olarak olmayacak.

Ek olarak, kendi libcore sürümlerine sahipler ve bence, yamalanması gereken birkaç kitaplık var. Genel olarak, oluşturma süreci o kadar basit değildir.

Derlemeden sonraki çıktıda, PHP kodumuzu C++'a çeviren belirli bir hphp dosyası alıyoruz. Bayraklara bakarsak, bunlardan epeyce var. Burada ihtiyaç duyabileceğiniz birkaç temel öğeyi vurguladım.

Olarak yapılandırma dosyası(config) çeşitli direktifler ayarlayarak HDF dosyasını kullanabiliriz. Hataların seviyesini ve diğer şeyleri orada ayarlayabiliriz (HDF, yapılandırılmış bir biçimde olan her şeydir). Ayrıca, yapılandırmayı veritabanından alabilir veya doğrudan komut satırında kullanabiliriz.

Derleme sırasında kayıt seviyesini belirledik: tüm hataları göster veya ayrıca uyarıları göster, Ek bilgi veya genellikle olan her şeyin tam bir kaydını tutun.

Çok kullanışlı bir yönerge, derlemek istediğimiz komut dosyalarının bir listesini belirtmemize izin veren input_list = FILE'dir. Tembel bağlama yönergesinden de bahsetmeye değer. Tüm proje dosyalarını - derlenecek olanları belirtebiliriz.

Bir PHP betiğinin derlenmesini başlatma örneği

Üçüncü seviye günlük kaydı kuruldu, burada oldukça Genel bilgi zamanla, ne kadar sürdüğünü görebilirsin. Aslında senaryo oldukça basit. Bu her zamanki "Merhaba, Dünya", sadece bir ekran görüntüsü aldım.

"En ağır" dosya bizim "program" ikili dosyamızdır, boyutu 28 MB'dir. Aslında, "Merhaba, Dünya"mız 28 MB ağırlığındadır. Belirtmek isterim ki standart "Yankı" dışında Merhaba, Dünya! "Line, bu ikili dosya çok daha fazlasını içerir. Tam teşekküllü bir web sunucusu, yönetim için tam teşekküllü bir sunucudur.

Ne elde ederiz?

C++'da bir satır "echo" Hello, World "den oluşan bir işlevi yerine getiren "Merhaba ..." var. Ayrıca, bir çok üçüncü taraf şeyler yükleniyor. Gördüğümüz gibi, bu bir tam teşekküllü dosya C++.

Bu sonuçta ortaya çıkan programdır. Zaten farklı konfigürasyonlar için epeyce farklı anahtar içeriyor, ancak ben sadece birkaçından bahsedeceğim.

Bu --mode, bu programımızın başlatma modudur. Doğrudan (komut satırından) veya bir web sunucusu veya tam teşekküllü bir arka plan programı modunda çalıştırabiliriz. Birkaç seçenek daha var, ancak bunlar alakasız.

Aynı formatta kullanılan config. Çok fazla olduğu için direktif vermedim. Belgeler HipHop'a dahildir. Wiki sitesinde yoktur, ancak her şeyin açıkça tanımlandığı dağıtım kitiyle birlikte belgeler sağlanır. Açıklamanın bu kadar ayrıntılı olmasını beklemiyordum bile.Çözümün oldukça esnek bir şekilde yapılandırılmasına izin veriyor.

Sunucu modunda çalıştırmak için bir bağlantı noktası belirtebiliriz. Yönetim için, sunucuyu yönetmenize izin veren bazı istekleri koyabileceğiniz ayrı bir bağlantı noktası kullanılır. Çalışan bir hata ayıklama sunucumuz varsa, hata ayıklama için "bağlanacağımız" ana bilgisayarı ve bağlantı noktasını belirtiriz.

Başlatma örneği

Örneğin 9999 numaralı bağlantı noktasını yayın için belirledik.Basit http istekleri yaparak ya istatistik alabilir ya da bir şekilde sunucuyu yönetebilir ya da bazı ek bilgiler alabiliriz. Genel olarak, bu çok uygundur.

Durum seçeneği

Sunucu durumunu çeşitli yerleşik biçimlerde (xml, json, html) ayarlamak mümkündür. Aslında, sunucu ana işleminin kendisi ve işleyiciler - istekleri işleyen iş parçacıkları - hakkında bilgi sağlanır.

Ek istatistikler

Aslında, birçok istatistik sağlanmaktadır. HipHop yerel olarak memcache ve SQL ile MySQL gibi çalıştığı için, detaylı bilgi onunla gerçekleştirilen tüm işlemler için.

Bellekle çalışmanın tam istatistikleri

çok var kullanışlı özellik- Uygulama İstatistikleri. kullanma ilave fonksiyonlar PHP'de HipHop'un kendisi, betiklerimize istatistikler yazabilir ve daha sonra http'ye düzenli erişim elde ederiz.

hata ayıklama

Dediğim gibi, komut dosyalarında hata ayıklamak için yerleşik "hata ayıklamayı" kullanmak mümkündür. Bu çok uygundur, çünkü hphpi yorumlayıcısı derlediğimize benzer şekilde çalışır. Standart PHP'de yürütüldüklerinde ve derlenmiş olanlardan bazı verileri kullanırken komut dosyalarının "davranışında" bir fark vardır. Derlenenlerde hata ayıklamak için Facebook ayrı bir yorumlayıcı yazdı.

İlk durumda, kodu “-f” tuşuyla çalıştırın ve dosyanın nasıl davrandığını görün; tüm çıktılar stdout'a gider. Veya hata ayıklama modunda çalıştırabilir ve etkileşimli hata ayıklayıcıya girebiliriz. Standart GDB'ye çok benzer: ayrıca kesme noktaları ayarlayabilir, çalıştırabilir, değişken değerleri girebilir, takip edebilir ve daha fazlasını yapabilirsiniz.

Biri ek fırsatlar

Derlemeden sonra çıkan bir programımız var. RPC sunucusu olarak kullanılabilir. İstekleri http üzerinden başlatıyoruz ve params işlevini çağırarak parametreyi ya json dizisi olarak ya da ayrı bir parametre olarak geçirebiliyoruz. Bu işlevlerin sonuçlarını döndüren json'u döndüreceğiz. Çok kullanışlıdır - gerekli işlevsellik en başından beri yerleşiktir.

HipHop'ın Eksileri

eval(), create_function() ve preg_replace() with /e gibi dil yapıları ve işlevleri, tümü eval() ile benzer olsalar da şu anda HipHop'ta desteklenmemektedir. Doğru, son sürümlerde, bence eval () öğesini config aracılığıyla etkinleştirebilirsiniz. Ancak bunu yapmanız önerilmez. Genel olarak, eval() kullanmak kötüdür.

HipHop'un başlıca avantajları

Tabii ki, ana artı Facebook'tan destek. Çalışıyor ve oldukça aktif bir şekilde gelişiyor. Bu proje etrafında bir geliştiriciler topluluğu gelişiyor. Tamamen yeni bir PHP uygulaması yazılmıştır.

Dediğim gibi artı, yerel kodun üretilmesidir. İşlemciyi kullanma maliyetini düşürerek iddia edilen performans kazancı (testler bunu doğrular).

Konfigürasyonunda oldukça esnektir. Özelleştirme için epeyce seçenek olduğu için hoş bir şekilde şaşırdım. Bunun projenin gerçekten işe yaramasından kaynaklandığını düşünüyorum. Kullanılan her şey artırılır.

Bahsettiğim gibi, HipHop epeyce ek özellikler sunar. Bunların arasında RPC sunucusu, yönetim, çeşitli istatistikler ve çok daha fazlası olarak kullanın. Bu arada, diğer dillerle çalışmak için bir API de var.

Bu çözüm için oldukça iyi belgeler yazılmıştır. Diğer bir avantajı ise üretimde gerçekten kullanıma hazır bir çözüm (örnek - Facebook).

eksiler

Ana dezavantaj, şu anda oldukça sınırlı sayıda modülün desteklenmesidir. Örneğin, bir veritabanı ile çalışırken, fonksiyonları sadece MySQL ile çalışmak için kullanabiliriz. Burada PostgreSQL desteği yoktur.

Daha önce bahsettiğim montajın karmaşıklığı gibi bir an da var. 32 bit sistemlerde derleme sorunları var. Ama bu, sanırım, yakında düzeltilecek. Şimdiye kadar sadece PHP 5.2'den derleme kullanılmıştır. Sürüm 5.3 henüz desteklenmemektedir, ancak söz verildiği gibi desteklenecektir.

Genel olarak derlemeden ve özel olarak HipHop'tan ne beklenmemelidir?

Derleme, veritabanına karşı yavaş SQL sorgularınızı hiçbir şekilde hızlandırmaz. Eğer darboğaz- bu bir temel, sonra derleyin veya derlemeyin, bundan hiçbir anlamı olmayacak.

Derleme, yükleme statiğini hızlandırmaz, yalnızca dinamikleri hızlandırır. Hata ayıklamayı çok daha zor hale getirir. Muhtemelen, çoğu kişi PHP'de her şeyin oldukça basit bir şekilde hatalarının ayıklanmasına alışkındır. Derlendiğinde, bu artık çalışmayacak. Her ne kadar belirttiğim gibi, Facebook bu süreci olabildiğince kolaylaştırmış olsa da, onsuz her seferinde derlemek daha da zor olurdu.

Bunun tüm sorunlarınızı çözecek bir tür "gümüş kurşun" olmasını beklemeyin. Aslında, derleme oldukça dar bir dizi sorunu çözer. Eğer öyleyse, o zaman yardımcı olabilir.

Derleme hangi sorunları çözer?

CPU üzerindeki yükü azaltır, çünkü çok sayıda istekle PHP ile aktif olarak çalışırken, üzerindeki yük oldukça artar. Tabii ki, bazı testler yapmak istiyorum.

Test yapmak

İlk test (en basit olanı), tamamlanması uzun zaman alan oldukça pahalı bir işlemdir. Testlerde bazı dış kaynakları kullanarak istekte bulunmaya değil, kendimi soyutlamaya çalıştım.

Yük tamamen işlemciye düşüyor. Test, HipHop'un herkesi "kazandığını" gösterdi: standart PHP derleyicisinden neredeyse bir buçuk kat daha hızlı çalışıyor. PHC bu testi çok yavaş geçti.

İkinci performans testi için SVN'den indirilebilen resmi PHP betiğini aldım. Sıralama, atama, toplama - matematik açısından oldukça pahalı işlemler gerçekleştiren bir dizi işlevi yerine getirir.

HipHop yine öndeydi. Üstelik standart PHP ile zaman farkı yaklaşık 3 katıdır. PHC burada daha iyi performans gösterdi, ancak HipHop'tan yaklaşık iki kat daha kötü.

Çoğunlukla PHP, http isteklerini işleyen akışlar için kullanılır - bu akılda tutulması gereken bir şeydir.

Birçok standart konfigürasyonlar(PHP'li Apache, fpm-php'li Nginx ve kod önbelleğe alma için takılabilir bir APC). Beşinci seçenek HipHop'tur.

Dürüst olmak gerekirse, testleri bir sunucuda değil, bir dizüstü bilgisayarda çalıştırdım. Rakamlar elbette tam olarak gerçeğe uymayabilir ancak bu durumda sonuçlar normaldir. Yük arttıkça istek sayısı ve toplam istek sayısının aynı anda arttığını belirtmekte fayda var. Sırada RPS var. Standart sayfa test edildi, bunlardan 10 tanesi basit kapanımlar... Temel olarak, bu PHP'yi bir yorumlayıcı olarak test ediyor.

Seyirciden gelen soru: Bir hücredeki sayılar nelerdir - saniye?

Alexey Romanenko: Bu fps'dir.

Buradan, eşzamanlı istek sayısındaki artışla HipHop'un çok iyi davrandığı sonucuna varabiliriz.

APC kullanımının standart bir uygulama olduğu görülebilir. Örneğin Apache olarak yaklaşık 2 kat performans artışı eklediğini gösterir. Nginx'te de bu var. Ancak Nginx'in yavaş olması bu paketin daha kötü olduğu anlamına gelmiyor. Sadece belirli bir test. Burada gerçekten test edersek, Apache yavaş isteklerde "ölecektir".

Muhtemelen, ihtiyacımız olup olmadığını anlamak istiyorum.

Derlemeyi ne zaman düşünmelisiniz?

Büyük olasılıkla, darboğazımızın CPU olduğunu gördüğümüzde bu gereklidir. PHP'yi standart yorumlayıcı olarak kullanarak CPU "karşılaşırsak", muhtemelen projenin bir bölümünün derlenebileceğini düşünmeye değer.

Uygulamanızın çalışması için özerkliğe ihtiyaç duyduğunuz bazı durumlarda, bu yöntemin işe yaraması pek olası değildir.

Sunucu sayısını azaltmak. Çok sayıda sunucu olduğunda, performansı yarıya indirerek, kabaca konuşursak, sayıyı da yarıya indiririz. Tek sunucu olduğunda anlamsızdır, ancak 100-200 olduğunda muhtemelen mantıklıdır.

Facebook'un HipHop'u kullanmaya başlamasının ana nedeni, yeniden yazılamayan (veya hiç kimsenin olmaması veya sadece pahalı olması) büyük miktarda PHP kodunun bulunmasıdır. Verimlilikte 2 kat artış zaten iyi bir şey.

Muhtemelen her şey. Soruları bekliyorum.

Sorular ve cevaplar

Seyirciden gelen soru: Merhaba. Facebook dışında başka başarılı Hiphop uygulamalarınız varsa lütfen söyleyin. Örneğin, RBC web sitesini HipHop'a aktarmak ister misiniz? Alexey Romanenko:İkincisinden başlayacağım. RBC web sitesini tercüme etmek zordur. Başarılı uygulama hakkında. PHP Unit'i kendim derledim, başarıyla derlendi. Ayrıca bildiğim kadarıyla PHP Bunty board başarıyla derleniyor. Aslında, bir dizi kuruluş zaten derleme kullanıyor. Daha ileri testler, bu projenin kullanımının ne kadar haklı olacağını gösterecektir. Seyirciden gelen soru: Bunu kullanan bir kuruluşa örnek verebilir misiniz? Alexey Romanenko: Dürüst olmak gerekirse, şimdi söylemeyeceğim ama burası Batı. Bildiğim kadarıyla burada kimse kullanmıyor. Seyirciden gelen soru: Bahsettiğiniz bazı özellikler için destek eksikliği dışında çalışma zamanında fark nedir. Canlı bir projeyi çevirmek ne kadar tehlikeli? Alexey Romanenko: Aradaki fark, derlenmiş herhangi bir programın çökebilmesidir. Belki de henüz tespit edilmemiş bazı sorunlar ortaya çıkacaktır. Aslında, PHP'nin kendi "davranışında" bir takım farklılıklar vardır. Onlardan bahsetmedim, çünkü belgelerde daha ayrıntılı bilgi bulunabilir. Facebook ekibi kendi tercümanını yazdı ki bu aslında derlenmiş biçimde çalışacak olanın %99,9'una denk geliyor. Kodunuzu standart bir PHP yorumlayıcısı ile değil, dediğim gibi PHP için hphpi ile test etmek daha iyidir.

Burada sunulan tüm ücretsiz PHP derleyicileri yeniden oluşturulabilir PHP betikleriözel bir PHP yorumlayıcısı yüklemeden bilgisayarda çalıştırılabilen makine koduna veya bunları bir bayt kodu komut satırı arabiriminde derleyin (kurulum için NET veya Mono çerçevesine veya Java bayt koduna ihtiyacınız vardır (burada sanal makine Kurulum için Java)).

Bu tür derleyiciler çeşitli amaçlar için yararlı olabilir: artık çalışma zamanında yorumlanmadıkları için betiğinizin yürütülmesini hızlandırabilirler; veya onlar sayesinde (diğer ticari scriptler için gerekli olan) kaynak kodunu ifşa etmeden uygulamalarınızı dağıtabilirsiniz. Sanırım, birisinin internete bağlı PHP programları yazmak ve bunları masaüstü çalıştırılabilir bir işlevle (bir sunucuda çalışan normal web uygulamalarının aksine) dağıtmak istediği durumda da çalışıyorlar, bu PHP'nin kolay olması nedeniyle mümkün. programlama dilini öğrenmek için kullanılır ve özünde İnternet erişimi olan birçok yerleşik işlevi içerir. (Bu durumda, uygulamaları gömülü bir web sunucusuyla yeniden dağıtmanız veya sunucuyu uygulamanıza derleyen bir derleyici kullanmanız gerekir.)

Bu arada, kodunuzda şaşırtmaca kullanmak istiyorsanız, bunun kullanırken de mümkün olduğunu bilmelisiniz. PHP hızlandırıcı... Bu hızlandırıcılar ayrıca komut dosyanızın yürütme hızında bir artış sağlar.

Henüz bilmeyenler için faydalı bilgiler Resmi sürüm PHP tercümanı PHP web sitesinden indirilebilir: Köprü Metni İşlemcisi.

Yerel kod, .NET veya Java bayt kodu komut dosyaları yazmak için ücretsiz PHP derleyicileri.

Bambalam (yeni)

Bu program bağımsız üretir Windows uygulamaları PHP kaynak kodunuz için EXE. Yalnızca kaynak kodu kodladığı ve bir PHP yorumlayıcısı yerleştirdiği için yerel kod için gerçekten bir derleyici değildir, ancak bu program yerel ve bayt kodu için derleyiciler arayan kişiler için kesinlikle uygundur. Tüm program yazıldığı zaman, yürütme ortamı PHP 4.4.4'te yerleşikti (program 2006'dan beri güncellenmedi). Bambalam'ın kaynak kodu kamu malıdır.

Falanger (.NET için)

Phalanger, PHP kodunuzu CLI bayt koduna (.exe veya.dll) derler. Bu program, .NET 4.0 veya Mono çerçeveleri aracılığıyla çalıştırılabilir. PHP kodunuz herhangi bir .NET nesnesini ve ek kitaplıkları kullanabilir standart uzatma PHP. Ortaya çıkan NET derlemesi imzalanabilir veya gizlenebilir. Bu program ayrıca Visual Studio kullanarak PHP uygulamaları oluşturmanıza izin veren şablonlar da yayınlar. Program Apache lisansı altında yayınlanmıştır.

PHP için HipHop (yerel kod için)

HipHop, PHP kodunuzu daha sonra GNU C++ derleyicisi kullanılarak bir yürütülebilir dosyaya derlenen C++ koduna çevirir. ikili kod... Derleyici PHP 5.3'ün tüm özelliklerini destekler (elbette değerlendirmek ()). 64 bit Linux ve FreeBSD için çalışır ve kod derler. Program kaynak formda dağıtıldığı için manuel olarak (kendiniz) derlemeniz gerekir. PHP Lisansı altında yayınlandı.

Roadsend PHP (yerel kod için).

Roadsend PHP derleyicisi, Windows ve Linux için makine ikili dosyaları (yürütülebilir dosyalar) üretir. Komut dosyalarınız konsol programlarıyla sınırlı değildir ( komut satırları): sizinki olsa bile, bir web sitesinde olduğu gibi çalışmalarına izin veren yerleşik web sunucularıyla oluşturulabilirler. özel sistem... Derleyici altında yayınlandı GNU lisansı GPL ve GNU LGPL altında çalıştırın. Ne yazık ki, program aktif gelişimini durdurdu.

Sıfır Projesi (Java için)

(Not: bu yazılım artık geçersiz görünüyor. Siteye yarım yıldır ulaşılamıyor.) Project Zero, PHP kodunuzu Java bayt koduna derleyip çalıştırabilen bir derleyici ve CLR içerir. Project Zero'nun yalnızca bir PHP derleyicisinden / çalışma zamanından daha fazlası olduğunu unutmayın; PHP veya Groovy (başka bir betik dili) kullanarak web uygulamalarını geliştirmenize izin veren gelişmiş bir çerçevedir. Bu derleyici Windows, Mac OS X ve Linux için kullanılabilir. Bu derleyici ile çalışmak için Java Development Kit'i indirmeniz gerekir.

Önerilen derleyicilerden hangisini tercih edersiniz? Yoksa başka bir favori tercümanınız var mı? Yorumlarınızı ve yorumlarınızı aşağıya bırakın, memnuniyetle okuyup geri saracağız.

Etiketler: PHP derleyicileri, komut dosyası çevirisi

PHP, yorumlanan bir programlama dilidir, her istekte kaynak kodu ayrıştırılır ve "yürütülür". Bu yaklaşım, elbette, proje geliştirme aşamasında çok uygundur, ancak üretim kodunun yürütülmesi sürecinde fazladan bir adım sunar. Böylece, ilk bakışta yorumlama sağlam nokta PHP, ekstra CPU zamanına ve kaynaklarına mal olur.

Aşağıda derlemenize izin veren derleyiciler hakkında konuşacağız. php kodu C++'da ve yürütülebilir dosyada. Böylece PHP uygulamaları yorumlayıcıyı atlayarak doğrudan işlemci tarafından yürütülür.

Pratikte her şeyin çok iyi olup olmadığını kontrol edelim.

Tercüman nasıl çalışır?

PHP kodunu yorumlamanın iki adımı vardır:

  1. Kod ayrıştırma ve işlem kodlarının oluşturulması (Zend işlem kodları) - yorumlayıcının anladığı talimatlar.
  2. İşlem kodlarının yürütülmesi.

İlk aşama optimizasyona (opcode önbelleğini kullanarak) uygun olsa da, ikincisi oldukça kapalıdır - yorumlayıcı her zaman bir dizi talimat ve bunları yürüten işlemci arasında bir aracıdır. Bir yorumlayıcı olmadan, işlemci işlem kodlarıyla ne yapacağını çözemez.

Tercüman bağlantısından kurtulmak için derleyiciler icat edildi, bunların en popüleri ve en yenisi Facebook'tan HipHop. Daha yakından hissedelim.

HipHop PHP

HipHop, Facebook geliştiricileri tarafından yazılmıştır ve şu özelliklere sahip bir uygulamadır:
  1. PHP kodunu optimize eder
  2. C++'a dönüştürür
  3. uygulamanızdan, onu yürüten çok iş parçacıklı bir web sunucusu oluşturur
  4. g ++ kullanarak yürütülebilir kodu derler

Böylece, PHP kodu girilir, sunucu çıktısı, yazılı işlevselliğin bir parçası olur.

Şimdi HipHop'un Wordpress gibi bir çerçeve kullanılarak yazılmış bir uygulamayı derlemekle nasıl başa çıkabileceğini kontrol edelim.

Wordpress derleme

HipHop'u src/hphp/klasörüne kurduktan sonra derleyici olan hphp dosyasını alıyoruz. Derlemeye başlamadan önce ortam değişkenlerini ayarlıyoruz:

Cd .. # hiphop dışa aktarma ile klasöre git HPHP_HOME = `pwd` dışa aktarma HPHP_LIB =` pwd` / bin dışa aktarma CMAKE_PREFIX_PATH = `/ bin / pwd` /../

ve git!

Wordpress'i indirin ve arşivi açın:

Wget http://wordpress.org/latest.tar.gz tar zxvf last.tar.gz

wp-config-sample.php dosyasını wp-config.php dosyasına kopyalayın ve veritabanına bağlanmak için ayarları belirtin (host ayarlarında, localhost değil 127.0.0.1 belirtin).

Başarılı bir derleme için Wordpress'e biraz yama yapmanız gerekir:

  1. wp-includes / js / tinymce / plugins / yazım denetleyicisi / sınıflar / SpellChecker.php dosyasını açın ve yerine: function & loopback (/ * args .. * /) (return func_get_args ();) function & loopback (/ * args .. * / ) ($ ret = func_get_args (); dönüş $ ret;)
  2. wp-includes / query.php dosyasında if (! Isset ($ q ["suppress_filters"])) yerine $ q ["suppress_filters"] = false; $ q ekleyin ["supress_filters"] = true;

Wordpress hazır.

Hiphop "derleyeceğimiz dosyaların bir listesini belirtmeniz gerekiyor - onu alın ve files.list'e kaydedin:

Bulmak. -name "* .php"> dosyalar.liste

Derleme için her şey hazır, hadi başlayalım:

$ HPHP_HOME / src / hphp / hphp --input-list = files.list -k 1 --log = 3 --force = 1 --cluster-count = 50

Komutun yürütülmesini tamamladıktan sonra, geçici klasörde (derlemenin başlangıcında, hphp yolunu gösterecektir, "/ tmp / hphp_ptRgV1" gibi bir şey) derlenmiş web sunucusunu alacağız. Hadi başlayalım (80 numaralı bağlantı noktasında bir şey kilitleniyorsa, örneğin apache veya nginx - bağlantı noktasını boşaltmak için önce durmalısınız):

Sudo / tmp / hphp_6s0pzd / program -m server -v "Server.SourceRoot =` pwd` "-v" Server.DefaultDocument = index.php "-c $ HPHP_HOME / bin / mime.hdf

işte! http://localost'a gitmek, çalışan bir Wordpress blogu görecektir.

Verim

Bakalım apache2 üzerinde çalışan WordPress'in derlenmemiş versiyonuna göre bir performans artışı olacak mı? Aşağıda, sayfa oluşturma hızının eşzamanlı kullanıcı sayısına bağımlılığının grafikleri bulunmaktadır.

Gördüğünüz gibi sonuçlar şok edici: Derlenen blog ortalama 6 kat daha hızlı çalışıyor! Derlenmemiş 9'da ve derlenmiş 50!'de saniyede ortalama işlenen istek sayısı! Sizi bilmem ama bu sonuçlar beni şaşırttı, bu kadar güçlü bir performans artışı beklemiyordum.

özetle

Bu kadar çarpıcı sonuçlardan sonra tek bir şey söylenebilir - Facebook'tan adamlar ellerinden gelenin en iyisini yaptı. Derleyici gerçekten uygulamadan bir roket çıkarıyor ve uygulamanın derlenmeden önce hazırlanması gerekmesine rağmen sonuç buna değer.

Bu konuya:

Gönderiyi beğendiyseniz - Google +1'e tıklayın - Daha fazla ve sadece güzel yazmak için daha fazla motive olacağım.

Programlama dilleri iki şekilde gelir: yorumlanmış ve derlenmiş. PHP hangi dildir? Bu soruyu cevaplamak için terminolojiyi anlamamız gerekiyor.

Bir programlama dilinde yazılan kodu başka bir dile çeviren programa çevirmen denir. Derleyici aynı zamanda bir çevirmendir. Üst düzey dil kodunu makine koduna çevirir. Derleme işlemi, zaten bir derleyici olmadan çalıştırılabilen bir ikili yürütülebilir dosya oluşturur.

Tercüman tamamen farklı bir kategoridir. Yorumlayıcı kodu çevirmez, ancak yürütür. Yorumlayıcı program kodunu analiz eder ve her satırını yürütür. Böyle bir kodu her çalıştırdığınızda, bir yorumlayıcı kullanmanız gerekir.

Performans açısından, ikili kod çok daha hızlı olduğu için yorumlayıcılar derleyicilerden önemli ölçüde daha düşüktür. Öte yandan, tercümanlar, yürütülmesi sırasında programın tam kontrolünü sağlar.

PHP söz konusu olduğunda, ne derleyici ne de yorumlayıcıdır. PHP, bir derleyici ve bir yorumlayıcı arasında bir geçiştir. Bunu anlamaya çalışalım ve PHP'nin kodu nasıl işlediğini görelim.

Resmi düşünün:

PHP'nin neredeyse bağımsız iki bloktan oluştuğunu görebiliriz - bir çevirmen ve bir yorumlayıcı. Bunu neden yapma ihtiyacı duydun? Tabii ki, performans nedenleriyle.

PHP'ye girdi olarak bir komut dosyası sunulur. Sözdizimini kontrol ederek özel bir bayt koduna (dahili gösterim) çevirir (çevirir). PHP daha sonra yürütülebilir bir dosya oluşturmadan bayt kodunu (programın kodunu değil) yürütür.

Bayt kodu, sıradan program kodundan çok daha kompakttır, bu nedenle yorumlaması (yürütmesi) daha kolaydır (ve daha hızlıdır). Kendiniz karar verin: ayrıştırma, çeviri aşamasında yalnızca bir kez gerçekleştirilir ve "yarı bitmiş ürün" zaten yürütülür - bu amaçlar için çok daha uygun olan bayt kodu. Bu nedenle PHP, bir derleyiciden çok bir yorumlayıcıdır. Bu "çifte çalışma" aşağıdaki amaçlar için gerekliydi.

Bir döngü düşünün:

için (i = 0; ben<10; i++) { Operator_1; Operator_2; Operator_3; ............ Operator_99; Operator_100; }

Bu döngü 10 kez “dönecektir”. Bu on geçişin her biri için tercüman ve 100 Kod satırları. Ve içinde 10 * 100 = 1000 satır kodu analiz etmeniz ve çalıştırmanız gerekiyor! Tüm döngüyü bir kez bayt koduna çevirirseniz, 10 kat daha az analiz etmesi gerekecektir! Bu, komut dosyalarının 10 kat daha hızlı çalışacağı anlamına gelir!

PHP olduğu ortaya çıktı.

PHP'nin çalışmasının ana aşaması, programın dahili temsilinin yorumlanması ve yürütülmesidir. Ciddi senaryolarda en çok zaman alan bu aşamadır. Ancak, yavaşlama o kadar önemli değil.

PHP sürüm 3'ün "saf" bir yorumlayıcı olduğunu hatırlamakta fayda var "ve PHP 4'ten bu yana, komut dosyalarının yürütülmesi çok daha hızlı hale geldi, çünkü PHP 4 (ve PHP5) yorumlanmış bir çevirmendir.

Neredeyse her zaman derleyici olarak adlandırılan Perl dili tamamen aynı şekilde çalışır - programın metnini dahili bir temsile çevirir ve ardından ortaya çıkan kodu çalışma zamanında kullanır. Yani PHP sürüm 4'ün Perl kadar bir derleyici olduğunu söyleyebilirsiniz.

Bu nedenle, PHP'nin, yorumlama sürecini optimize eden yerleşik bir çeviri bloğuna sahip bir yorumlayıcı olduğu sonucuna varmak zorunda kalıyoruz.

Bir yorumlayıcı (ve dolayısıyla PHP) kullanmanın yadsınamaz avantajları vardır:

  • Ayrılan belleği boşaltma konusunda endişelenmenize gerek yoktur, onlarla çalışmayı bitirdiğinizde dosyaları kapatmanıza gerek yoktur - program dikkatli kontrolü altında yürütüldüğünden tüm rutin işler tercüman tarafından yapılacaktır;
  • Değişken türleri hakkında düşünmenize gerek yoktur ve ayrıca bir değişkeni ilk kez kullanmadan önce tanımlamanız gerekmez;
  • Programların hatalarını ayıklamak ve hataları tespit etmek büyük ölçüde basitleştirilmiştir - yorumlayıcı bu süreç üzerinde tam kontrole sahiptir;
  • Web uygulamaları bağlamında, yorumlayıcının da çok önemli bir avantajı vardır - program düzgün çalışmıyorsa sunucunun "donma" tehlikesi yoktur.

Başka avantajları da var. Genel olarak, bir yorumlayıcı kullanmak, komut dosyalarına Web kullanıcılarının onlardan beklediği gücü verebilir.

PHP'nin performans kaybı, çok sayıda satırı vb. işlerken büyük ve karmaşık döngüler durumunda fark edilir. Ancak, bunun, daha güçlü işlemciler çıktıkça daha az ve daha az görünen tek PHP dezavantajı olduğunu unutmayın, bu nedenle sonu, genellikle boşa çıkar.

<<< Назад
(PHP5'teki yenilikler neler?)
İçerik İleri >>>
(PHP 5.3'e Geçiş)

Daha fazla sorunuz varsa veya net olmayan bir şey varsa - hoş geldiniz