Feb15

【原创】最佳PHP框架选择(phalcon,yaf,laravel,thinkphp,yii)

Author: leeon  Click: 1368   Comments: 1 Category: php  Tag: php,yaf,phalcon,laravel,thinkphp,yii

     最近面试了不少人,绝大部分使用的是thinkphp和laravel这两个框架,真正高性能的框架yaf和phalcon反而没有人使用。我认为使用框架主要基于这几点因素:

1. 工程结构规范化

2. 代码格式规范化

3. 功能抽象化

4. 逻辑封装化

5. 底层核心透明化

     tp,laravel,yii的简单实用的上手难度不高,但是复杂封装又各有特点需要深入学习,虽然可以快速通过其丰富的组件功能来构建一个基本的网站,但是后期的学习曲线也比较高。不管是用哪种框架,都是基于MVC模式来设计。本质上都是通过统一的路由管理器来派发不同的控制器任务。本文我将通过直接的性能测评来选出PHP7版本下认为在性能和工程化上最优的PHP框架。

 框架 版本  说明 
 yaf 3.0.4   通过yaf自带的yaf_cg来初始化一个基本工程
 thinkphp 5.0.6   composer创建一个基本工程,关闭debug
 phalcon  3.0.3  通过phalcon-devtools工具创建一个基本工程
 laravel  5.4  composer创建一个基本工程,关闭debug
 yii  2.0.11  yii手工下载basic版本工程,关闭debug

      我们通过将5个工程分别部署成5个网站,并修改里面的首页控制器,均改为输出到页面“hello”字段来评测裸框架下的基准性能。基础测试环境采用负载稳定的树莓派3来运行,并通过另外一台树莓派2来进行ab压力测试。fpm进程设定为static模式,并设定fpm进程数为5个,opcache设为开启状态。

ab运行命令类似如下,并连续采样10次来分析持续压力下的框架稳定性。

ab -k  -c 20 -n500 -q http://127.0.0.1/

压力测试结果如下:

laravel phalcon 原生php yaf thinkphp yii

87.9 670.66 1258.67 1061.76 545.93 61.65

100.4 924.2 1331.67 1126.23 618.78 65.88

81.19 921.87 1352.38 1129.91 608.41 77.84

111.39 930.88 1355.48 1159.62 601.55 79.05

53.89 929.71 1367.68 1165.19 607.24 72.21

94.67 918.72 1482.87 1107 607.24 82

62.21 932.51 1374.17 1130.23 610.72 76.42

85.63 925.01 1674.64 1124.18 609.11 69.82

67.05 913.12 1828.11 1128.22 608.72 75.67

89.21 879.26 1809.36 1159.38 601.18 77.93

     我们可以看到原生的PHP依然是相当强悍的,yaf的性能比phalcon高,这是因为yaf框架只 包含最基本的路由配置加载,并未有任何高级封装,相比phalcon框架丰富的组件,yaf在内存加载启动上必然比phalcon要轻量化。我们可以看到PHP实现的thinkphp性能表现不俗,但lavarel和yii的性能确实有点差强人意了。

    yaf属于超轻量级的c级别裸框架,只集成了基本的视图和路由控制,如果要完成一个中等以上规模的网站的话,还需要集成非常多的第三方类库,如果在线上运营环境中使用,会因为php加载大量的第三方类库而影响到性能。

    phalcon基于c的实现几乎完整的实现了yii,laravel,thinkphp具备的功能特点,同时在性能上完胜了这三个框架,在性能和功能上做了一个比较好的平衡。对于一个可扩展架构的高性能PHP框架而言,phalcon具备了比PHP实现的框架更好的稳定性和开发效率。phalcon虽然在入门门槛上偏高,但是我们只要熟悉了他的框架结构,我们可以很快速的去实现任何web服务业务模型。phalcon具体的介绍将在下一章节中进行介绍。

Feb10

【原创】采用xhgui及tideways搭建PHP性能监控平台

