Nesne yönelimli PHP yavaş mı?

8 Cevap php

Ben usul tarzı PHP kullanmak için kullanılır. Daha sonra, bazı sınıfları oluşturmak için kullanılır. Daha sonra, Zend Framework öğrendim ve OOP tarzı program başladı. Şimdi benim programları (cms unsurları ile, ancak herhangi bir tasarım in çerçevesi olmadan) kendi çerçevesi Zend Framework üstüne inşa edilmiş, dayanmaktadır.

Şimdi çok sınıfları içerir. Ama daha ben programı, daha çok korkuyorum. Benim program bana geliştirmek için yardımcı olabilir, ancak uygulama yavaş her başka bir sınıf eklemek için korkuyorum çünkü onlar yavaş olacak korkuyorum.

Bütün bildiğim dosyaları çok dahil (eAccelerator + uygulamayı 20 kez hızlandırabilir! Tek bir dosyada tüm kod toplama kullanarak) uygulaması yavaşlatır, ancak yeni sınıfları ve nesneleri oluşturma kendisi tarafından PHP yavaşlar eğer hiçbir fikrim yok olduğunu.

Herkes bu konuda herhangi bir bilgi var mı?

8 Cevap

Hatırlanması gereken en önemli şey, tasarım, ilk, sonra optimize olduğunu. Daha sürdürülebilir olduğu daha iyi bir tasarım, spagetti kod daha iyidir. Aksi takdirde, siz de Assembler'de web uygulamanızı yazmak olabilir. Bitirdiniz sonra (tahminim yerine) profili ve yavaş görünüyor ne optimize edebilirsiniz.

Bu hata beni. Bakınız ... prosedürel kod her zaman spagetti kod değil, henüz OOP fanboys her zaman olduğunu tahmin. Ben birkaç usul tabanlı web uygulamaları yanı sıra PHP IRC hizmetleri cini yazdık. Şaşırtıcı, o orada ve düzenleme süper kolaydır diğer olanların çoğu daha iyi performans gibi görünüyor. Genellikle cepten ona bir göz attım ve "hayır kodu bu temiz olması hakkına sahiptir" dedi gelmez Arkadaşlarımdan biri

İyi bir programcı sınıflar getirmek yükü olmadan büyük usul kodu yazabilirsiniz. Kötü bir programcı her zaman şeyler yavaşlatır berbat cepten kod yazacak.

PHP için daha iyi olduğu için hiç kimse doğru cevap yoktur

Evet, her program yavaş yapar içerir, ama bundan daha fazlası var.

Eğer programı ayrıştırmak ise, birçok dosya üzerinde, tüm bu dosyaların dahil yükü vs kod az miktarda yürütme / ayrıştırma / dahil olduğunuz bir nokta var.

Eğer eAccelerator veya APC gibi şeyler kullanarak, dediği gibi, geri bir performans bok ton almak için önemsiz bir yoldur, çünkü Ayrıca, az kod ile dosyaların çok sahip, o kadar kötü değil. Onlara iman varsa, aynı zamanda, olsun, sahip ve Object Oriented kod tabanı, tüm harika faydaları.

Ayrıca, istek başına temelinde yavaş! = Ölçeklenebilir değildir.

Updated

İstendiği gibi, PHP sınıfları daha düz dizi manipülasyon hala daha hızlıdır. Ben hayal meyal doktrini ORM projeyi hatırlıyorum, ve nesnelerin karşı dizilerin hidrasyon karşılaştırarak birisi ve diziler daha hızlı çıktı. Bu büyüklükte bir emir değil, bu ancak, belirgindir - this is in french, but the code and results are completely understandable.. Sadece bir not, bu doktrin sihirli yöntemler kullanır __ get ve __ bu isnat edilebilir bir sürü ayarlanır, ve bunlar da açık bir değişken erişim, öğretinin nesne hidrasyon yavaşlık parçası daha yavaş, bu yüzden en kötü durum senaryosu olarak görür. Eğer bellekte dolaşırım, ya da isset, ya da 'İn_Array'in' gibi fonksiyonların (bu emri N) gibi testlerin ton bir sürü yapmak zorunda eğer Son olarak, dizileri kullanıyor olsanız bile, sen performansını vida olacak yararlanır. Ayrıca nesneleri sadece altında Dizilere olduğunu hatırlamak, tercüman sadece özel olarak nitelendirir. Ben, şahsen, küçük bir performans artışı daha iyi kod lehine olur, sen akıllı algoritmalar sahip olmaktan daha fazla fayda elde edersiniz.

