4.3 PhalApi 2.x VS PhalApi 1.x

2018-07-28 21:15 更新

PhalApi 2.x VS PhalApi 1.x

不同的使用方式和組織方式,不僅決定了框架內(nèi)部特質(zhì)上的差異,還影響了外部使用上的區(qū)別。本文章主要介紹PhalApi v2.0.0 版本PhalApi v1.4.1 版本之間的內(nèi)部差異。并約定,下文中,新版本是指PhalApi v2.0.0 版本,舊版本是指PhalApi v1.4.1 版本。

新、舊版本主要的對(duì)比結(jié)論,匯總?cè)缦拢?

  • 新、舊版基準(zhǔn)測(cè)試結(jié)果基本一致
  • 新、舊版本執(zhí)行時(shí)間相差約為1毫秒
  • 新版的單元測(cè)試,覆蓋率達(dá)90%以上,通過(guò)率為100%
  • 新版的技術(shù)債務(wù)僅1天,質(zhì)量更優(yōu)!

基準(zhǔn)測(cè)試對(duì)比

對(duì)比結(jié)論:新、舊版基準(zhǔn)測(cè)試結(jié)果基本一致

壓測(cè)環(huán)境配置為:

  • 阿里云服務(wù)器ECS(CPU:1核 內(nèi)存:1 GB 寬帶:1Mbps)
  • 操作系統(tǒng):CentOS release 6.7 (Final)
  • nginx/1.8.0
  • PHP 5.3.5

待壓測(cè)的接口服務(wù)鏈接:

這里,使用Autobench進(jìn)行基準(zhǔn)測(cè)試,壓測(cè)腳本為:

autobench \
    --single_host \
    --host1=$DM \
    --port1=80 \
    --uri1=$URL \
    --low_rate=1 \
    --high_rate=50 \
    --rate_step=1 \
    --num_call=1 \
    --num_conn=50 \
    --timeout=5 \
    --file ./$DM.tsv

對(duì)于新、舊版本,其壓測(cè)結(jié)果對(duì)比如下(左圖為新版,右圖為舊版):

在并發(fā)量為50以內(nèi)時(shí),新、舊版本的響應(yīng)時(shí)間基本一致,約為20 ms。對(duì)于新版,詳細(xì)的壓測(cè)報(bào)告數(shù)據(jù)如下:

