Cidden, ben kötü PHP kodu yazmak gerekir?

16 Cevap php

Geçenlerde bazı PHP işi yapıyorum ve ben gördüğüm tüm kod, insanlar birkaç yöntem kullanma eğiliminde. Bu not "bir parametre ve boş bir fonksiyonu vücut ile bir işlev çağrısı 7-8 $ yapıyor gibi aynı zaman alır (Onlar da birkaç değişkenleri kullanma eğiliminde, ama bu başka bir konudur.) Bu neden merak ediyordum, ve buldum localvar + + işlemleri. benzer bir yöntem çağrısı, elbette yaklaşık 15 $ localvar + + operasyonları "dir here.

Bu PHP sayfası derlenmiş ve önbelleğe alınmış olsa bile, doğru mu? Ben yöntemler verimliliği açısından mümkün olduğunca kaçınmalıdır? Ben bir kod bloğu tekrarlanacaktır yerde yöntemleri ile iyi organize, insan okunabilir kod yazmak istiyorum. Bu yöntemler olmadan düz kod yazmak için gerekli ise, bu olacak "inline" yöntem gövdeleri herhangi bir program var mı? Ben güzel kodunu ve dağıtım öncesine kadar o zaman çirkin yazabilirsiniz yolu.

Bu arada, ben bakarak oldum kod Joomla 1.5 çekirdek ve birkaç WordPress eklentileri, yani, ben onlar ne yaptığını biliyor insanlar varsayalım.

Note: Herkesin optimizasyonu in general hakkında konuşmak için bu soru üzerine atladı, ama aslında biz yorumlanır dilde optimizasyonu hakkında konuşuyor memnunum. En azından biz PHP bahsediyoruz aslında biraz ipucu güzel olurdu.

16 Cevap

Ben Joomla ve Wordpress hiçbir suç ile, good PHP kod büyük örnekler değildir düşünüyorum. Bunun üzerinde çalışan insanlara karşı kişisel bir şey var ve bu da bir web sitesi / blog yaşatacak kadar büyük ve ben bir sürü insan bu projede de tüm boş zaman geçirmek ama kod kalitesi daha kötüdür (ile biliyoruz hiçbir suç).

Bana inanmıyorsanız, son bir yıl içinde güvenlik duyuruları gözden; Ayrıca iki birinden performans arıyorsanız varsayarak, kendi kod var ya excel değildir. Bu yüzden hiç iyi kod yoluyla, ama Wordpress ve Joomla hem önyüz excel -, kullanımı oldukça kolay insanlar bir web sitesi almak ve yapabileceğiniz stuff.

Ve onlar o kadar başarılı, o yüzden insanlar kod kalitesi üzerinde ama onlar bunları yapmak için etkin ne dayalı onları seçmeyin.

Performans soruyu yanıtlamak için, evet, tüm iyi şeyler (fonksiyonlar, sınıflar vb) uygulama yavaşlatmak doğrudur. Yani uygulama / script hepsi tek bir dosyada ise, öyle de sanırım. Sonra bad PHP code yazmaktan çekinmeyin.

En kısa sürede size genişletmek ve kod çoğaltmak başlar başlamaz, sıçramalı kodu yazma birlikte getiriyor (hız) ticaret kapalı düşünmelisiniz. :-)

Bu ticaret nedeniyle kapalı iki şey oldukça küçük IMHO:

  1. CPU is ucuz.
  2. Geliştiriciler are not ucuz.

Şimdi altı ay içinde geri koduna gitmek gerektiğinde, bu nano saniye çalışan kaydedilmiş eğer (çünkü çoğaltılamaz kod üç ya da dört kez) kötü bir hatayı düzeltmek için ihtiyacınız olduğunda, hala eklemek düşünüyorum.

Daha hızlı PHP çalışmasını yapmak şeyler her türlü yapabilirsiniz. Genellikle insanlar bu tür APC gibi, bir önbellek öneririz. APC gerçekten harika. Bu, örneğin, sizin için arka planda optimizasyonlar her türlü çalışır ayrıca bir PHP dosyası bayt kodunu önbelleğe alma ve verileri kaydetmek için kullanıcı adasında fonksiyonları sağlar.

Eğer her zaman bir yapılandırma dosyasını ayrıştırmak Yani örneğin i / o bu komut diski çalıştırmak gerçekten önemlidir. Basit bir apc_store() ve apc_fetch() sen ya ayrıştırılan yapılandırma dosyasını saklayabilirsiniz bir dosya tabanlı veya bellek tabanlı (RAM) önbellek ve önbellek süresi kadar veya oradan almak silinir.

APC tabii ki, sadece önbellek değildir.

Ne kadar "verimlilik" gerekiyor? Hatta ölçülür mü? Prematüre optimizasyonu tüm kötülüklerin köküdür, ve ölçüm olmadan optimizasyon DAİMA erken.

