2009-12-24 52 views
2

一個網站,5個人類年代碼(5個開發人員,大約一年),每天點擊數千次。如果我們在可能的情況下將所有「改爲」,會產生什在PHP中使用'替代'是否真的有影響

+5

看到人們試圖微觀優化PHP代碼總是很有趣的,因爲PHP作爲平臺的常規基準測試幾乎比Java和.Net慢一個數量級。如果你使用PHP,你已經無望地落後於8球。 PHP有很多優點,但性能不是其中之一。如果這種微觀優化對您的應用程序至關重要,那麼您選擇了錯誤的語言。 – Asaph 2009-12-24 03:33:46

回答

9

查看double(「)與單個(')報價部分PHPBench(滾動至頁面末尾)。當我調用該頁面時,我看到以下結果:

Single Quotes: 257 µs 
Double Quotes: 232 µs 

除非25μs對您的問題域有影響,否則無關緊要。

我要試着在這裏算出數學,如果我犯了一個錯誤,有人會糾正我。假設你有10,000個使用雙引號而不是單引號的地方,每頁加載時間差異爲25μs(誰知道它是否會以這種方式實際工作,你需要基準你的實際代碼),那將是一個執行時間差0.25秒。如果你是Facebook的話,這可能很重要,取決於服務器負載。但是,我懷疑代碼庫中還有很多其他地方的資源密集程度更高,您甚至在查看引號之前都會優化它們。只要看看PhpBench頁面上強調的痛點,你就會看到你應該有不同的優先級。而且,如果您運行不同的PHP實現(如Quercus),這些數字將會大不相同 - 這可以解決一些性能瓶頸問題。

+0

What're「quites」? J/K +1:D – mpen 2009-12-24 02:44:08

+1

但是,對於任何新的PHP項目使用單引號是個好主意,對吧? – Omar 2009-12-24 02:53:06

+0

如果你是Facebook,你會使用更快的服務器。 ;) – 2009-12-24 02:57:42

8

正如有人在PHP微優化問題,指出了幾個星期前(我認爲這個問題是一樣的「,對應「),實施優化將幾乎總是花費更多的時間比以往任何時候都將

6

是的,當你將"$test\n"更改爲'$test\n'時,最終會出現這樣的錯誤。

真實數字,沒有。

+0

你能解釋一下這兩個例子的不同之處。 – mjdth 2009-12-24 02:46:54

+3

第一個打印出您的'$ test'變量的值,後面跟着一個換行符。第二次打印,字面上,'$ test \ n'。 – 2009-12-24 02:49:15

+0

更爲詳細地說,雙引號字符串評估變量和轉義序列,單引號字符串採用不帶替換的直接文本。因此,通過在上面的示例中將雙引號更改爲單引號,您在代碼中引入了一個錯誤。 – Asaph 2009-12-24 03:37:41

2

在微觀優化嘗試上花費時間的風險是可能(還有待確定)代碼(以及任何第三方依賴項)的方面,其可以/應該被剖析,然後被重構/優化每人工時間比率提高效率。我不能推薦你閱讀Remember also the rules of Optimization Club

+2

認爲它不是微型優化,而是我需要在開始這個龐大的項目之前爲程序員設置的指南...... – 2009-12-24 03:01:00

+0

這是一個公平點。 – micahwittman 2009-12-24 03:03:44

0

運行時的性能沒有差異。但編譯時有所不同。
考慮在PHP的報價通常使用的方法是:

單引號字符串內的變量不被解析,所以PHP引擎不必浪費時間尋找他們。因此,單引號字符串必須更有效

這假設是錯誤的,因爲PHP引擎不執行ckeck在運行時間,但在編譯的時候。
當PHP解析你的腳本時,如果它發現一個雙引號的字符串,它內部沒有變量,那麼該字符串被視爲一個常量字符串,即它的值在整個腳本的生命週期中不會改變(if裏面有變量,然後它被轉換成字符串連接)。
同樣,如果PHP找到一個單引號的字符串,它也被視爲一個常量。但在這種情況下,PHP不必分析字符串查找變量的內容。

因此,您的問題的答案取決於您是否使用PHP緩存解決方案(APC,eAcceleator等)。如果腳本的編譯沒有被緩存,那麼您可能會略有性能改進,因爲每次訪問者加載頁面時都會編譯腳本,因此編譯時間非常重要。 但是,如果您的腳本的編譯被緩存,那麼使用單引號字符串和雙引號字符串沒有什麼不同。

相關問題