PHP'yi küçültmenin bir anlamı var mı?


101

Bilmen olabilir PHP küçültmek, ancak herhangi bir nokta olup olmadığını merak ediyorum. PHP yorumlanmış bir dildir, bu nedenle derlenmiş bir dilden biraz daha yavaş çalışacaktır. Sorum şu: müşteriler, PHP'mi küçültmek zorunda kalsaydım, sayfa yüklemelerinde gözle görülür bir hız artışı görürler miydi?

Ayrıca, PHP'yi veya benzeri bir şeyi derlemenin bir yolu var mı?


Açık bir nokta, kodunuzu daha az taşınabilir hale getirmek için gizlemedir ve bu geçerli bir hedef olabilir.
John

Başka bir nokta da sunucu alanından tasarruf etmek (eğer bu önemliyse),
George Ogden

Yanıtlar:


161

PHP bayt kodu olarak derlenir ve bu daha sonra bir VM'ye benzeyen bir şeyin üzerine yorumlanır. Perl ve Ruby dahil olmak üzere diğer birçok komut dosyası dili aynı genel süreci izler. Diyelim ki BASIC gibi geleneksel bir yorumlanmış dil değil.

Kaynağı "küçültmeye" çalışırsanız, etkili bir hız artışı olmayacaktır. APC gibi bir bayt kodu önbelleği kullanarak büyük bir artış elde edersiniz .

Facebook, PHP kaynağını C ++ koduna dönüştüren HipHop adlı bir derleyici tanıttı . Büyük PHP uzmanlarından biri olan Rasmus Lerdorf, bu yılın başlarında Digg için HipHop tarafından verilen performans iyileştirmelerini kapsayan bir sunum yaptı . Kısacası, kodu optimize etmekten ve bir bayt kodu önbelleği kullanmaktan çok daha hızlı değildir. HipHop, kullanıcıların çoğu için aşırıdır.

Facebook ayrıca kısa bir süre önce HipHop'u yapma çalışmalarına dayanan yeni bir sanal makine olan HHVM'yi açıkladı . Hala oldukça yenidir ve genel halka büyük bir performans artışı sağlayıp sağlamayacağı net değildir.

Açıkça belirtildiğinden emin olmak için lütfen bu sunumu tam olarak okuyun . Yine Facebook'tan gelen xdebug ve xhprof gibi araçları kullanarak kodlama ve profil kodu oluşturmanın ve darboğazları belirlemenin çeşitli yollarına işaret ediyor .


2
Tüm bayt kodu / vm şeyinin aslında harici (!) Bayt kodu önbelleği olmadan size hiçbir şey almadığını unutmayın. PHP'nin varsayılan olarak bayt kodunu neden attığını anlamıyorum ...

Bunun paylaşılan bir barındırma sorunu olduğunu düşünüyorum. APC, eski 6.0 tabanlı ana hattan itibaren varsayılan olarak PHP'ye dahil edilmiştir. Varsayılan olarak 5.4'te mi yoksa yeni bagaj her ne denilirse göreceğiz mi emin değilim ...
Charles

Bilgi için çok teşekkürler. Maalesef sunucum üzerinde derin bir kontrole sahip değilim (kiralanmış). Web barındırıcıları APC kullanıyor olabilir mi?
Bojangles

3
Çoğu paylaşılan barındırma sağlayıcısı APC kullanmaz. Yapılandırmayı kontrol edebilmek için bir Sanal Özel Sunucuya bakmalısınız. VPS'ler genellikle normal paylaşılan barındırmadan daha pahalıdır, ancak gerçek bir adanmış sunucudan çok daha ucuzdur. Popüler VPS sağlayıcıları arasında Slicehost ve Linode bulunur. Önce kodunuzu karşılaştırmalı ve profilini çıkarmalısınız !
Charles

15

Gibi bir işlem kodu önbellek kullanarak lehine PHP küçültmek fikrini vazgeçmek PHP Acceleratorveya APC.

Veya başka bir şey memcached