Ayrıca unutmayın rules of Optimization Club.

  1. Optimizasyon Kulübü'nün ilk kuralı, sen Optimize kalmamasıdır.
  2. Optimizasyon Kulübü'nün ikinci kuralı, herhangi bir ölçüm olmadan Optimize kalmamasıdır.
  3. App hızlı yatan taşıma protokolü daha çalışıyorsa, optimizasyon bitti.
  4. Bir seferde bir faktör.
  5. Hayır marketroids, hayır marketroid programları.
  6. Test sürece ona sahip olarak devam edecektir.
  7. Bu Optimizasyon Kulübünde ilk gece ise, bir test durumu yazmak zorunda.

Bu soruya yanıtları görmelisiniz: Should a developer aim for readability or performance first?

Uzlaşmayı Özetlemek gerekirse: Eğer performans bazı özel alanda ele alınması gereken bir gerçeği (test / profil aracılığıyla) için biliyorum sürece, okunabilirliği çok daha önemlidir.

Olguların% 99, daha iyi kod anlaşılırlığı konusunda endişe gerekir. , Test etmek için kolay bir kod yazın anlamak ve mantain.

Performans gerçekten kritik birkaç durumda, PHP gibi betik dilleri en iyi seçim değildir. PHP birçok temel kütüphane fonksiyonları C ile yazılmış bir nedeni, tüm sonra, var.

Şahsen, bir işlev çağrısı için havai olabilir iken, bu demektir eğer (parametreli) kez kod yazmak, ve, ben daha önde WAY Ben bunu düzeltmek çünkü o 85 yerlerde kullanmak tek bir yerde.

Betik dilleri insanlara "yeterince iyi" ve "çalışır" kodlama dikkate tek kriter olduğu fikrini vermek eğilimindedir.

Özellikle PHP'nin gibi hızlı bir tercüman ile ben okunabilirlik / sürdürülebilirlik eksikliği ondan sen olabilir (ya da olmayabilir!) Kazanç verimliliği hiç değer olduğunu sanmıyorum.

Ve WordPress hakkında bir not: Ben WordPress kod tarama bir sürü şey yaptım. , Bu insanlar iyi bir kodun hakkında hiçbir şey bilmiyor lütfen sanmayın.

İlk soruyu cevaplamak için, evet doğrudur ve aynı zamanda derlenmiş op-kodu için de geçerlidir. Evet kod çünkü kod çoğaltılması çok büyük büyür uç durumlar hariç fonksiyon çağrıları kaçınarak daha hızlı kod yapabilirsiniz.

Sen ne gibi yapmalıyım "Ben bir kod bloğu tekrarlanacaktır yerde yöntemleri ile iyi organize, insan okunabilir kod yazmak istiyorum."

Lütfen tüm işlevini kaldırmak bu korkunç vahşet işlemeye devam ederse, en azından bir profilcisini kullanmak ve sadece bu konularda kodunuzu% 10 için ne çağırır.

Mikro-optimizasyon makro yavaşlamalar yol nasıl bir örnek:

Eğer ciddi elle inlining fonksiyonları düşünüyorsanız, elle döngüler unrolling düşünün.

JMPs pahalı ve unrolling tarafından döngüler ortadan kaldırmak ve aynı zamanda tüm koşullu blokları ortadan kaldırabilir eğer, bütün bu zaman sadece CPU'nun önbellek etrafında arayan boşa ortadan kaldırmak gerekir.

Bir veritabanından şeyler çekerek olduğu gibi zamanında değişken büyütme, çok yavaş, bu yüzden siz de kod içine tüm bu verileri inline gerekir.

Aslında, sadece kod yürütme ve bir kullanıcı için bellek kopyalama için bir tercüman kadar yükleme etraflıca savurgan olduğunu, neden sadece tüm olası sayfaları ön hesaplamak ve bu yüzden onun sadece bir hafız-Kopya gitmek için bellekte hazır her sayfayı tutmayın ? Mutlaka hızlı bitti!

Ah, şimdi biz kullanıcı deneyimi engelleyen ve biz kullanabilirsiniz ne kadar içerik sınırlayıcı aramızdaki internet denilen yavaş şeyi, var nasıl önceden sayfaları önceden hesaplamak ve bunları tüm arşiv ve onları çalıştırmak hakkında Kullanıcılar yerel makine? O gerçekten çok hızlı olacak!

Ama bu cpu döngüleri, onları bir sürü, ne sayfa yükleme süresi vb render tarayıcı içeriği ile boşa gidiyor, biz aracıyı atlayın ve sadece basılı medyada onlara sayfaları teslim edeceğiz!. Genius!.

Eğer (elle) precomputing 10 yıl geçirmek ve baskı sayfaları kimse görmek isterken / bana onun yüzünde şirket çöküşünü izler.

Bu size saçma gelebilir, ama bize geri kalanı için, ne teklif sadece saçma gelebilir.

