OOPS, performans oraya gider?

6 Cevap php

Ben PHP / MySQL ile yazılmış web sitemdeki çalışıyordu. Bakımı çok zor - Önce ben yazdım, bu html ve benzeri gömülü php sürü spagetti oldu.

Ben OOPS ile güzel bir modüler yapısı ile her şeyi yeniden yazdı ve şimdi onu korumak ve genişletmek için çok daha kolaydır.

webwait ve kuşatmayı kullanarak site performansını test ederken Ancak, daha yeni, daha iyi yapılandırılmış versiyonu spagetti kod sürümü daha yavaş çalışmasına ve yük gibi görünüyor.

Yükleme süresi yaklaşık 1 saniye fark var - 2.39s vs 3.81s

Değil js, değil css - başka bir şey php kodu hariç değiştirildi

Yani sorun ne? Ben eski kodu geri dönmek gerekir? Bu başkalarına oldu?

Edit:

  • I have done some analysis using cachegrind, inclued and I think the code is pretty good.
  • I also know that the problem is not entirely OOPS but the greater structure etc. and also that OOP doesn't at all guarantee better performance.
  • I have run the code multiple times too.
  • I've used cachegrind with kcachegrind, inclued, siege (most of the tools Rasmus lerdorf outlined in his drupalcon 2008 talk on 'Simple is Hard')

What I want to know is how others deal with this.

6 Cevap

Ben dikkate noktaları bir çift düşünün yapabilirsiniz:

  • Bu spagetti kod vs OOP bir seçim değil. Gibi bakımı ve OOP gibi yapılandırılmış, ancak farklı performans özellikleri ile olabilecek diğer paradigmalar vardır. (Birçok büyük C çerçeveler çok cepten-ey stili kullanabilirsiniz.) Daha fonksiyonel tarzı da bazı durumlarda basit olabilir yalnızca basit usul dil özelliklerini kullanarak OOP kod yazmak mümkündür. OOP One True Paradigma değildir.
  • OOP farklı dereceleri vardır. Nesneler gibi verilerin modellenmesi çoğu dilde (PHP olsa, bu alanda nasıl bir performans bilmiyorum, ama PHP ile hep kötü bekliyoruz) gözle görülür bir performans farkı neden olmaz. Ancak, sanal fonksiyonları, kalıtım (ve özellikle çoklu kalıtım) daha yavaş ve genellikle kaçınılması olabilirdi yükü ekleyin. Hangi OOP özellikleri kullanıyorsunuz? Basit bir OOP iş yapacağını tasarım, ama "yavaş" dil özellikleri daha az bağımlı var mı?

(- Ama bu büyük ölçüde yardımcı olabilir, ancak onlar OOP özgü değilsin sen algoritma optimize edebilirsiniz, böylece önbelleğe veya ön derleme etkinleştirmek ve) bunun üstüne, her zamanki açıkçası geçerlidir

"Should I revert back to the old code?"

Ben dönmek derseniz, size "Ben OO kimse çalışan bir OO başvuru yapabilirsiniz şişmiş birimi olduğunu biliyordum, bkz." Diyecekler Bu yanlış olur.

Ben dönmek yok derseniz, size söyleyeceğim "ama kabul edilemeyecek yavaş."

Peki, ne kaldı?

Bunu yazmak zorunda better. Ileri gidin. Aslında çalışır böylece Ö.Ö. yeniden yazın. OO "sihirli" değil - herhangi bir garanti vermemektedir. Kötü OO programları ve iyi OO programları vardır. Senin durumunda, tabii ki iyileşme için bir oda var.

Yani bazı performans profilleme araçları almak ve zaman gitti nerede olduğunu öğrenmek.

Ayrıca, "optimize" yok - rewrite.

Oran bu oluyor arama çeşit çok zaman alır olması çok iyi. Arama eleyin. Daha iyi kapları ve koleksiyonları (hash haritalar, setleri, vb) kullanın

Kod profil. Ben bir PHP yapar nasıl hiçbir fikrim yok, ama oluyor ne işe sadece makul yoldur.

Sometimes kod daha şık hale performansı üzerinde zararlı bir etkisi yok, ama genelde o ölçüde olacaktır. Siz zaman nereye çalışmak, ve bu biraz düzeltmek gerekiyor.

There's a difference of nearly 1 second in loading time - 2.39s vs 3.81s

Yani benim aklıma küçük bir rakam değil yani küçük değerin% 50'nin üzerinde olduğu 3,81-2,39 = 1.42s bir farktır. Ilk derleme / yorumlama maliyeti düzgün itfa ediliyor, böylece sizin testler birden fazla kez çalıştırmak var? Eğer daha fazla zaman önce olmadığı götürülüyor nerede görmek için sayaçlarını tanıtmak için çalışıyor düşündünüz mü? Bu soyutlamanın bir sürü tanıttı olabilir ve şimdi bunun için fiyatı gördükten görünüyor gibi bu benim öneriler olacaktır.

Xdebug kurma ve size söyleyebilirim görmeye çalışın. Başkası bir profiler ile kontrol gerektiğini belirtti. Ben katılıyorum, ve Xdebug biri gibi diğer bazı yararlı işlevselliği ile size sağlayabilir. Seçtiğiniz IDE bile Xdebug ile entegre olabilir.

Düşünün bir şey: Kullandığınız APC veya diğer bazı PHP opcode önbelleğe alma çözümü vardır? Değilse, tüm kodunuzu sıfırdan bir sayfa yüklemek, her zaman yeniden yorumlanıyor. Bu kesinlikle performansını etkileyebilir.