博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP 扩展开发之Zephir
阅读量:6827 次
发布时间:2019-06-26

本文共 2015 字,大约阅读时间需要 6 分钟。

最近对代码进行性能分析后,发现两个耗时的地方:自动加载文件数太多;参数验证函数调用超过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代码去吧。
参考这篇,计算斐波拉契数列在我的环境下是这样的:
性能提升还是挺明显的,而且在静态类型(强类型)下面还能比动态类型再提升。

转载地址:http://ywykl.baihongyu.com/

你可能感兴趣的文章
工厂方法模式与IoC/DI
查看>>
Linux编程(获取系统时间)
查看>>
速记 - 实现sql server clr trigger
查看>>
PowerShell 开发
查看>>
C#3.0实现变异赋值(Mutantic Assignment)
查看>>
MySql的一些基本使用及操作命令 (待更新)
查看>>
题目4:棋盘寻宝扩展
查看>>
[ASP.NET MVC 小牛之路]14 - Unobtrusive Ajax
查看>>
引爆你的集合灵感 [C#, LINQ]
查看>>
可以把Windows xp模仿Vista界面工具。
查看>>
对一些面试题的回答
查看>>
c# enum用法
查看>>
Struts2 中action之间的跳转(分享)
查看>>
HDU4707:Pet(DFS)
查看>>
html标签页图标
查看>>
C# list 新用法
查看>>
Android 获取控件相对于屏幕位置
查看>>
UITableViewAutomaticDimension
查看>>
常用的python模块
查看>>
程序源代码行数分析统计器
查看>>