最近对代码进行性能分析后,发现两个耗时的地方:自动加载文件数太多;参数验证函数调用超过1000次。这也是许多php语言框架面临的问题,所以发展出来诸如,,这些C语言扩展框架,或者类似,,这些一次加载的框架。总之减少加载文件,使用内置函数,减少损耗,以提升性能。
相比之下,PHP扩展的框架性能还是要比PHP语言框架还要好不少。以往PHP扩展的开发方式就是,,现在还多了一个选择:,从Phalcon发展出来的项目,采用类似PHP语法的中间语言,将代码编译为高性能的C扩展。zephir支持面向对象编程,变量类型除了类似PHP的动态类型,还支持静态类型(有点像FackBook的了),而且可以调用php内置或其他C扩展的函数。zephir编译流程如下整个过程是zephir和底层编译器自动进行编译优化的,当然也可以自己以获得更好的性能。在ubuntu下的安装如即可,在centos下的安装: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | su -c 'yum update' sudo yum install -y wget sudo yum install -y vim sudo yum install -y libtool sudo yum install -y gcc sudo yum install -y make sudo yum install -y re2c sudo rpm -Uvh https: //mirror .webtatic.com /yum/el6/latest .rpm sudo yum install -y php55w sudo yum install -y php55w-devel sudo yum install -y php55w-json sudo yum install -y git-core git clone https: //github .com /json-c/json-c .git cd json-c . /autogen .sh . /configure make make install git clone https: //github .com /phalcon/zephir cd zephir . /install -c zephir help |
安装完成如下:
按照教程创建示例: 1 2 3 | zephir init utils cd utils sudo vim utils /greeting .zep |
greeting.zep代码如下:
1 2 3 4 5 6 7 8 9 10 11 | namespace Utils; class Greeting { public static function say() { echo "hello world!" ; } } |
编译安装
1 | $ zephir build |
注意,我在php5.3下面这么编译都不行,在php5.5/php5.4的版本基本没有碰到什么问题。
然后更改php.ini: 1 | sudo vim /etc/php .ini |
在php.ini中加上以下内容
1 2 3 4 5 6 7 | ;zephir编译的扩展需要依赖json.so,需要提前加载 [json] ;如果php.ini中没有则加上,有则去掉; extension=json.so [utils] extension=utils.so |
查看php可用扩展
1 | php -i |
注意:如果提示’undefined symbol: php_json_decode_ex in Unknown on line 0’,则是php json扩展未加载,在php.ini打开就行了。加载了json.so后又提示’PHP Warning: Module ‘json’ already loaded’,则是已经在其他地方加载了该扩展,找出并注释掉。我的是在php.d下面的json.ini里面:
1 | sudo vim /etc/php .d /json .ini |
1 2 3 | [json] ;已经在php.ini中加载了,为避免重复加载注释掉 ;extension = json |
加载成功后的效果:
创建一个php脚本来试一下 1 2 | cd ~ /utils sudo vim greeting.php |
greeting.php代码如下:
1 2 3 | <?php echo Utils\Greeting::say(), "\n" ; |
保存并运行:
至此你的zephir编译的扩展已经成功了,赶紧翻译你的PHP代码去吧。参考这篇,计算斐波拉契数列在我的环境下是这样的:性能提升还是挺明显的,而且在静态类型(强类型)下面还能比动态类型再提升。