×
PhalApi 2.x 前言

PhalApi 2.x 快速开发

1.1 下载与安装1.2 运行Hello World1.3 如何请求接口服务1.4 接口响应与在线调试1.5 Api接口层1.6 Domain领域层和ADM模式1.7 Model数据层与数据库操作1.8 单元测试1.9 自动加载和PSR-41.10 接口文档

PhalApi 2.x 数据库

2.1 数据库链接2.2 数据库与NotORM2.3 数据库使用和查询2.4 数据库分库分表策略2.5 连接多个数据库2.6 打印和保存SQL语句2.7 定制你的Model基类

PhalApi 2.x 高级专题

3.1 PhalApi 2.x 接口参数3.2 PhalApi 2.x 配置3.3 PhalApi 2.x 日志3.4 PhalApi 2.x 缓存3.5 PhalApi 2.x 过滤器3.6 PhalApi 2.x COOKIE3.7 PhalApi 2.x 加密3.8 PhalApi 2.x 国际化3.9 PhalApi 2.x CURL请求3.10 PhalApi 2.x 工具和杂项3.11 PhalApi 2.x DI服务汇总

PhalApi 2.x 发现更多

4.1 PhalApi 2.x 扩展类库4.2 PhalApi 2.x SDK包的使用4.3 PhalApi 2.x 脚本命令

关于PhalApi 2.x

5.1 PhalApi 2.x 版本完美诠释5.2 PhalApi 2.x 升级指南5.3 PhalApi 2.x VS PhalApi 1.x

5.3 PhalApi 2.x VS PhalApi 1.x


不同的使用方式和组织方式,不仅决定了框架内部特质上的差异,还影响了外部使用上的区别。本文章主要介绍PhalApi v2.0.0 版本PhalApi v1.4.1 版本之间的内部差异。并约定,下文中,新版本是指PhalApi v2.0.0 版本,旧版本是指PhalApi v1.4.1 版本。

新、旧版本主要的对比结论,汇总如下:

  • 新、旧版基准测试结果基本一致
  • 新、旧版本执行时间相差约为1毫秒
  • 新版的单元测试,覆盖率达90%以上,通过率为100%
  • 新版的技术债务仅1天,质量更优!

基准测试对比

对比结论:新、旧版基准测试结果基本一致

压测环境配置为:

  • 阿里云服务器ECS(CPU:1核 内存:1 GB 宽带:1Mbps)
  • 操作系统:CentOS release 6.7 (Final)
  • nginx/1.8.0
  • PHP 5.3.5

待压测的接口服务链接:

这里,使用Autobench进行基准测试,压测脚本为:

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

对于新、旧版本,其压测结果对比如下(左图为新版,右图为旧版):

在并发量为50以内时,新、旧版本的响应时间基本一致,约为20 ms。对于新版,详细的压测报告数据如下:

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性能剖析对比

对比结论:新、旧版本执行时间相差约为1毫秒

使用XHprof对新、旧版本进行性能剖析,经过多次分析并取各自最优值,对关键性能指标的对比如下:

性能指标 PhalApi v2.0.0 新版本 PhalApi v1.4.1 旧版本 趋势
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%

就上面报告的数据可以看出,新版本的各项性能指标比旧版本有所增加。这是因为引入了composer机制所产生的影响。虽然有所涨幅,但由于基数低,新版本的性能还是非常优异的。例如对于Wall Time,新版本为9,249毫秒,旧版本的Wall Time为8,393 microsecs,仅相差了0.856毫秒,即不到1毫秒。执行时间会随系统环境配置不同,执行时的系统状态不同,会相对变化,而函数调用的次数则是固定的。如果仅从函数调用次数来对比,新版本则比旧版本少了72次调用。

新版本的XHprof报告

新版本的XHprof性能报告概览如下:

新版本的Top 10耗时操作是:

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%
PhalApiRequest::getAllHeaders 1 0.20% 229 2.50%

对应的高清版可视化图表如下:

可以看到,最耗时的操作是对NotORM文件的引入(上图经色部分),这与旧版本最耗时的操作是一样的。

更多请点击查看:

单元测试覆盖率对比

对比结论:新版依然保持着90%以上的单元测试覆盖率

PhalApi一直推荐使用测试驱动的开发方式,通过意图导向编程,提高开发效率、提升代码质量。

对于PhalApi自身框架的开发,我们同样也是遵循TDD的最佳实践,争取为开源社区产出优质的框架。对于新版本,其核心框架代码部分的单元测试覆盖率达94%以上,如下图所示:

此外,核心框架的单元测试通过率是100%。执行单元测试套件的输出效果,类似如下:

/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)

静态代码质量分析对比

对比结论:新版的技术债务仅1天,质量更优!

借助于开源中国码云上的代码分析服务,可以得到以下Sonar分析报告,从中可以看到新版框架的核心部分技术债务仅有1天

快速对比新、旧版的静态代码质量,可以得出:新版本在遵循composer和psr-4规范下,代码质量更优。例如,技术债务从原来1天5小时降为1天,问题总数从158个降为97个。

质量指标|PhalApi v2.0.0 新版本|PhalApi v1.4.1 旧版本|趋势
代码行数|2663|2267| + 17.46% 技术债务|1天|1天 5小时| - 17.24% 问题总数|97|158| - 38.61% 复杂度(方法)|2.7|2.7| 0%

更多请点击查看:


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)