PHP 網頁設計 技巧
Google小組共享左其網站加速係技巧大全,其中包括左一dPHP性能技巧。然而呢dPHP性能技巧在PHP社區中引起左一陣軒然大波,PHP小組立刻寫左一篇公開信比呢d性能技巧“抓蟲”。有關Google既建議,51CTO呢幾日做左整理,做出文章《加速,加速,再加速:來自Google的網站加速技巧大全》。其中第四頁既後半部分就是專門講PHP相關既性能技巧,在閱讀本文之前可以先熟悉一下。
以下係來自PHP小組既信件譯文:
PHP小組:呢篇文章中所給既建議全部都係錯誤。
1. 沒有原因儘量不要複製變量
PHP 4和5核心既Zend引擎使用左一個名為“copy-on-write”既內存管理系統。也就係話,無論你將一個變量既值賦值比另一個變量多少次,只要你唔改變數值,數據係唔會被複製的。範例:
2. $memory_used_before = memory_get_usage();
3. $more_data = $data;
4. $memory_used_after = memory_get_usage();
5. print "Before: {$memory_used_before}\nAfter: {$memory_used_after}\n";
有thread-safety及調試功能的PHP 5.3下:
之前:853968
之後:854236
沒有thread-safety及調試功能的PHP 5.2下:
之前:581912
之後:581976
亦即係,調試模式下有268位元組既差別,正常模式下(普遍使用的)有64位元組既差別。呢個同Google文中所述(51CTO編者注:Google原文既描述中,複製變量會“導致雙倍既內存消耗”)相差甚遠。
需要注意既係,PHP代碼中堅決禁止在冇恰當過濾既情況下將用戶提供的變量原本內容進行echo或者存儲。
2. 為長字符串使用單引號
針對PHP 5.2及5.3的基準測試顯示,雖然雙引號使用竄改(interpolation)而單引號使用連鎖(concatenation),這兩個既速度係完全一致(甚至雙引號常常會更快一些)。當使用冇包含變量既普通字符串時,使用雙引號既性能要明顯佔優。
3. 使用echo而非print
呢兩個方法既運行速度取決於你既PHP係點設置在host上的。
4. 不要與echo一起使用concatenation(連鎖)
事實正好相反。新既引擎處理多條echo既方法,導致在echo中使用concatenation實際上會比較快。
5. 使用switch/case替代if/else
最後,呢句建議係徹底既胡說八道。決定係邊用switch/case或者if/else完全取決於編碼習慣,他們既運行速度基本一致,除左在某些特定既情況下。
事實上,在更古老既PHP版本下(PHP 3及很老的PHP 4版本)呢d大部分建議係正確的,然而在新一代的PHP下,呢d絕對是錯誤的