PHP终极提速

来源:百度文库 编辑:神马文学网 时间:2024/04/29 05:26:13

标题: PHP终极提速[打印本页]
作者: HeTal    时间: 2006-3-30 10:09 AM     标题: PHP终极提速
人们都说PHP是脚本语言,但是我们应该感谢我们的Zend,他为我们做了很多可以扩展的功能
用Zend API和PHP API的扩展把我们的PHP的复杂操作封装到PHP或者PHP的extensions里,这里的速度将会有质的提高
网上一直在说JSP和PHP的10000*10000等的运算,我试过把这个函数写到一个so文件里,PHP来调用这个函数,只用了几百毫秒,我想这是JSP或者JAVA永远都不可能做到的
所以:
终极提速就是:::
把复杂的,耗时的操作封装到PHP的extensions里,可以编译到PHP里,也可以编译成so或者dll文件,3Q
这里也特别建议加一个PHP的Zend API的讨论区,谢谢!
这是my_test.c中的test的函数
CODE:
[Copy to clipboard]
PHP_FUNCTION(test)
{
char *arg = NULL;
int arg_len, len;
char string[256];
/*
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
return;
}
*/
//gettimeofday(&t,NULL);
int i=0,j=0;
for(i=0;i<10000;i++)
for(j=0;j<10000;j++){}
return SUCCESS;
}
这是我在PHP里调用的代码
CODE:
[Copy to clipboard]
if(!extension_loaded(‘my_test‘)) {
dl(‘my_test.‘ . PHP_SHLIB_SUFFIX);
}
function getmicrotime(){
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
$time_start = getmicrotime();
/*
for($i=0;$i<10000;$i++)
for($j=0;$j<10000;$j++){}
*/
test();
$time_end = getmicrotime();
$time = $time_end - $time_start;
echo "seconds:$time\n";
?>
程序执行结果:
CODE:
[Copy to clipboard]
seconds:0.358623981476
[ 本帖最后由 HeTal 于 2006-3-30 10:16 AM 编辑 ]作者: HeTal    时间: 2006-3-30 12:24 PM
自己顶一下作者: xuefengal    时间: 2006-3-30 01:39 PM
写应用扩展是很不错,但针对你的题目及代码确不怎么合适
[ 本帖最后由 xuefengal 于 2006-3-30 01:45 PM 编辑 ]作者: xuefengal    时间: 2006-3-30 01:41 PM
,,,,,,
[ 本帖最后由 xuefengal 于 2006-3-30 01:42 PM 编辑 ]作者: darx    时间: 2006-3-30 04:10 PM

好帖作者: 奶瓶    时间: 2006-3-30 10:33 PM
look
源文件的ext里有一个ext_skel
运行它一下,看看有啥~~作者: HeTal    时间: 2006-3-30 11:04 PM
我这里只是举一个例子,具体的,比如你在网站的搜索这种功能,PHP脚本本身很费时,这个时候你就可以把他写成so的方式
还有就是写商业模块,这方面我觉得也很不错
谢谢,呵呵作者: 奶瓶    时间: 2006-3-30 11:55 PM
搜索动作本身不应该PHP完成,出于实际使用上的考虑
商业模块也不应该做so,出于道义上的考虑
分享,是一种美德
哈哈哈作者: yueyang    时间: 2006-3-31 08:49 AM
不错,现在做ASP的都搞组件来加密商业代码了。
PHP加密也被破解了,看来只有如此了。作者: HeTal    时间: 2006-3-31 10:14 AM
QUOTE:
搜索动作本身不应该PHP完成,出于实际使用上的考虑
商业模块也不应该做so,出于道义上的考虑
分享,是一种美德
搜索动作是应该由PHP发起,搜索过程才不是由PHP完成
商业模块也不应该做so,出于道义上的考虑
看来微软和很多卖钱的软件公司都没有道义了?
呵呵,我们只能说so等是一种方案,但不是全部,对吧?作者: 奶瓶    时间: 2006-3-31 10:35 AM
发起动作无非是接受form 分析 提交 再接收 再输出
这种动作对扩展来说不会获得多大好处
不是卖钱的公司无道义,我也卖钱,不过按照so这种方式来发布好像很奇怪
so的本质是做功能性、协议扩展,连接PHP和其它程序(比如数据库系统)
对于性能上的扩展,并不是特别的常用,毕竟没有多少人会用PHP这种脚本算圆周率,扩展性能比较多地集中在数组上,因为PHP的数组是一种散列,二维数组的排序、遍历等操作是非常慢的,但是又很常用,这一类的应用才有价值作者: HeTal    时间: 2006-3-31 11:48 AM
QUOTE:
按照so这种方式来发布好像很奇怪
我用过很多商业的API,他们在LINUX下的发布都是有.a或者.so的方式来发布他们的API,用这种方式发布商业程序尤其是API没有什么奇怪的,如移动的短信CMPP2.0和CMPP3.0的C的API,而且是在LINUX下的教常用的,还有就是直接发布RPM或者BIN等,以这种方式发布程序(不是API)
QUOTE:
因为PHP的数组是一种散列,二维数组的排序、遍历等操作是非常慢的
这里我建议看看PHP源码目录下的ext/standard/array.c,我想你不会对PHP的数组或者其他变量有偏见,PHP的变量是一个通用的C的结构
QUOTE:
对扩展来说不会获得多大好处
如果这样说是肯定不对的,PHP的几乎绝大部份函数和库都是通过这种方法来写的,包括array,socket,mysql,soap,curl等等,呵呵
希望有更多有益的交流,谢谢!作者: hzjjw    时间: 2006-3-31 12:22 PM
路过……
有些收获,不错作者: 奶瓶    时间: 2006-3-31 01:22 PM
发布商业的so正常 发布商业的so有点那个了
PHP的数组绝对不是C的标准数组,当然散列也是标准结构
数组的严格定义是在编译前确定空间,长度,而且数组的下标有严格意义。
手册上的文字:
PHP 中的数组实际上是一个有序图。图是一种把 values 映射到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组来使用,或列表(矢量),散列表(是图的一种实现),字典,集合,栈,队列以及更多可能性。因为可以用另一个 PHP 数组作为值,也可以很容易地模拟树。
对于PHP数组的理解,严格定义上的数组和这类脚本数组不一样,PHP的数组和Perl的类似,array.c中明确定义了数组是一种HashTable
它的“二维”排序速度是很差的
我知道php的功能都是在ext中,不过我想知道的是,在搜索的时候,你希望这个扩展来做什么?现有的不够么?作者: fwolf    时间: 2006-4-1 06:20 PM
思路不错,可是否能够附上各个平台的ext如何生成?
以及ext的一般编写方式?作者: dot    时间: 2006-4-1 09:57 PM
强贴。
留名。回头继续看。作者: HeTal    时间: 2006-4-3 06:25 PM
稍后一定加上,
不过只要自己看看手册,上面有很详细的说明了,到时我写几个常用的贴上来吧
推荐PECL的mailparse这个扩展,好东西,还有其他的
欢迎光临 喜悦国际村 (http://www.phpx.com/happy/)
_xyz