Optimizasyonu iyi, ama böyle berbat bir kod temeli unmaintainable şu olması için uyku sizi aşağı izleme kodu üzerinde çalışmaya gelecek kişiler hakkında endişelenmenize gerek yok bu yüzden bir yerde mantıklı bir çizgi çizin.

note: evet, ben Gentoo kullanın. nasıl tahmin ettin?

Tabii ki kötü bir PHP kodu yazmak gerekir. Eğer kötü bir şey yazdım ama bir kez, her zaman bir bahane :-) olarak perfomance kullanabilirsiniz

Bu erken optimizasyon. Deyimi bir işlev çağrısı, yerel bir tamsayı değişken (hemen hemen her şeyi daha fazla maliyeti) artırarak daha fazla maliyeti olduğu doğru olsa da, bir işlev çağrısının maliyeti bir veritabanı sorgu göre hala çok düşük.

Ayrıca bkz:

Wikipedia -> Optimization -> When to optimize

c2.com Wiki -> Premature Optimization

PHP'nin ana gücü çalışan bir app almak için hızlı ve kolay olmasıdır. Bu gücü gevşek (kötü) kod yazmak ve hala biraz beklenen şekilde işletmek için fırsat geliyor.

Birkaç CPU döngülerini korumak gerekir bir konumda iseniz, PHP kullanarak ne olması gerektiğini değil. PHP web uygulamaları kötü gerçekleştirdiğinizde, o çok daha büyük olasılıkla nedeniyle verimsiz sorgularına kod yürütme hızı olduğunu.

Bunu verimlilik her biti hakkında endişeli iseniz, o zaman neden yeryüzünde bir betik dili kullanıyorsunuz? Muhtemelen daha fazla ve daha az okunabilir kod sonuçlanan, (burada favori derlenmiş dil eklemek) çok daha hızlı bir dilde programlama olmalı, ama gerçekten hızlı kaçıyorum, ve hala en iyi kodlama uygulamaları için amacı olabilir.

Eğer çalışma hızı için kodlama eğer Cidden, sen hiç PHP kullanarak olmamalıdır.

Bir MVC mimari deseni ile web uygulamaları geliştirmek, büyük ölçüde önbelleğe alma ve serileştirme yararlanabilir. Sen manzarasına, ya da bölümlerini önbelleğe ve modelleri serileştirebilirsiniz.

Deneyim, modelleri genellikle ayrıştırmak ve görüntülenen ediliyor verilerin çoğu oluşturur. Eğer, belirli bir model bir RSS beslemesi ayrıştırır bir model gibi, sık sık yeni verilerin üretilmesi olmayacak biliyorum, sadece tüm ayrıştırılmış veri ile yerde dolması var ve bir süre sonra her yenilenir olabilir.

Eğer wordpress php kod bakarsanız, zihnimde spagetti açar kendi html arasında php etiketleri karışacağı.

Phpbb3 ancak bu konuda yol daha iyi. Örneğin bu php parçası arasında sıkı bir bölünme ve xhtml bir şablon motoru tarafından çözümlenen {} şablon etiketleri ile dosyaları, biçimlendirilmiş stilleri parçası vardır. Hangi daha temiz.

Write a couple 10 minute examples and run them in your profiler.

Bu milisaniyelik hızlı olan söyleyecektir.

Eğer bir profiler yoksa, buraya göndermeden, ve benim PHPEd profilcisine onları çalışacaktır.

Ben varsa, zaman farkı çok, bir sınıf saklanan dosyayı açmak zorunda geliyor, ama bu da test edilmek zorunda olacağını sanıyorum.

Eğer spagetti kod korumak zorunda vs birkaç milisaniye hakkında o kadar umurumda eğer kendinize sorun - kullanıcıların herhangi bir hiç fark edecek?

Edit

Profilci yüksek trafik hacimleri taklit değil, ancak yöntem tek bir kullanıcı için hangisinin daha hızlı olduğunu söyleyecektir ve kod parçaları ne kadar zaman kullanarak hangi. Eğer işlemleri tekrar tekrar yapılıyor profili - özellikle bir döngü içinde 1000 kez her söylüyorlar.

Biz birçok insan tarafından kullanılan daha hızlı kod birçok insan tarafından kullanılan yavaş kod daha hızlı olacağı (ama her zaman değil) varsayabiliriz.

Kod mikro optimizasyonu hakkında size ders verecek olanların genelde profil hakkında duymadım, çünkü 2 saniye toplam alarak, sayfa başına 50 SQL sorguları olacak aynıdır. Ama kod optimizized olduğunu! (Ve cehennem gibi yavaş)

Fact : adding another webserver is not difficult. Replicating a database is. Optimizing webserver code can be a net loss if it adds load on the DB.

Not: SQL dahil olmak üzere (bir forum konu gibi) basit sayfalar için 2-3 ms bir PHP web sitesi için iyi bir hedef. Benim eski web sitesi yapmak için kullanılır.