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
    待压测的接口服务链接:

  • PhalApi v2.0.0 默认接口服务:http://demo2.phalapi.net/

  • PhalApi v1.4.1 默认接口服务:http://demo.phalapi.net/
    这里,使用Autobench进行基准测试,压测脚本为:
  1. autobench \
  2. --single_host \
  3. --host1=$DM \
  4. --port1=80 \
  5. --uri1=$URL \
  6. --low_rate=1 \
  7. --high_rate=50 \
  8. --rate_step=1 \
  9. --num_call=1 \
  10. --num_conn=50 \
  11. --timeout=5 \
  12. --file ./$DM.tsv

对于新、旧版本,其压测结果对比如下(左图为新版,右图为旧版):4.3 PhalApi 2.x VS PhalApi 1.x - 图1

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

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

新版本的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%
PhalApi\Request::getAllHeaders 1 0.20% 229 2.50%

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

4.3 PhalApi 2.x VS PhalApi 1.x - 图3

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

更多请点击查看:

单元测试覆盖率对比

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

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

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

4.3 PhalApi 2.x VS PhalApi 1.x - 图4

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

  1. /path/to/phalapi/kernal/tests$ phpunit -c ./phpunit_silence.xml
  2. PHPUnit 4.3.4 by Sebastian Bergmann.
  3. Configuration read from /path/to/phalapi/kernal/tests/phpunit_silence.xml
  4. ............................................................... 63 / 327 ( 19%)
  5. ............................................................... 126 / 327 ( 38%)
  6. ............................................................... 189 / 327 ( 57%)
  7. ............................................................... 252 / 327 ( 77%)
  8. ............................................................... 315 / 327 ( 96%)
  9. ............
  10. Time: 14.05 seconds, Memory: 26.25Mb
  11. OK (327 tests, 480 assertions)

静态代码质量分析对比

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

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

4.3 PhalApi 2.x VS PhalApi 1.x - 图5

快速对比新、旧版的静态代码质量,可以得出:新版本在遵循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%

更多请点击查看:

原文: http://docs.phalapi.net/#/v2.0/compare-2x-with-1x