2012-09-21 30 views
1

我不知道是否有因使用「斷言」當ASSERT_ACTIVE設置爲0(assert_options(ASSERT_ACTIVE, 0);任何性能的斷層。斷言性能

舉例來說,如果我有一個龐大的系統工程,有很多在它中斷言,它會比那些斷言不會在那裏慢嗎?在大多數語言中,這兩種情況之間不會有任何區別,但我認爲這是因爲它們是編譯的,而不是執行的就像PHP一樣。

如果沒有性能差異,是否可以在PHP中創建類似於assert的函數,以便在未設置標誌/變量時調用所有對它的調用功能完全被忽略? (這樣的功能可以用來使開發/調試變得更容易,但對於啓動的網站沒有任何價值)。

+1

您是否嘗試過基準測試? –

+0

@WaleedKhan我剛纔那樣做了,在一臺體面的服務器上,它在100萬次呼叫上增加了〜1秒,在一臺體面的服務器上;我可能不會在腳本中發現那麼多斷言,但希望它們被忽略,正如評論 –

回答

1

性能不會很顯着...使用它所有你想要的。

創建一個類似的函數,當標誌未設置時忽略調用...參見下文。

define('ASSERT_ENABLED', true); 

function assertEquals($a, $b) 
{ 
    if(!defined('ASSERT_ENABLED') || !ASSERT_ENABLED) { 
     return; 
    } 

    if($a !== $b) { 
     throw new \RuntimeException("Failed asserting that $a === $b"); 
    } 
} 
+0

謝謝。我擔心,也許這是如何聲稱工作。即使性能下降並不是那麼大,但對於影響性能的代碼並沒有任何用處(發佈時),我感覺不太好。 –

+0

如果它是一個有用的開發工具,那麼不要擔心生產性能問題:它實際上並不存在,如果編寫一個腳本來評論你所有對'assert'的調用是否困難,那也不難。 – Lusitanian