2011-09-30 25 views
0

最喜歡的我們的代碼庫,我們的MySQL處理功能定製。在PHP中,如果沒有錯誤發生,抑制函數的錯誤輸出(通過@)會影響性能?

他們的工作非常好,包括一些伐木叉。

我們的查詢執行功能的簡化版本是這樣的:

if(!$result=mysql_query($query)){ 
    file_put_contents(QUERYLOG,'Query '.$query.' failed execution'); 
} 

這是過於簡化了,但你的基本思想是:如果查詢失敗,他們將被記錄到一個單獨的查詢日誌。

這是跟蹤需要在來看待任何問題的一個好方法。

我的問題如下:

通過以上,微小的問題是,如果一個查詢失敗了我們的查詢日誌,我們的PHP日誌將錯誤作爲的mysql_query(加蓋...或mysql_connect,mysql_select_db等)會產生一個php錯誤。

我們想要做的是surpress PHP的錯誤通過:

.... [email protected]_query($query .... 

所以,就因爲這個問題有云:

是否使用PHP中的@錯誤抑制機制造成任何性能影響,如果沒有錯誤產生?或者只在產生錯誤時才影響性能?

我知道,我知道,微優化,但你可以猜測,或查詢執行函數用於數百萬次,所以即使是很小的性能損失是值得研究的。

+0

不,它並不一定值得研究。如果一個版本的速度要快一微秒(而且我預計它遠遠不如此),那麼您每天都會談論*幾秒鐘*。這不到0.1%。擔心代碼是否正確,而不是快速少於0.1%。 – cHao

+0

我不同意。雖然我們可以花費數天的時間辯論這個問題(並且可以確定有無數SO問題),即使是0.1%的影響也值得研究。我關於這個問題的觀點是,這些微觀優化中的20到30個等於一個「宏觀」優化。現在看到我們的代碼庫大約3-4歲,很難得到。我猜想,我們決不會就此事達成一致,所以請指出,謝謝。 –

+0

再說,學習如何PHP的錯誤抑制機制的內部工作,獨自一人,是值得3分鐘吧把我寫的問題;) –

回答

3

了一個小的「研究」

$s = microtime(true); 
$a = array('1','2'); 
$b = $a[1]; 
echo microtime(true)-$s; 

1.1205673217773E-5 ,如果我使用$b = @$a[1];我得到多一點:1.5974044799805E-5

這樣:是的,是有區別的,但沒有,你應該不打擾。