Author: leeon  Click: 1256   Comments: 0 Category: php  Tag: xhgui,xhprof,tideways,php

      xhprof扩展已经三年多没有更新了,PHP7是没法直接使用xhprof来进行性能分析了。好在tideways出品了一款xhprof的进化版php性能分析插件,可以完美支持php7程序。网上关于如何使用tideways和xhgui搭建性能分析平台的教程已经有了很多,部署的话可以参考借鉴这篇文章https://segmentfault.com/a/1190000007580819,但是在搭建过程中还是遇到了一些问题,需要说明一下。

   1. 当git clone https://github.com/perftools/xhgui.git xhguid的源后,注意你的php代码中必须安装mogondb的扩展,否则在php install的时候会出现调用composer安装第三方库失败,composer下载的vendoer资源也是需要依赖pecl的mogondb库的。这点在官方的配置文档中并没有提及。

  2. xhgui在配置nginx的时候官方文档也有些问题,需要注意这里

这里需要修改成:

        location / {

                 try_files $uri $uri/ /index.php?$query_string;

        }

如果不修改这个配置,xhgui里面集成的slim框架无法正常解析到路由数据。
 3.xhgui里面集成的slim框架有一个轻微语法出错,会导致php7下warning级别错误,请修复vendor\slim\views\Slim\Views\Twig.php文件的render方法,父类定义了第二个参数,但继承的类中没有指定导致warning报错,将第二个参数添加上即可:
public function render($template, $data = NULL)

xhgui属于无侵入式的代码性能监控方案,对于现有的代码不需要原先xhprof那样在代码中埋点指定xprof的文件路径,我们仅仅需要在对应的项目工程nginx配置中加入如下的代码:

[code="plain"]
fastcgi_param TIDEWAYS_SAMPLERATE "25";
fastcgi_param PHP_VALUE "auto_prepend_file=/usr/local/nginx/html/xhgui/external/header.php";
[/code]

第二行配置请根据自己的xhgui存放路径进行填写。

Nov28

【原创】关于APCU序列化在PHP7中使用的注意事项

Author: leeon  Click: 1194   Comments: 0 Category: php  Tag: php,apcu,php7

这两天线上服务器fpm频繁coredump,strace跟踪到php返回

write(2, "zend_mm_heap corrupted\n", 23) = 23

当时以为是php内核内存触发的bug,由于线上环境部署的是最新版本的php7+phalcon3,所以刚开始是怀疑新版本的程序的兼容性问题,但是在线下环境下模拟还原线上的所有基础环境时发现并不是如此,故一一比对线上的不同,发现运维在配置文件中使用了与线下不同的配置项,我们的程序同时用到了apcu的扩展,发现运维在配置的时候指定了apcu的序列化方法:
apc.serializer=igbinary
采用的是igbinary算法,但是我们线上新部署的环境中并没有支持到这个算法的扩展,故导致了问题发生。
解决方法为从pecl中下载igbinary扩展,安装并配置到ini文件中即可。
备注:
原先运维在使用php5.6的时候并没有直接编译igbinary,但是配置文件中依然指定了igbinary,php5.6进程并不会发生coredump如果igbinary不存在就会跳过采用原生的序列化,但php7针对igbinary的判断应该做了改变。

Jun15

【原创】PHP取模时为负数小计

Author: leeon  Click: 1348   Comments: 0 Category: php  Tag: php,取余数

      用了几年的php今天才注意到在32位环境下php去大数字取模为负数情况存在。在32位php运行环境下,被取模的数字不能大于数字2147483648,除了php手册中说明的采用fmod函数的方式获取正确数值外,现在大部分的服务器已经是64位话,在php编译为64位运行时时,是可以正常支持到更大的取模运算,这时候当数值大于2147483647时取模是不会出现负数的。也就是说当我们php运行在64位环境下同时编译的php为64位版本一般不会出现负数问题,除非你的被取模数字大于9223372036854775808,此时已经超过有符号64位的最大取值范围了。

    注意如果取模数值超过了64位的最大整型值,这时候取模得到的数值都为0。如果更大的数值取模保险的方式还是使用fmod函数,

分类

标签

归档

最新评论

ligaofeng在11:55:22评论了
file_get_contents超时问题的解决方法
我也不知道叫个啥好在00:59:46评论了
shell中使用while循环ssh的注意事项
司马成空在16:14:13评论了
【原创】ZendStudio中格式化HTML代码错位问题修正
Owen在22:56:46评论了
【原创】MyBatis Generator使用小记
waltye在23:38:05评论了
【原创】武汉互联网公司介绍[2016年8月更新版]

我看过的书

链接

其他

访问本站种子 本站平均热度:6010 c° 本站链接数:27 个 本站标签数:428 个 本站被评论次数:87 次