![]() 標題: PHP終極提速 [打印本頁] 作者: HeTal 時間: 2006-3-30 10:09 AM 標題: PHP終極提速 人們都說PHP是腳本語言,但是我們應該感謝我們的Zend,他為我們做了很多可以擴展的功能 用Zend API和PHP API的擴展把我們的PHP的復雜操作封裝到PHP或者PHP的extensions里,這里的速度將會有質的提高 網上一直在說JSP和PHP的10000*10000等的運算,我試過把這個函數(shù)寫到一個so文件里,PHP來調用這個函數(shù),只用了幾百毫秒,我想這是JSP或者JAVA永遠都不可能做到的 所以: 終極提速就是::: 把復雜的,耗時的操作封裝到PHP的extensions里,可以編譯到PHP里,也可以編譯成so或者dll文件,3Q 這里也特別建議加一個PHP的Zend API的討論區(qū),謝謝! 這是my_test.c中的test的函數(shù) 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:
<?
程序執(zhí)行結果: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的方式 還有就是寫商業(yè)模塊,這方面我覺得也很不錯 謝謝,呵呵 作者: 奶瓶 時間: 2006-3-30 11:55 PM 搜索動作本身不應該PHP完成,出于實際使用上的考慮 商業(yè)模塊也不應該做so,出于道義上的考慮 分享,是一種美德 哈哈哈 作者: yueyang 時間: 2006-3-31 08:49 AM 不錯,現(xiàn)在做ASP的都搞組件來加密商業(yè)代碼了。 PHP加密也被破解了,看來只有如此了。 作者: HeTal 時間: 2006-3-31 10:14 AM QUOTE:
搜索動作本身不應該PHP完成,出于實際使用上的考慮
搜索動作是應該由PHP發(fā)起,搜索過程才不是由PHP完成商業(yè)模塊也不應該做so,出于道義上的考慮 分享,是一種美德 商業(yè)模塊也不應該做so,出于道義上的考慮 看來微軟和很多賣錢的軟件公司都沒有道義了? 呵呵,我們只能說so等是一種方案,但不是全部,對吧? 作者: 奶瓶 時間: 2006-3-31 10:35 AM 發(fā)起動作無非是接受form 分析 提交 再接收 再輸出 這種動作對擴展來說不會獲得多大好處 不是賣錢的公司無道義,我也賣錢,不過按照so這種方式來發(fā)布好像很奇怪 so的本質是做功能性、協(xié)議擴展,連接PHP和其它程序(比如數(shù)據(jù)庫系統(tǒng)) 對于性能上的擴展,并不是特別的常用,畢竟沒有多少人會用PHP這種腳本算圓周率,擴展性能比較多地集中在數(shù)組上,因為PHP的數(shù)組是一種散列,二維數(shù)組的排序、遍歷等操作是非常慢的,但是又很常用,這一類的應用才有價值 作者: HeTal 時間: 2006-3-31 11:48 AM QUOTE:
按照so這種方式來發(fā)布好像很奇怪
我用過很多商業(yè)的API,他們在LINUX下的發(fā)布都是有.a或者.so的方式來發(fā)布他們的API,用這種方式發(fā)布商業(yè)程序尤其是API沒有什么奇怪的,如移動的短信CMPP2.0和CMPP3.0的C的API,而且是在LINUX下的教常用的,還有就是直接發(fā)布RPM或者BIN等,以這種方式發(fā)布程序(不是API)QUOTE:
因為PHP的數(shù)組是一種散列,二維數(shù)組的排序、遍歷等操作是非常慢的
這里我建議看看PHP源碼目錄下的ext/standard/array.c,我想你不會對PHP的數(shù)組或者其他變量有偏見,PHP的變量是一個通用的C的結構QUOTE:
對擴展來說不會獲得多大好處
如果這樣說是肯定不對的,PHP的幾乎絕大部份函數(shù)和庫都是通過這種方法來寫的,包括array,socket,mysql,soap,curl等等,呵呵希望有更多有益的交流,謝謝! 作者: hzjjw 時間: 2006-3-31 12:22 PM 路過…… 有些收獲,不錯 作者: 奶瓶 時間: 2006-3-31 01:22 PM 發(fā)布商業(yè)的so正常 發(fā)布商業(yè)的so有點那個了 PHP的數(shù)組絕對不是C的標準數(shù)組,當然散列也是標準結構 數(shù)組的嚴格定義是在編譯前確定空間,長度,而且數(shù)組的下標有嚴格意義。 手冊上的文字: PHP 中的數(shù)組實際上是一個有序圖。圖是一種把 values 映射到 keys 的類型。此類型在很多方面做了優(yōu)化,因此可以把它當成真正的數(shù)組來使用,或列表(矢量),散列表(是圖的一種實現(xiàn)),字典,集合,棧,隊列以及更多可能性。因為可以用另一個 PHP 數(shù)組作為值,也可以很容易地模擬樹。 對于PHP數(shù)組的理解,嚴格定義上的數(shù)組和這類腳本數(shù)組不一樣,PHP的數(shù)組和Perl的類似,array.c中明確定義了數(shù)組是一種HashTable 它的“二維”排序速度是很差的 我知道php的功能都是在ext中,不過我想知道的是,在搜索的時候,你希望這個擴展來做什么?現(xiàn)有的不夠么? 作者: fwolf 時間: 2006-4-1 06:20 PM 思路不錯,可是否能夠附上各個平臺的ext如何生成? 以及ext的一般編寫方式? 作者: dot 時間: 2006-4-1 09:57 PM 強貼。 留名?;仡^繼續(xù)看。 作者: HeTal 時間: 2006-4-3 06:25 PM 稍后一定加上, 不過只要自己看看手冊,上面有很詳細的說明了,到時我寫幾個常用的貼上來吧 推薦PECL的mailparse這個擴展,好東西,還有其他的
|
|
來自: Ralf_Jones > 《PHP》