18
"Başka bir şey" dedim.
Stephen

3
İşlem kodu önbelleğinden başka bir şey kastettiğin açık değil.
Treffynnon

5
memcached, kıyaslama ve profilleme yaptıktan ve önbelleğe almanın mümkün olan en iyi performans kazancı olacağını belirledikten sonra performansı iyileştirmenin mükemmel bir yoludur.
Charles

1
PHP 5.5 kullanıyorsanız, herhangi bir işlem kodu önbelleği yüklemenize gerek yoktur çünkü şimdi varsayılan olarak onunla birlikte gelir.
güvenlik duvarı

1
Aslında cromulent aradım :(. Diğerleriyle aynı fikirdeyim, bu bağlamda memcached'i kullanmak yanıltıcıdır. Derleme sürecinin bir parçası olarak verileri önbelleğe almak, sonuçta ortaya çıkan operasyon koduyla aynı değildir.
Mike Purcell

3

Bazı yeniden yazma (daha kısa değişken isimleri) ile birkaç bayt bellek tasarrufu yapabilirsiniz, ancak bu da nadiren önemlidir.

Bununla birlikte, bazı uygulamalarımı komut dosyalarını bir araya getirmeye izin verecek şekilde tasarlıyorum. Bununla php -wbirlikte, önemli ölçüde sıkıştırılabilir ve komut dosyası başlangıcı için biraz hız kazancı eklenebilir. İşlem kodu etkinleştirilmiş bir sunucuda bu yalnızca birkaç dosya mtime denetimini kaydeder.


3

Bu, bir reklamdan daha az bir cevaptır. Zend işlem kodlarını statik yazarak bir VM'de çalıştırmak için çeviren bir PHP uzantısı üzerinde çalışıyorum. Keyfi PHP kodunu hızlandırmaz. Normal PHP'nin izin verdiğinden çok daha hızlı çalışan kod yazmanıza izin verir. Buradaki anahtar statik yazmadır. Modern bir CPU'da, dinamik bir dil sol ve sağ dal yanlış tahmin cezasını yiyor. PHP dizilerinin karma tablolar olduğu gerçeği de yüksek maliyetler getirir: çok sayıda dal yanlış tahmin, önbelleğin verimsiz kullanımı, yetersiz bellek önceden getirme ve herhangi bir SIMD optimizasyonu yok. Özellikle şube yanlış tahmin ve önbellek eksiklikleri, günümüz işlemcileri için aşil topuğudur. Benim küçük sanal makinem, hash tablosu yerine statik türler ve C dizisi kullanarak bu sorunu çözüyor. Sonuç kabaca on kat daha hızlı çalışır. Bu, bayt kodu yorumlamasını kullanıyor. Uzantı isteğe bağlı olarak gcc aracılığıyla bir işlevi derleyebilir. Bu durumda, iki ila beş kat daha fazla hız elde edersiniz.

İşte ilgilenen herkes için bağlantı:

https://github.com/chung-leong/qb/wiki

Yine, uzantı genel bir PHP hızlandırıcısı değildir. Buna özel kod yazmalısınız.


3

Evet bir (teknik olmayan) nokta var.

Barındırıcınız, kodunuzu sunucusunda casusluk yapabilir. Eğer onu küçültür ve çirkinleştirirseniz, casusların fikirlerinizi çalması daha zordur.

Php'yi küçültmenin ve çirkinleştirmenin bir nedeni casus koruma olabilir. Bence çirkin kod, otomatik dağıtımda bir adım olmalı.


1

PHP derleyicileri var ... liste için bu önceki soruya bakın ; ancak (Facebook boyutunda değilseniz veya uygulamanızı istemci tarafında çalıştırmayı hedeflemiyorsanız), genellikle değerlerinden çok daha fazla sorun çıkarırlar

Basit işlem kodunu önbelleğe alma, ilgili çaba için size daha fazla fayda sağlayacaktır. Veya darboğazları belirlemek için kodunuzun profilini çıkarın ve ardından onu optimize edin.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.