在 Yii 的官方網站上面有展示了以 Hello World 產生簡單頁面所做的效能比較 , 看到之後當然是驚為天人 , 但這個測試只能得知在 Controller 到 View 之間頁面生成速度 , Yii 確實是快的不像話
由於要幫公司重新設計專案 , 要求的是效能 , 但又要好維護 , 若單以 Hello World 為測試基準可能不是很客觀 , 所以我就想說來自己加一些測試的程式碼 , 我寫了一個簡單的 Hello World 與留言板的列表 , 由於大部分的網頁應用除了 View 的頁面產生佔很大的 Loading , 再來就是 DataBase 的 Fetch 速度了
測試的程式碼中 , Yii 部分我是用 yiic這個指令產生預設的專案目錄 , 也用 yiic 產生了 GuestBook 的 CActiveRecord 物件(等同 Zend_Db_Table) , 而在 Zend FrameWork 中的專案目錄則直接以 Zend Studio 產生 , 當然也撰寫了一個 GuestBook 物件繼承自 Zend_Db_Table 物件 , 這樣在相同性質下的資料庫物件測試就比較準確 , 廢話不說了 , 開始測試
測試環境
- CentOS 5.3 64bit+ PHP 5.2.9(remi) + MySQL 5.1(remi) + Apache/2.2.3
- 硬體 Intel Core2 E6700 , DDR2 800 8G RAM , RAID1 SATA 7200 RPM
- PHP 的 OP 快取使用 XCACHE 1.2
Yii 測試頁 : http://testcode.pigo.idv.tw/guestbook-yii-1.0.4/
ZF 測試頁 : http://testcode.pigo.idv.tw/guestbook-zf-1.7.8/public/
資料表定義
CREATE TABLE IF NOT EXISTS `guestbook` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`author` varchar(32) NOT NULL,
`content` text NOT NULL,
`create_date` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `create_date` (`create_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Hello World 測試
這個測試並沒有使用到資料庫物件 , 純粹是為了看看 MVC 中的 V 及 C 的效能 , 以下分別用 apache ab 來測試 yii 與 Zf 的效能指令
ab -c 10 -n 1000 http://testcode.pigo.idv.tw/guestbook-yii-1.0.4/index.php
Document Path: /guestbook-yii-1.0.4/index.php
Document Length: 1145 bytes
Concurrency Level: 10
Time taken for tests: 1.356087 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 1372000 bytes
ab -c 10 -n 1000 http://testcode.pigo.idv.tw/guestbook-zf-1.7.8/public/
Document Path: /guestbook-zf-1.7.8/public/
Document Length: 1088 bytes
Concurrency Level: 10
Time taken for tests: 4.768108 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 1315000 bytes
Guesbook List 1 測試
這個主要評測 Yii 的 CActiveRecord 及 Zend FrameWork 的 Zend_Db_Table 讓 MVC 較完整 , 只抓 6 筆資料
ab -c 10 -n 1000 http://testcode.pigo.idv.tw/guestbook-yii-1.0.4/index.php?r=guestbook/index
Document Path: /guestbook-yii-1.0.4/index.php?r=guestbook/index
Document Length: 1953 bytes
Concurrency Level: 10
Time taken for tests: 2.896622 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 2180000 bytes
ab -c 10 -n 1000 http://testcode.pigo.idv.tw/guestbook-zf-1.7.8/public/guestbook/
Document Path: /guestbook-zf-1.7.8/public/guestbook
Document Length: 1931 bytes
Concurrency Level: 10
Time taken for tests: 5.967082 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 2158000 bytes
GuestBook List 2 測試
這個主要評測 Yii 的 CActiveRecord 及 Zend FrameWork 的 Zend_Db_Table 讓 MVC 較完整 , 只抓 12 筆資料
ab -c 10 -n 1000 http://testcode.pigo.idv.tw/guestbook-yii-1.0.4/index.php?r=guestbook/list2
Document Path: /guestbook-yii-1.0.4/index.php?r=guestbook/list2
Document Length: 2787 bytes
Concurrency Level: 10
Time taken for tests: 3.18424 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 3014000 bytes
ab -c 10 -n 1000 http://testcode.pigo.idv.tw/guestbook-zf-1.7.8/public/guestbook/list2
Document Path: /guestbook-zf-1.7.8/public/guestbook/list2
Document Length: 2812 bytes
Concurrency Level: 10
Time taken for tests: 6.51425 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 3039000 bytes
GuestBook List 3 測試
這個測試直接使用 SQL 語法來抓資料 , 只抓 6 筆
ab -c 10 -n 1000 http://testcode.pigo.idv.tw/guestbook-yii-1.0.4/index.php?r=guestbook/list3
Document Path: /guestbook-yii-1.0.4/index.php?r=guestbook/list3
Document Length: 1959 bytes
Concurrency Level: 10
Time taken for tests: 1.868451 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 2186000 bytes
ab -c 10 -n 1000 http://testcode.pigo.idv.tw/guestbook-zf-1.7.8/public/guestbook/list3
Document Path: /guestbook-zf-1.7.8/public/guestbook/list3
Document Length: 1948 bytes
Concurrency Level: 10
Time taken for tests: 5.22780 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 2175000 bytes
GuestBook List 4 測試
這個測試直接使用 SQL 語法來抓資料 , 只抓 12 筆
ab -c 10 -n 1000 http://testcode.pigo.idv.tw/guestbook-yii-1.0.4/index.php?r=guestbook/list4
Server Software: Apache/2.2.3
Server Hostname: testcode.pigo.idv.tw
Server Port: 80
Document Path: /guestbook-yii-1.0.4/index.php?r=guestbook/list4
Document Length: 2787 bytes
Concurrency Level: 10
Time taken for tests: 1.973862 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 3014000 bytes
ab -c 10 -n 1000 http://testcode.pigo.idv.tw/guestbook-zf-1.7.8/public/guestbook/list4
Server Software: Apache/2.2.3
Server Hostname: testcode.pigo.idv.tw
Server Port: 80
Document Path: /guestbook-zf-1.7.8/public/guestbook/list4
Document Length: 2812 bytes
Concurrency Level: 10
Time taken for tests: 5.103221 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 3039000 bytes
總整理
以下用列表整理出 1000 次 Request 所花的時間來比較一下
YII 所花時間(秒) | ZF 所花時間(秒) | 速度差異(倍) | |
Hello World | 1.356087 | 4.768108 | 3.52 |
GuestBook List 1 | 2.896602 | 5.967082 | 2.06 |
GuestBook List 2 | 3.10826 | 6.24852 | 2.01 |
GuestBook List 3 | 1.868451 | 5.22780 | 2.8 |
GuestBook List 4 | 1.973862 | 5.103221(有鬼?) | 2.58 |
GuestBook List 3(2k) | 3.849646 | 10.24806 | 2.66 |
GuestBook List 4(2k) | 3.959143 | 10.129466(有鬼?) | 2.56 |
有一個地方我覺得見鬼了 ,GuestBook List 4 在 ZF測試中 , 效能竟然比 GuestBook List 3 還要好 , 任我百般的測試仍是如此 .... 難道資料越多越快 ?? 因此最後我多列了 2K (2000 次 Request) 來看仍是如此 , 這真的是讓我不可思議 ...
不管了 , 從上表仍可得知 , 在一般的狀況下 , Yii 在有資料庫的情況下仍是比起 ZF 快上兩倍以上 , 官網上面的 Hello World 範例上面比 ZF 快上八倍的速度 , 我看過官網的測試 Code , 那份測試並無包含 View 的測試 , 只有到 Controller 就 echo "Hello World" , 因此官網的數據會看起來比較誇張 , 但不論如何 , 預設的情況下 Yii 真的挺快的.
另外 , 有興趣檢查有沒有鬼的朋友可以按這裡下載我的原始碼與 SQL 資料 , 看是不是真有鬼 🙂
請問壞蛋我是LINUX CENTOS 5.3
但是用remi 套件都強制更新到PHP 5.3.0
不知道有沒有什麼辦法…只要更新 PHP 5.2.9??
發現PHP 5.3.0 改了好多~~使用者也不習慣
通告: 壞蛋的部落格 » proxmox ve 性能測試
拜讀您的文章之後,我倒是想使用100萬筆交易資料做為測試基準,說不定Zf的架構比較適合大量資料fetch所設計?
那是不可能的事情 ! 哈 !