php页面生成耗时分析
socket讀寫
使用 smarty 解析 space 的 blog 頁模板,php 與 spuser 和 blogapp 通過 socket 各交互一次,spuser 和 blogapp 為虛擬的樁模塊,接到請求立即返回。
從 socket_connect 到 socket_close 直接的一次 socket 交互的時間,包括寫140(164)字節的請求,讀取shead,unpack shead,讀取返回數據,shead+返回數據共956(8707)字節。
耗時為 100 次 wget 頁面返回結果的平均值。
交互耗時(s):
| talk_with_spuser | 0.0002652 |
| talk_with_blogapp | 0.0002777 |
樁模塊耗時(s):
| gserv_spuser | 0.000352 |
| gserv_blogapp | 0.000252 |
注:?此處裝模塊的耗時統計包括了一些返回數據后的其它處理(select、close什么的),所以大于了 php 的耗時統計。
另外,后來查這個問題的時候發現,php 的 Benchmark類的精度不好,統計 talk_with_spuser 的耗時時,在緊挨 $timer->setMarker 的外面加了gettimeofday,統計出來的時間就差了近 50us
總的來說,可以認為 php 的socket 交互耗時很小,基本可以忽略。
unpack耗時
| spuser(956 bytes) | 0.000242 |
| blogapp(8707 bytes)? | 0.0004318 |
這里 spuser 的數據只用了一次unpack,而 blogapp 的數據用了 1 + 1 * 5 + 1 * 15 = 21 次unpack
smarty耗時
smarty 無 cache 時:
| smarty | 0.0350042 |
| Total | 0.036453 |
smarty 有 cache (compile cache) 時:
| smarty | 0.0018135 |
| Total | 0.0032881 |
Total 為整個頁面的生成時間,包括了 socket 交互、unpack 二進制數據和 smarty 的時間
php socket 與 c socket 讀寫
分別使用 php 和 c 程序循環向 echo 服務器發包和讀包,統計平均耗時
第一列代表包的大小和循環次數
| ? | phpC||
| 8192 * 50000 | 26s | 26s |
| 8192 * 500000? | 4m26s | 4m20s |
| 1024 * 100000? | 40s | 39s |
總結
以上是生活随笔為你收集整理的php页面生成耗时分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Web高并发访问:用HAPorxy实现负
- 下一篇: php glob() 列出目录及文件