![]() 标题: 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:
PHP_FUNCTION(test)
这是我在PHP里调用的代码{ 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; } CODE:
<?
程序执行结果: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:
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完成,出于实际使用上的考虑
搜索动作是应该由PHP发起,搜索过程才不是由PHP完成商业模块也不应该做so,出于道义上的考虑 分享,是一种美德 商业模块也不应该做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这个扩展,好东西,还有其他的
|
|
来自: Ralf_Jones > 《PHP》