Hangi hızlıdır?

7 Cevap php

Ben her zaman bu merak oldum. İki kod örneği arasındaki hangi işlemci daha verimli? Ben çeşitli dillerde farklı olabileceğini anlamak ve ben cevap PHP ne olduğunu bilmek gerekir, ama cevabım farklı olurdu ben de JavaScript, CFScript ve ActionScript merak ediyorum.

Teşekkürler

ps: örnek, belirli bir dil için kesin olmayabilir, ama noktası olsun eminim

Örnek 1:

if(myVar < 1){
  return;//returned with nothing
else{
  //do something
}

Örnek 2:

if(myVar < 1){
  //left blank
else{
  //do something
}

EDIT: Guys, you're right, this would probably be completely unnecessary, I am asking this out of curiosity more than anything. I've been doing web development for more than a decade and It's all pretty much been self taught. I've seen a lot of code using both methods from "trained professionals" and was wondering if this was a personal preference or one group of people knew something the other didn't.

Ayrıca bu sahte kod examples.I 'm detayları biraz daha farklı olacağını birden fazla dil hakkında soran ve test tam emin ben soruyordu biliyordu yapmak için basit bir. Bu örnekler bir işlevi olacağını kabul edilmelidir.

7 Cevap

Sürece hiçbir ifadeleri if..else bloğunun bitiminden sonra olduğu gibi, ben en çok dilde aynıdır inanıyoruz.

Söyleniyor, ben benim kodu daha okunabilir ve hata ayıklama kolaylaştırır bulmak mümkün olduğunca az return ifadeleri kullanarak lehine eğilimindedir. Ben bu durumda verimlilik ile kendinizi endişe zaman değer şüphe - mümkün olduğunca temiz kod tutmak odaklanır.

Eğer kodu bir performans sorunu için arıyorsanız, bu not öyle. Eğer performansını kıstas değil varsa, o zaman bir performans sorunu var (henüz) yok.

En iyi niyetlerini ifade yöntemini kullanın. Başka bir şey asılsız mikro optimizasyonu olduğunu.

Update: Eğer (bu her zaman doğru değildir, ama çoğu zaman çalışır) olduğundan daha derleyici yazma insanlar daha akıllı olduğunu varsayın. Derleyici yazdım kodu bakmak, ve (bu makine kodu veya baytkodu veya ara gösteriminde bazı başka türlü olsun) nesne kodu bu temsil için en iyi şekilde anlamaya olacaktır. Yani mean tam olarak aynı şey, şans derleyici her iki durumda da aynı çıktıyı üretecektir iyi olduğu iki kod parçalarını var eğer.

Dönüş dışarı bırakmak hızlıdır.

Test This

Setup

function a(){if(true) return; else ;}

Code Under Test

a();

Tear Down

Output


Ran in 0.042321920394897 seconds 0.00018978118896484 over


And This

Setup

function b(){if(true) ; else ;}

Code Under Test

b();

Tear Down

Output


Ran in 0.042132139205933 seconds


Tested for 100,000 repetitions.

Ne oluyor bağlıdır ve ondan en iyi verime almak için o kod bölümünde en sık ne olur.

Ben kullanarak öneririm "return null;" ama hız nedenlerle, işlev çok beklediğiniz zaman durursa emin olabilirsiniz çünkü. Örneğin, siz veya bir başkası, bu işlevini değiştirmek deyimi değil kodu belirli koşullar altında çalıştırmak gerektiğini fark ederseniz dışında kod eklemek olacaktır mümkündür.

Genellikle beklediğiniz bir şekilde gerçekleşmesi şeyleri zorlamak için iyi bir fikirdir, bu tesadüfen işe izin vermeyin. Ben pratiklik biraz daha teori alıyorum, ama her zaman üzgünüm daha güvenli olduğunu unutmamanız gerekir.

İlk örnekte, başka gerekmez.

Derleyici iyi ise onlar, eşdeğer derlemek gerekir.

Bazen IFS bir derin iç içe IFS set bir iç içe olmayan sekansına dönüştürülebilir veya ands ile bağlantılı ifs olumlu durumda bir geri dönüş yapar, her biri bir düz IFS sequnce dönüştürülebilir. Bu okunabilirliği artırabilirsiniz.

if (a and b and c and d and e and f)
    do_something()

dönüştürülebilir için:

if (!a)
   return;

if (!b)
   return;

if (!c)
   return;

if (!d)
   return;

if (!e)
   return;

if (!f)
   return;

do_something();

Benim basit örnekte, ilk yolu okumak için muhtemelen daha kolay olduğunu, ancak af her oldukça karmaşık ifadeler olduğunda, 2. yol daha az girinti, vb sonucu, okumak için daha kolay olabilir

http://jsperf.com/empty-statement-vs-return

enter image description here

Ama gerçekten, saniyede infaz on milyonlarca alıyoruz zaman, gerçekten erken optimizasyon bulunuyor. Sadece uzun döngüler ve aşırı DOM işlemleri gibi şeyleri azaltmak için çok daha etkili olacaktır.