dem_req_rate    req_rate_demo2.phalapi.net  con_rate_demo2.phalapi.net  min_rep_rate_demo2.phalapi.net  avg_rep_rate_demo2.phalapi.net  max_rep_rate_demo2.phalapi.net  stddev_rep_rate_demo2.phalapi.net   resp_time_demo2.phalapi.net net_io_demo2.phalapi.net    errors_demo2.phalapi.net
1   1.0 1.0 1.0 1.0 1.0 0.0 20.2    0.4 0
2   2.0 2.0 2.0 2.0 2.0 0.0 18.7    0.9 0
3   3.1 3.1 3.0 3.0 3.0 0.0 18.9    1.3 0
4   4.1 4.1 4.0 4.0 4.0 0.0 19.2    1.7 0
5   5.1 5.1 5.0 5.0 5.0 0.0 18.7    2.1 0
6   6.1 6.1 6.0 6.0 6.0 0.0 18.4    2.6 0
7   7.1 7.1 7.0 7.0 7.0 0.0 18.4    3.0 0
8   8.1 8.1 8.0 8.0 8.0 0.0 18.7    3.4 0
9   9.1 9.1 9.0 9.0 9.0 0.0 18.9    3.8 0
10  10.1    10.1    0.0 0.0 0.0 0.0 18.5    4.3 0
11  11.1    11.1    0.0 0.0 0.0 0.0 19.0    4.7 0
12  12.2    12.2    0.0 0.0 0.0 0.0 18.9    5.1 0
13  13.2    13.2    0.0 0.0 0.0 0.0 18.9    5.5 0
14  14.2    14.2    0.0 0.0 0.0 0.0 18.5    6.0 0
15  15.2    15.2    0.0 0.0 0.0 0.0 18.4    6.4 0
16  16.2    16.2    0.0 0.0 0.0 0.0 19.0    6.8 0
17  17.2    17.2    0.0 0.0 0.0 0.0 18.8    7.2 0
18  18.2    18.2    0.0 0.0 0.0 0.0 18.5    7.6 0
19  19.2    19.2    0.0 0.0 0.0 0.0 18.4    8.1 0
20  20.2    20.2    0.0 0.0 0.0 0.0 35.9    8.5 0
21  21.2    21.2    0.0 0.0 0.0 0.0 18.3    8.9 0
22  22.2    22.2    0.0 0.0 0.0 0.0 19.0    9.3 0
23  23.2    23.2    0.0 0.0 0.0 0.0 18.8    9.7 0
24  24.1    24.1    0.0 0.0 0.0 0.0 18.4    10.2    0
25  25.1    25.1    0.0 0.0 0.0 0.0 18.3    10.6    0
26  26.1    26.1    0.0 0.0 0.0 0.0 18.4    11.0    0
27  27.1    27.1    0.0 0.0 0.0 0.0 18.5    11.4    0
28  28.1    28.1    0.0 0.0 0.0 0.0 18.5    11.8    0
29  29.1    29.1    0.0 0.0 0.0 0.0 18.4    12.3    0
30  30.1    30.1    0.0 0.0 0.0 0.0 18.5    12.7    0
31  31.1    31.1    0.0 0.0 0.0 0.0 18.7    13.1    0
32  32.0    32.0    0.0 0.0 0.0 0.0 18.3    13.5    0
33  33.0    33.0    0.0 0.0 0.0 0.0 18.3    13.9    0
34  34.0    34.0    0.0 0.0 0.0 0.0 18.1    14.3    0
35  10.5    10.5    0.0 0.0 0.0 0.0 48.5    4.4 0
36  8.1 8.3 9.8 9.8 9.8 0.0 18.3    3.4 2.04081632653061
37  37.0    37.0    0.0 0.0 0.0 0.0 18.2    15.6    0
38  37.9    37.9    0.0 0.0 0.0 0.0 18.4    15.9    0
39  38.9    38.9    0.0 0.0 0.0 0.0 18.6    16.4    0
40  39.9    39.9    0.0 0.0 0.0 0.0 18.6    16.8    0
41  40.9    40.9    0.0 0.0 0.0 0.0 18.6    17.2    0
42  41.8    41.8    0.0 0.0 0.0 0.0 18.4    17.6    0
43  8.0 8.2 9.8 9.8 9.8 0.0 18.6    3.4 2.04081632653061
44  12.4    12.4    0.0 0.0 0.0 0.0 18.4    5.2 0
45  25.2    25.2    0.0 0.0 0.0 0.0 18.2    10.6    0
46  12.5    12.5    0.0 0.0 0.0 0.0 18.5    5.3 0
47  25.2    25.2    0.0 0.0 0.0 0.0 18.3    10.6    0
48  12.5    12.5    0.0 0.0 0.0 0.0 18.4    5.2 0
49  25.2    25.2    0.0 0.0 0.0 0.0 18.6    10.6    0
50  9.3 9.3 9.8 9.8 9.8 0.0 35.7    3.9 0

XHprof性能剖析對(duì)比

對(duì)比結(jié)論:新、舊版本執(zhí)行時(shí)間相差約為1毫秒

使用XHprof對(duì)新、舊版本進(jìn)行性能剖析,經(jīng)過(guò)多次分析并取各自最優(yōu)值,對(duì)關(guān)鍵性能指標(biāo)的對(duì)比如下:

性能指標(biāo) PhalApi v2.0.0 新版本 PhalApi v1.4.1 舊版本 趨勢(shì)
Total Incl. Wall Time (microsec) 9,249 microsecs 8,393 microsecs + 10.20%
Total Incl. CPU (microsecs) 8,999 microsecs 6,999 microsecs + 28.58%
Total Incl. MemUse (bytes) 1,852,424 bytes 1,608,600 bytes + 15.16%
Total Incl. PeakMemUse (bytes) 1,866,608 bytes 1,619,544 bytes - 10.27%
Number of Function Calls 629 701 + 13.69%

就上面報(bào)告的數(shù)據(jù)可以看出,新版本的各項(xiàng)性能指標(biāo)比舊版本有所增加。這是因?yàn)橐肓薱omposer機(jī)制所產(chǎn)生的影響。雖然有所漲幅,但由于基數(shù)低,新版本的性能還是非常優(yōu)異的。例如對(duì)于Wall Time,新版本為9,249毫秒,舊版本的Wall Time為8,393 microsecs,僅相差了0.856毫秒,即不到1毫秒。執(zhí)行時(shí)間會(huì)隨系統(tǒng)環(huán)境配置不同,執(zhí)行時(shí)的系統(tǒng)狀態(tài)不同,會(huì)相對(duì)變化,而函數(shù)調(diào)用的次數(shù)則是固定的。如果僅從函數(shù)調(diào)用次數(shù)來(lái)對(duì)比,新版本則比舊版本少了72次調(diào)用。

