PHP 扩展开发之Zephir

最近对代码进行性能分析后,发现两个耗时的地方:自动加载文件数太多;参数验证函数调用超过1000次。这也是许多php语言框架面临的问题,因此发展出来诸如YafSwoolePhalcon这些C语言扩展框架,或者相似workermanreactphpphpdaemon这些一次加载的框架。总之减小加载文件,使用内置函数,减小损耗,以提高性能。
相比之下,PHP扩展的框架性能仍是要比PHP语言框架还要好很多。以往PHP扩展的开发方式就是C/C++SWIG,如今还多了一个选择:zephir,从Phalcon发展出来的项目,采用相似PHP语法的中间语言,将代码编译为高性能的C扩展。zephir支持面向对象编程,变量类型除了相似PHP的动态类型,还支持静态类型(有点像FackBook的hack了),并且能够调用php内置或其余C扩展的函数。zephir编译流程以下
scheme
整个过程是zephir和底层编译器自动进行编译优化的,固然也能够本身调整以得到更好的性能。
在ubuntu下的安装如官方教程便可,在centos下的安装以下php

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

安装完成以下:
zephir10
按照教程建立示例:html

1
2
3
zephir init utils
cd utils
sudo vim utils /greeting .zep

greeting.zep代码以下:react

1
2
3
4
5
6
7
8
9
10
11
namespace Utils;
 
class Greeting
{
 
     public static function say()
     {
         echo "hello world!" ;
     }
 
}

编译安装git

1
$ zephir build

注意,我在php5.3下面这么编译都不行,在php5.5/php5.4的版本基本没有碰到什么问题。
而后更改php.ini:github

1
sudo vim /etc/php .ini

在php.ini中加上如下内容web

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里面:json

1
sudo vim /etc/php .d /json .ini
1
2
3
[json]
;已经在php.ini中加载了,为避免重复加载注释掉
;extension = json

加载成功后的效果:
zephir3
建立一个php脚原本试一下ubuntu

1
2
cd ~ /utils
sudo vim greeting.php

greeting.php代码以下:vim

1
2
3
<?php
 
echo Utils\Greeting::say(), "\n" ;

保存并运行:
zephir11
zephir5
zephir6
至此你的zephir编译的扩展已经成功了,赶忙翻译你的PHP代码去吧。
参考这篇教程,计算斐波拉契数列在个人环境下是这样的:
zephir13性能提高仍是挺明显的,并且在静态类型(强类型)下面还能比动态类型再提高。

相关文章
相关标签/搜索