Proje çok sayıda dosya içeren ve bağlı PHP'nin dosya erişim kontrolü ve kısıtlamaların niteliği, ben realpath_cache, makul sayılara yapılandırma ayarlarını yükseltmek açmak için tavsiye ederim, ve {kapatırsanız [(1 )]} ve safe_mode. Güvenlik biri genellikle open_basedir ve / veya safe_mode kazançları geri almak için belge kök kısıtlanmış bir kullanıcı kimliği altında php işlemini çalıştırmak için PHP-FPM veya suexec kullandığınızdan emin olun .

İşte bu bir performans kazancı neden birkaç noktalar şunlardır:

Ayrıca Olafur @ gelen cevap yorumumu dikkate alın:

Ben büyük yavaş aşağı olmak üzere özellikle oto-yükleme bulundu. PHP dizin arama ve dosya açık erişim, özel bir oto-yükleyici sırasında kullanmak daha PHP işlevi, büyük yavaşlama için son derece yavaştır. Sen güvenli modunu kapatarak ile bunu biraz yardımcı olabilir (zaten önerilmiyor) hatta açık-basedir (ama ben bunu yapmazdım), ancak büyük gelişme otomatik yükleme kullanarak değil gelen ve sadece tam fs "require_oncenin" kullanımı Kullandığınız php dosyasının başına tüm bağımlılıkları gerektiren Pathes.

Eğer include_onceyi kullanıyorsanız () o zaman ne olursa olsun cepten tasarım veya değil, gereksiz bir yavaşlamaya neden oluyor.

OOP kodunuzu bir havai katacak ama ben bunu fark asla bahse girerim.

Aslında her şey için sınıfların çok büyük sayıda gerektirmeyen web uygulamaları için geniş çerçeveler kullanarak muhtemelen birçok farkında olmadığı kötü bir sorundur. Aşağı şerit azından sadece ne gerek tutmak ve dinlenme atmak, kodun her bit dahil değildir.

Eğer sınıflar yapısını yeniden düşünmeye ve bunları nasıl uygularım yeniden olabilir. Eğer cepten yavaş olduğunu söyledi eğer sınıfları yeniden tasarlamak ve bunları nasıl uygularım olabilir. Sınıf, bir nesnenin sadece bir şablon, herhangi bir kötü tasarlanmış bir yöntem o sınıfın tüm nesneleri etkiler.

Çoğu, bu etkili sınıfları gerek davranışları ve bağımsız yöntemler miktarını azaltacaktır, ama önce tüm kapalı sen kadar olabildiğince ilk veya anne sınıfları soyutlayarak, iyi bir miras haritası oluşturmak gerekir miras ve polimorfism kullanın.

Bu var mı kaç sınıfları hakkında bir sorun değil, sorun sahip oldukları ve ne kadar iyi yapılandırılmış bu yöntemleri nasıl yöntemler, özellikler veya alanları çok fazladır. Kalıtım drammatically tasarlamak için yöntemler miktarını azaltır ve kod miktarı çok derlenmesi.

Birkaç diğer insanların belirttiği gibi, orada OO PHP hafif havai olduğunu, ancak diğer çeşitli sınıflar türetmek çekirdek sınıfları üzerinde optimizasyon çaba odaklanarak onu dengeleyebilir. C + +, yüksek performanslı bilgisayar dünyasında C ve Fortran geleneksel bölge giderek daha popüler hale geliyor nedeni budur.

Şahsen, CPU-kısıtlı bir PHP sunucusuna görmedim. RAM kullanımını kontrol edin (siz de bunun için çekirdek sınıfları optimize edebilir) ve sizin yaptığınızı herhangi bir ekstra CPU çalışma daha pahalı büyüklüklerdir gereksiz veritabanı aramaları yapmıyor emin olun.