新版本的XHprof報(bào)告

新版本的XHprof性能報(bào)告概覽如下:

新版本的Top 10耗時(shí)操作是:

Function Name Calls Calls% Excl. Wall Time (microsec) EWall%
load::NotORM/Result.php 1 0.20% 1408 15.20%
run_init::src/bootstrap.php 1 0.20% 2813 30.40%
load::composer/ClassLoader.php 1 0.20% 449 4.90%
load::Database/NotORMDatabase.php 1 0.20% 314 3.40%
load::NotORM/MultiResult.php 1 0.20% 286 3.10%
load::NotORM/Structure.php 1 0.20% 255 2.80%
load::NotORM/Row.php 1 0.20% 252 2.70%
load::src/Request.php 1 0.20% 243 2.60%
load::NotORM/Cache.php 1 0.20% 213 2.30%
PhalApi\Request::getAllHeaders 1 0.20% 229 2.50%

對(duì)應(yīng)的高清版可視化圖表如下:

可以看到,最耗時(shí)的操作是對(duì)NotORM文件的引入(上圖經(jīng)色部分),這與舊版本最耗時(shí)的操作是一樣的。

更多請(qǐng)點(diǎn)擊查看:

單元測(cè)試覆蓋率對(duì)比

對(duì)比結(jié)論:新版依然保持著90%以上的單元測(cè)試覆蓋率

PhalApi一直推薦使用測(cè)試驅(qū)動(dòng)的開(kāi)發(fā)方式,通過(guò)意圖導(dǎo)向編程,提高開(kāi)發(fā)效率、提升代碼質(zhì)量。

對(duì)于PhalApi自身框架的開(kāi)發(fā),我們同樣也是遵循TDD的最佳實(shí)踐,爭(zhēng)取為開(kāi)源社區(qū)產(chǎn)出優(yōu)質(zhì)的框架。對(duì)于新版本,其核心框架代碼部分的單元測(cè)試覆蓋率達(dá)94%以上,如下圖所示:

此外,核心框架的單元測(cè)試通過(guò)率是100%。執(zhí)行單元測(cè)試套件的輸出效果,類似如下:

/path/to/phalapi/kernal/tests$ phpunit -c ./phpunit_silence.xml 
PHPUnit 4.3.4 by Sebastian Bergmann.


Configuration read from /path/to/phalapi/kernal/tests/phpunit_silence.xml


...............................................................  63 / 327 ( 19%)
............................................................... 126 / 327 ( 38%)
............................................................... 189 / 327 ( 57%)
............................................................... 252 / 327 ( 77%)
............................................................... 315 / 327 ( 96%)
............


Time: 14.05 seconds, Memory: 26.25Mb


OK (327 tests, 480 assertions)

靜態(tài)代碼質(zhì)量分析對(duì)比

對(duì)比結(jié)論:新版的技術(shù)債務(wù)僅1天,質(zhì)量更優(yōu)!

借助于開(kāi)源中國(guó)碼云上的代碼分析服務(wù),可以得到以下Sonar分析報(bào)告,從中可以看到新版框架的核心部分技術(shù)債務(wù)僅有1天。

快速對(duì)比新、舊版的靜態(tài)代碼質(zhì)量,可以得出:新版本在遵循composer和psr-4規(guī)范下,代碼質(zhì)量更優(yōu)。例如,技術(shù)債務(wù)從原來(lái)1天5小時(shí)降為1天,問(wèn)題總數(shù)從158個(gè)降為97個(gè)。

質(zhì)量指標(biāo)|PhalApi v2.0.0 新版本|PhalApi v1.4.1 舊版本|趨勢(shì)
代碼行數(shù)|2663|2267| + 17.46% 技術(shù)債務(wù)|1天|1天 5小時(shí)| - 17.24% 問(wèn)題總數(shù)|97|158| - 38.61% 復(fù)雜度(方法)|2.7|2.7| 0%

更多請(qǐng)點(diǎn)擊查看:

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)