Yii VS Zend Framework 效能測試

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 物件 , 這樣在相同性質下的資料庫物件測試就比較準確 , 廢話不說了 , 開始測試

測試環境

  1. CentOS 5.3 64bit+ PHP 5.2.9(remi) + MySQL 5.1(remi) + Apache/2.2.3
  2. 硬體 Intel Core2 E6700 , DDR2 800 8G RAM , RAID1 SATA 7200 RPM
  3. 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 資料 , 看是不是真有鬼 🙂

 

4 則評論在 Yii VS Zend Framework 效能測試.

  1. 請問壞蛋我是LINUX CENTOS 5.3

    但是用remi 套件都強制更新到PHP 5.3.0
    不知道有沒有什麼辦法…只要更新 PHP 5.2.9??
    發現PHP 5.3.0 改了好多~~使用者也不習慣

  2. 通告: 壞蛋的部落格 » proxmox ve 性能測試

發佈留言