PHP Nesneler: Fazla veya az daha iyi?

3 Cevap php

Ben önce dilimleri ve tarih / zaman aqbout istediler ama bu PHP nesneleri hakkında daha fazla daha spesifik bir sorudur.

<?PHP
//set the user's time zone on page load
date_default_timezone_set("America/Los_Angeles");

//convert the timestamp from DB into the user's time
$timestamp = '2008-05-01 13:44:19'; //this would normally be returned from mysql
echo ConvertDateTime($timestamp, "America/Los_Angeles");

//here is the function to convert it
function ConvertDateTime($timeString, $timeZone)
{
    if ( $d = new DateTime($timeString) ) {
        $d-&gt;setTimeZone(new DateTimeZone($timeZone));
        return $d-&gt;format("Y-m-d H:i:s");
    }
    return null;
}
?>

Tamam bu muhtemelen bazı aptalca bir queston ama örneğin ben 1 veritabanı nesnesi oluşturmak ve birlikte sayfadaki her mysql sorgu çalışacak genellikle bir sayfada, sınıflar ve nesneler söz konusu olduğunda gerçekten çok deneyim çok şey bilmek ya da yok 1 nesne ayarlamanız. Ben her zaman daha az nesneler muhtemelen daha iyi olduğunu düşünüyorum ama ben nesnelerin yüzlerce sahip doğru veya değil f emin değilim 1 nesneye göre kullanılan aynı hız ve resourses olacağını bu sitede okudum.

Benim sorum, yukarıdaki fonksiyonu, sen benim durum bazı sayfalarda 100 kez olabilir, işlev olarak adlandırılan yeni bir DateTime nesnesi her yaratılmış olduğunu görebilirsiniz. Yani bir singlton gibi kullanmalısınız hatta benim veritabanı nesnesi olarak ayarlanır ya da ben sadece işlev nesnesinin bir ton yaratmak izin vermeli başlığında bir dattim nesne 1 saati ayarlayabilirsiniz?

Ben muhtemelen, herhangi bir tavsiye takdir yapmalıyım artılarını ve eksilerini ve lütfen açıklayın, bazı I, ön-optimize değilim de ben bunu istediğim yerde bunu elde etmek için 2 yıldır bir akım site optimize edilmiş ve şimdi yeniden olduğumu söyleyebiliriz -bina o AYNI sitesi yüzden biraz beklemek filan userload biliyorum ve ben yerine şimdi yerine daha sonra böyle bir şey düzeltmek istiyorum.

3 Cevap

Ben bir singlton gibi kullanmanız gerekir

Singleton sorunsuz değildir - örneğin, genellikle (otomatik) zor test yapmak. Daha az ve "büyük" Altyapıları tarafından sevdim hangi nedenlerinden biri olan (I'm thinking about Zend Framework and Symfony, which are reducing the number of Singletons for their next major version)


I could set a dattim object 1 time in the header

Küresel bir değişken / nesnesi kullanarak çok, yan etkileri ile gidebilirsiniz; Değişken "yerel" olarak ifade edilirse, yerel olmalı - readibily kodu ve onu anlama yeteneği, genel bir milisaniyelik bir kısmını daha önemlidir.


For extreme and specific cases, the only (true) solution is to profile : you want your script / application to go faster ? To use less CPU ?

Sonra, her şeyden önce, o profile! Bu darboğazları tespit yardımcı olacak - ve konsantre olmalı ne göstereceğim.

Ve daha yüksek performans artışı alacağı - Şansını hızlı (i.e. which would take less time to think about, code, and test) optimize edilebilecek şeyler bol vardır.


In the end, you always have to choose between :

  • mümkün olan en iyi performansları
  • onu geliştirmek için gereken zaman / şey optimize
  • onu korumak için gereken zaman; Senden başkası için de dahil olmak üzere.

Ve sık sık, yeni, daha güçlü bir sunucu (veya ikinci bir) olacak nihayet coest% 5 sadece almak için optimize harcanan birkaç hafta daha az!

(Note I didn't say you shouldn't optimize ; but you shouldn't over-optimize.)

I always think less objects is probably better but I have read on this site that having hundreds of objects would be the same speed and resourses used compared to 1 object, not sure f it's true or not.

(Ancak, bunlar sizin açınızdan eylem gerektirir / fark olmayabilir) böylece eylem o yolu yankı olacak varsayabiliriz - Ek nesneler ek bellek alanı gerektirir.

you can see that a new DateTime object is created everytime the function is called, could be 100 times on some pages in my situation. So should I use like a singlton

Evet, singleton'ununu kullanabilirsiniz - Yoksa (sen aynı sayfada birden fazla farklı zamanlarını gösteren Hazır - ya da birçok yerde sadece aynı hesaplanan zaman?) Sayfası için sonucunu önbelleğe

Her zaman işlevi bellek serbest, sol: Yeni bir nesne fonksiyon denir her zaman oluşturarak bu durumda o kadar ekstra bellek kullanımını vermeyecektir.

Eğer tam olarak aynı $ TimeString ve $ timezone ile işlevini bir çok kez arıyorsanız, size sonucu önbelleğe eklemek isteyebilirsiniz. Aramaların en benzersiz olacak, ben önbelleğe alma eklemek olmaz: o zaman hız performansı yardım, ancak tüm sonuçları saklamak olabilir, bellek kaybıdır onları yeniden süre değil.