php sınıf performans soru ... Ben ne yapmalıyım?

3 Cevap php

Ben php, ajax, javascript, mysql kullanarak bir webapp inşa ediyorum. Ben gerçekten bir sorun ya da değil emin eğer bir süre için bir şey hakkında worring, ama oldum. İşte kod nasıl çalıştığını temel kavram ... Ben şimdi bunu değiştirmek gerektiğini bilmek istiyorum, ya da olduğu gibi kullanmak için ok eğer. Performans benim için önemli ... 5000 yılı kullanıcıların bir performans sorunu olmadan çok app kullanmak gerekir. Benim endişe verici kısmı kendini öğretti geliştirici olmak ve orada tüm iyi uygulamaları bilmeden sadece paranoya.

Burada temel webapp işlevselliği:

kullanıcı onclick olay üzerinden tarayıcı üzerinden bir çağrı yürütür -> ajax phpPG1.php çağırıyoruz. -> PhpPG1.php db karşı bir sorguyu çalıştırır ve dizideki sonuçları saklar, daha sonra bir sınıf HTMLphp.php sayfasından, yeni bir nesne örneğini, HTMLphp.php denilen başka bir php sayfası içerir - sınıfının> calles fonksiyonu ve bir sorgunun sonuçlarını içeren dizi geçer -> sınıfı işlevleri HTML tablosu oluşturur ve geri bir dize geçer -> phpPG1.php sayfa dizesini görüntüler ajax çağrısı tablo verileriyle dize geri gönderir Verilen DIV etiketi içeri aittir

HTMLphp.php bütün webapp için HTML tabloları dönmek için kullanılan tüm fonksiyonları içerir. HTMLphp.php bu gibi bir şey olur:

Class HTML_stuff
{
   function html_TABLE1($results_array)
   {

      $string = 'THE HTML TABLE WITH ITS DATA IN IT'
      return $string
   }

   function html_TABLE2($results_array)
   {

      $string = 'THE HTML TABLE WITH ITS DATA IN IT'
      return $string
   }

}

Yani, burada benim bir soru. HTMLphp.php sayfa sınıfında 100 ya da öylesine işlevleri temsil eden, şu an bu kod 5.606 hatları vardır. Aslında, benim webapp her sayfa html tabloları görüntülemek için sınıf fonksiyonları kullanabilmek için için bunun içine bu sayfayı "içerir". Ben webapp ile yapılan yaklaşık yarım değilim, bu yüzden bir sürü kod daha hatları bu dosyaya eklerim olacak. Ben sınıf nesneleri kullanarak, özellikle bilgisayar kod çalıştırmasına nasıl tam on par kadar değilim, ama temellerini anlamak eğer php gibi "yorumlayıcı dil".

HTML_stuff sınıf içinde her işlev için sadece basitçe her işlev için kodunu kaldırmak ve bu gibi dahil olur da kendi ayrı php sayfasında yerleştirin:., Bu kötü bir fikir olduğunu ve böyle bir şey yapmam gerekir merak ediyorum:

Class HTML_stuff
{
   function html_TABLE1($results_array)
   {
      include_once 'TABLE1.php'; //the html table for this function.
      return $string;
   }

   function html_TABLE2($results_array)
   {
      include_once 'TABLE2.php';
      return $string;
   }
}

Benim temel varsayım ben sadece bu nedenle bu genel site performansı yardımcı olacağını varsayarak HTMLphp.php sayfanın toplam boyutunu azaltarak, ben belirli bir işleve çağrı yaptığınızda gerekli HTML dahil olduğunu ... Bu ile sol alanda öyleyim düşünme? Parçam sadece farklı organize ve genel performansı için her şeyi yaparım, bu sadece ilk seçenek olarak aynı olduğunu düşünüyor. Ancak, daha az "içeren" bir yerde okudum performans için daha iyidir.

Ne diğer insanlar, ya da bu tür bir şey yapmak için nasıl diğer iyi uygulamalar var mı? 10.000 kullanıcılara - Bunu söylemek 5.000 bir site ile bu konuda endişe önemsiz midir?

Teşekkürler.

3 Cevap

Yerine bir açık daha bir işlev / yöntem içinde belirli bir PHP dosyası da dahil olmak üzere kesinlikle sadece gerekli öğelerin gibi şeyleri dahil ve yorumlanır olsun yardımcı olacaktır içerir. Ama PHP intrepreter hala IMHO bu konuda gitmek için gerçekten kötü bir yol olduğunu büyük sınıfın, bu 5000 satırlık kod geçmesi gerekir ve büyük bir darboğaz olacaktır.

Gerçekte, 5000-10000 kullanıcıların bir sürü değil, ama yine kullanım olacak nasıl bağlıdır. Hepsi aynı anda oturum açmış, ve sunucuda istekleri dışında çekim (/ dakika başına 10k istekleri ya da 166 req gibi bir şey yaklaşık s.) Ve ilgili az veya hiç önbelleğe yok olabilir, o zaman ciddi bir darboğaz olabilir ama yine olabilir bir çok faktör bağlıdır. Bunun yerine, bu konuda gitmek için iyi bir yol ab veya JMeter gibi yük test aracı çeşit kullanmak ve gerçek onu bulmak olacaktır.

Sonuçlar, bu testleri yaptıktan sonra o kadar iyi görünmüyor, o zaman darboğaz ne olduğunu bulmak. Sen önbelleğe alma, ya da performansı artırmak için çeşitli yollar uygulamak için APC veya Memcache kullanabilirsiniz. Ama karanlıkta vahşi bir çekim alarak, ben 5k satırı sınıf performans nedenlerle değil, aynı zamanda iyi bir tasarım için değil, sadece, sen yarma düşünmelisiniz bir şey olduğunu söyleyebilirim. Bu HTML adet bina mantığı çok karmaşık değilse Ve belki de, sen JSON / XML olarak veri gönderme ve Javascript bu verileri kullanarak tablo oluşturmak icar ile müşteriye o boşaltması olabilir.

You really have over 100 functions in your class?
Probably (no I am 110% sure) your class is not well designed then, especially if it is "only" for HTML table creation.

Nesne Tabanlı Programlama iyi bir tekniktir ama doğru kullanmak zorundayız. Bu sadece tek bir yerde tüm prosedürel fonksiyonları koymak bana geliyor. Yani OOP değil. Ve bu kodu korumak zordur.

Tek sınıfta 100 yöntemler yol çok fazla, bir yoldur. , Kodunuzu refactor birden fazla sınıfa koymak ve sadece gerçekten ihtiyacı olan ithal. Ve hatta uygulama hakkında daha fazla bilmeden ben (ve) bundan fayda olacağını söyleyebiliriz.

Ben iyi bir vicdan ile böyle bir sınıf kullanabilirsiniz izin veremem ;)

You ask what you should do?
Learn OOP in the context of PHP and maybe read something about Design Patterns.

Edit:

Ben sadece sizin uygulamada her HTML oluşturmak için bir işleve sahip olduğunu gördüm, bu doğru mu? Eğer öyleyse gerçekten daha az kod neden olacaktır, dinamik tablolar oluşturmak için düşünmelisiniz ve muhtemelen bakımı daha kolaydır.

Sorun çözüldü. Sadece aramanın zamanda gerekli olan işlev kodunu okumak için değiştirildi. Şimdi birkaç yüz hatları yerine 5000 okur.